diff --git a/CHANGELOG.md b/CHANGELOG.md index fbb9b74b..8f9e9139 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,8 +53,9 @@ See the moduledoc for `Styler.Style.Configs` for more. * `@derive`: move `@derive` before `defstruct|schema|embedded_schema` declarations (fixes compiler warning!) #134 * strings: rewrite double-quoted strings to use `~s` when there's 4+ escaped double-quotes (`"\"\"\"\""` -> `~s("""")`) (`Credo.Check.Readability.StringSigils`) #146 -* `Map.drop(foo, [single_key])` => `Map.delete(foo, single_key)` #161 -* `Keyword.drop(foo, [single_key])` => `Keyword.delete(foo, single_key)` #161 +* `Map.drop(foo, [single_key])` => `Map.delete(foo, single_key)` #161 (also in pipes) +* `Keyword.drop(foo, [single_key])` => `Keyword.delete(foo, single_key)` #161 (also in pipes) +* `lhs |> Enum.reverse() |> Kernel.++(enum)` => `lhs |> Enum.reverse(enum)` ### Fixes diff --git a/lib/style/pipes.ex b/lib/style/pipes.ex index e836a2d8..9bc0b544 100644 --- a/lib/style/pipes.ex +++ b/lib/style/pipes.ex @@ -209,6 +209,17 @@ defmodule Styler.Style.Pipes do {:|>, [line: meta[:line]], [lhs, {reverse, [line: meta[:line]], [enum]}]} end + # `lhs |> Enum.reverse() |> Enum.concat(enum)` => `lhs |> Enum.reverse(enum)` + defp fix_pipe( + pipe_chain( + lhs, + {{:., _, [{_, _, [:Enum]}, :reverse]} = reverse, meta, []}, + {{:., _, [{_, _, [:Kernel]}, :++]}, _, [enum]} + ) + ) do + {:|>, [line: meta[:line]], [lhs, {reverse, [line: meta[:line]], [enum]}]} + end + # `lhs |> Enum.filter(filterer) |> Enum.count()` => `lhs |> Enum.count(count)` defp fix_pipe( pipe_chain( diff --git a/test/style/pipes_test.exs b/test/style/pipes_test.exs index 8fbc952a..49cfe253 100644 --- a/test/style/pipes_test.exs +++ b/test/style/pipes_test.exs @@ -541,6 +541,25 @@ defmodule Styler.Style.PipesTest do ) end + test "reverse/Kernel.++" do + assert_style("a |> Enum.reverse(bar) |> Kernel.++(foo)") + assert_style("a |> Enum.reverse() |> Kernel.++(foo)", "Enum.reverse(a, foo)") + + assert_style( + """ + a + |> Enum.reverse() + |> Kernel.++([bar, baz]) + |> Enum.sum() + """, + """ + a + |> Enum.reverse([bar, baz]) + |> Enum.sum() + """ + ) + end + test "filter/count" do for enum <- ~w(Enum Stream) do assert_style(