Credence.Pattern.NoChunkByIdentityForDedup (credence v0.7.0)

Copy Markdown

Detects Enum.chunk_by(enum, identity_fn) followed by extracting the first element of each chunk, which is a verbose reimplementation of Enum.dedup/1.

Enum.dedup/1 removes consecutive duplicates in a single pass with no intermediate list allocation. The chunk_by + map(first) pattern allocates a list of sublists just to throw them away.

Bad

Enum.chunk_by(list, & &1) |> Enum.map(&List.first/1)
list |> Enum.chunk_by(fn x -> x end) |> Enum.map_join(&List.first/1)

Good

Enum.dedup(list)
list |> Enum.dedup() |> Enum.join()

Auto-fix

Replaces chunk_by(identity) |> map(&List.first/1) with Enum.dedup(), and the map_join variant with Enum.dedup() |> Enum.join().