From 83103ec3059b9397bdc5005573dcfdd30d0ca7b6 Mon Sep 17 00:00:00 2001 From: Matt Enlow Date: Wed, 22 May 2024 09:39:32 -0700 Subject: [PATCH] a |> map(m) |> join() -> map_join(a, m) --- CHANGELOG.md | 1 + lib/style/pipes.ex | 6 +++--- test/style/pipes_test.exs | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cb3591e..ee1385b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,6 +103,7 @@ See the moduledoc for `Styler.Style.Configs` for more. * `Timex.now/1` will no longer be rewritten to `DateTime.now!/1` due to Timex accepting a wider domain of "timezones" than the stdlib (#145, h/t @ivymarkwell) * `with`: skip nodes which (unexpectedly) do not contain a `do` body (#158, h/t @DavidB59) * `then(&fun/1)`: fix false positives on arithmetic `&1 + x / 1` (#164, h/t @aenglisc) +* rewrite `a |> Enum.map(m) |> Enum.join()` to `map_join(a, m)`. we already did this for `join/2`, but missed the case for `join/1` ### Breaking Changes diff --git a/lib/style/pipes.ex b/lib/style/pipes.ex index 9bc0b544..003e341c 100644 --- a/lib/style/pipes.ex +++ b/lib/style/pipes.ex @@ -236,12 +236,12 @@ defmodule Styler.Style.Pipes do defp fix_pipe( pipe_chain( lhs, - {{:., dm, [{_, _, [mod]}, :map]}, em, [mapper]}, - {{:., _, [{_, _, [:Enum]} = enum, :join]}, _, [joiner]} + {{:., dm, [{_, _, [mod]}, :map]}, em, map_args}, + {{:., _, [{_, _, [:Enum]} = enum, :join]}, _, join_args} ) ) when mod in @enum do - rhs = Style.set_line({{:., dm, [enum, :map_join]}, em, [joiner, mapper]}, dm[:line]) + rhs = Style.set_line({{:., dm, [enum, :map_join]}, em, join_args ++ map_args}, dm[:line]) {:|>, [line: dm[:line]], [lhs, rhs]} end diff --git a/test/style/pipes_test.exs b/test/style/pipes_test.exs index bd6a83c1..10170a2c 100644 --- a/test/style/pipes_test.exs +++ b/test/style/pipes_test.exs @@ -613,7 +613,8 @@ defmodule Styler.Style.PipesTest do test "map/join" do for enum <- ~w(Enum Stream) do - assert_style("a|> #{enum}.map(b) |> Enum.join(x)", "Enum.map_join(a, x, b)") + assert_style("a |> #{enum}.map(mapper) |> Enum.join()", "Enum.map_join(a, mapper)") + assert_style("a |> #{enum}.map(mapper) |> Enum.join(joiner)", "Enum.map_join(a, joiner, mapper)") end end