Basics
This check is disabled by default.
Learn how to enable it via .credo.exs.
This check has a base priority of high and works with any version of Elixir.
Explanation
Parameter names should match across clauses of the same function.
Why
LLMs write function clauses semi-independently and let the parameter names drift between them:
# Flagged — position 1 is `current` in one clause, `prev` in another
defp do_fib(current, _next, 0), do: current
defp do_fib(prev, current, steps), do: do_fib(current, prev + current, steps - 1)
# Consistent
defp do_fib(prev, _current, 0), do: prev
defp do_fib(prev, current, steps), do: do_fib(current, prev + current, steps - 1)Drift makes readers question correctness: if position 1 is current
in one clause and prev in another, which is the real intent?
Detection
Clauses of the same {name, arity} are grouped. For each positional
argument, base names (with any leading _ stripped) are compared
across clauses; differences flag.
Positions where any clause uses a literal, tuple/list pattern, or bare
_ are skipped — destructuring is intentional pattern matching, not
a parameter name.
Check-Specific Parameters
There are no specific parameters for this check.
General Parameters
Like with all checks, general params can be applied.
Parameters can be configured via the .credo.exs config file.