Credence.Syntax.FixStaleAccessModifier
(credence v0.6.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 * 2The 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.