Skip to content

elixir-format does not respect locals_without_parens in .formatter.exs #428

Open
@lambdadog

Description

@lambdadog

With the following .formatter.exs and files, mix format $file respects locals_without_parens, whereas elixir-format does not

.formatter.exs

# Used by "mix format"
[
  inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"],
  locals_without_parens: [
    defroute: 2
  ]
]

lib/pea_bb/bbs/router.ex

defmodule PeaBB.BBS.Router do
  import PeaBB.Macro.Route

  defroute "/", PeaBB.BBS.Menu
  defroute "/board", PeaBB.BBS.Board
  defroute "/blog", PeaBB.BBS.Blog

  # 404 route not found
  def route(_), do: {:error, "Route does not exist."}
end

lib/pea_bb/macro/route.ex

defmodule PeaBB.Macro.Route do
  defmacro defroute(path, module) do
    with path <- String.split(path, "/", [:trim]) do
      quote do
        def route(unquote(gen_match_statement(path))),
          do:
            {unquote(module),
             unquote(
               case path do
                 [] -> quote do: []
                 _ -> quote do: t
               end
             )}
      end
    end
  end

  defp gen_match_statement([head | tail]) do
    quote do
      [unquote(head) | unquote(gen_match_statement(tail))]
    end
  end

  defp gen_match_statement([]),
    do: quote(do: t)
end

(I doubt the last file is important, but I included it for completeness sake given that these files have no external dependencies other than the existence of the modules being routed to)

when elixir-format is run, lib/pea_bb/bbs/router.ex is changed to

defmodule PeaBB.BBS.Router do
  import PeaBB.Macro.Route

  defroute("/", PeaBB.BBS.Menu)
  defroute("/board", PeaBB.BBS.Board)
  defroute("/blog", PeaBB.BBS.Blog)

  # 404 route not found
  def route(_), do: {:error, "Route does not exist."}
end

this is not the case for when mix format is run

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions