clmay

clmay

Function parentheses and `mix format`

Hi there,

I’m currently following an Elixir tutorial and I have the following lines of code in my project:

Path.join([path, file])
    |> File.read!
    |> split
    |> process(post)

When I run mix format, it gets turned into this:

Path.join([path, file])
    |> File.read!()
    |> split
    |> process(post)

I know this is a minor gripe, but I find it annoying/ugly that (optional) parentheses are added to File.read!/1 but not split/1

How can I configure mix format not to add (optional) parentheses to functions with no/implicit arguments?

I am aware of the .formatter.exs options import_deps: [...] and locals_without_parens: [...] but could not figure out how to add File.read! to these in a way that mix format would accept.

Any ideas?

Most Liked

NobbZ

NobbZ

You can not configure the treatment of File.read!/1, as it is not a “local”. :locals_without_parens will only ever work for unqualified calls, those you write without a module in fron tof them.

And parenthesis aren’t really optional, they are considered best practice by the community and most of us actually agree on the formatter in the regard of adding them unconditionally. I’d even consider it a bug, that none are added to split/1.

The main reason why parens have been made optional for the compiler, is probably to make things like def and defmodule writable without having to wrap parenthesis to their arguments.

marcandre

marcandre

For those interested, the latest formatter plugin freedom_formatter now has the option to add parenthesis for these calls.

foo |> bar |> baz
# becomes, if `local_pipe_with_parens` option set to `true`:
foo |> bar() |> baz()

Where Next?

Popular in Questions Top

lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

Other popular topics Top

jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40082 209
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New

We're in Beta

About us Mission Statement