credo
credo copied to clipboard
Detect ambiguity in function calls without parentheses
Precheck
- Proposals for new features should be submitted via: https://github.com/rrrene/credo-proposals
- For bugs, please do a quick search and make sure the bug has not yet been reported here
Environment
- Credo version (
mix credo -v
): 1.7.3 - Erlang/Elixir version (
elixir -v
): 1.16.2/OTP 26 - Operating system: MacOS
What were you trying to do?
I'm running mix credo --strict
and getting this warning:
warning: missing parentheses for expression following "do:" keyword. Parentheses are required to solve ambiguity inside keywords.
This error happens when you have function calls without parentheses inside keywords. For example:
function(arg, one: nested_call a, b, c)
function(arg, one: if expr, do: :this, else: :that)
In the examples above, we don't know if the arguments "b" and "c" apply to the function "function" or "nested_call". Or if the keywords "do" and "else" apply to the function "function" or "if". You can solve this by explicitly adding parentheses:
function(arg, one: if(expr, do: :this, else: :that))
function(arg, one: nested_call(a, b, c))
Ambiguity found at:
└─ nofilename:5
It happens because of this piece of code:
foo do: rename table(:bar), :baz, to: :qux
Expected outcome
I'd like credo
to detect this ambiguity issue and add a suggestion about it to its output. That would be especially useful because the warning doesn't contain a correct path to the problematic code.
Actual outcome
This issue doesn't appear in the output.