Credence.Pattern.PreferFrequenciesOverGroupBy (credence v0.8.0)

Copy Markdown

Detects Enum.group_by/1 with an identity function piped into Enum.map/2 that counts group lengths, then piped into Enum.count/2 with a > 1 predicate — a manual "count duplicate occurrences" pattern that Enum.frequencies/1 followed by Enum.count/2 handles more idiomatically.

Bad

input
|> String.graphemes()
|> Enum.group_by(fn char -> char end)
|> Enum.map(fn {_key, values} -> length(values) end)
|> Enum.count(fn count -> count > 1 end)

Good

input
|> String.graphemes()
|> Enum.frequencies()
|> Enum.count(fn {_char, count} -> count > 1 end)