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
end

Good

@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