Formatter.exs seems to have no effect

I have this .formatter.exs file next to my mix.exs

[
  inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"],
  import_deps: [:absinthe, :ecto]
]

And I can see that ecto exports belongs_to/2 in it’s locals_without_parens. But when I run in my terminal

$ mix format lib/tinyclone/links/url.ex

I see that belongs_to still gets parentheses around it’s parameters.

I also tried changing the .formatter.exs to

[
  inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"],
  import_deps: [:absinthe, :ecto],
  locals_without_parens:, [belongs_to: 2, belongs_to: 3]
]

and even specifying the .formatter.exs file

$ mix format lib/tinyclone/links/url.ex --dot-formatter .formatter.exs

but still I get parentheses around the parameters. The line is

    belongs_to :links, TinyClone.Links.Link

What can be wrong?

Are you sure there is no misconfigured editor plugin which formats on safe without adhering to the .formatter.exs? I remember that the Elixir Language Server had problems of this kind quite a while…

I’ve seen such issues in other editors as well, depending on how they called into the formatter, how they were started, etc…

2 Likes

I am running these commands in the terminal while being in the directory containing both mix.exs and formatter.exs. Then I reopen the file to see it with changed.

Sorry I didn’t made it clear in my original post.

And you are sure that your editor does not run a format on safe?

1 Like

As far as I know it doesn’t. According to my configuration at least. But I don’t think that is the problem anyway because I tried cat in the the file before and after running the formatter in the terminal and again the parentheses appeared after the formatting. It didn’t pass through the editor at all.

Also the editor doesn’t pick up the changes automatically. I have to reopen the file to load the new changes.

Okay, then we have ruled out the editor, I’m pretty sure about that now.

Can you tell us about your elixir and erlang versions and perhaps even provide a repository to reproduce?

2 Likes

Okay. It was a very stupid mistake on my part. The project had two folders. One for backend and one for frontend and accidentally I had created a second .formatter.exs in the project root, above the elixir project root. That new file had the proper config while I was insisting on using the old file, next to mix.exs. Now it works.

@NobbZ Thank you so much for taking the time to help me with this.

4 Likes