Credence.Pattern.NoListAppendInRecursion (credence v0.4.4)

Copy Markdown

Performance rule: Detects acc ++ [expr] passed directly in a recursive tail call, where a matching base case returns the accumulator.

The auto-fix rewrites acc ++ [expr] to [expr | acc] in the recursive clause and wraps the base case return with Enum.reverse/1.

Bad

def build([h | t], result) do
  build(t, result ++ [h * 2])
end

def build([], result), do: result

Good

def build([h | t], result) do
  build(t, [h * 2 | result])
end

def build([], result), do: Enum.reverse(result)