Credence.Syntax.FixStaleAccessModifier (credence v0.5.0)

Copy Markdown

Removes non-Elixir access modifier keywords prepended to def/defp/defmacro/defmacrop.

LLMs translating from Java, Python, or TypeScript sometimes carry over access modifiers as prefixes, producing code like private defp or static def. In Elixir, visibility is encoded in the keyword itself (def = public, defp = private), so the prefix is always noise.

Examples

# Garbled prefix (actual LLM output)
pprivate defp _calculate_max_product(sorted) do
# Fixed:
defp _calculate_max_product(sorted) do

# Redundant prefix
private defp helper(x), do: x + 1
# Fixed:
defp helper(x), do: x + 1

# Contradictory prefix (trusts the Elixir keyword)
private def calculate(x), do: x * 2
# Fixed:
def calculate(x), do: x * 2

The rule always trusts the Elixir keyword and discards the prefix, because the function body, tests, and callers are written assuming whatever visibility def/defp provides.