Credence.Pattern.UseMapJoin
(credence v0.4.5)
Copy Markdown
Detects Enum.map/2 chained into Enum.join/1 or Enum.join/2,
and suggests Enum.map_join/3 instead.
Why this matters
Enum.map/2 followed by Enum.join creates a throwaway intermediate
list. Enum.map_join/3 maps and joins in a single pass with no
intermediate allocation:
Bad
list
|> Enum.map(&to_string/1)
|> Enum.join(", ")
Enum.join(Enum.map(list, &to_string/1), ", ")Good
Enum.map_join(list, ", ", &to_string/1)
list
|> Enum.map_join(", ", &to_string/1)Flagged patterns
Enum.map(enum, f) |> Enum.join()(pipeline, any separator)Enum.join(Enum.map(enum, f))(nested call)- Longer pipelines where map and join are adjacent steps
Only adjacent map→join is flagged. Intervening steps like
Enum.map(f) |> Enum.filter(g) |> Enum.join() are left alone.