Credence.Pattern.NoDuplicateSpec
(credence v0.8.0)
Copy Markdown
Detects duplicate @spec annotations before function clauses.
In Elixir, @spec is a compile-time type annotation consumed by tools like
Dialyzer — it has zero runtime effect. Writing the same @spec before every
clause of a function is redundant noise: the compiler only needs one. This
rule flags the duplicates and removes them, keeping the first @spec per
function name.
Bad
@spec largest_square_number(non_neg_integer()) :: non_neg_integer()
def largest_square_number(0), do: 0
@spec largest_square_number(non_neg_integer()) :: non_neg_integer()
def largest_square_number(number) when is_integer(number) and number >= 0 do
root = floor(:math.sqrt(number))
root * root
endGood
@spec largest_square_number(non_neg_integer()) :: non_neg_integer()
def largest_square_number(0), do: 0
def largest_square_number(number) when is_integer(number) and number >= 0 do
root = floor(:math.sqrt(number))
root * root
end