diff --git a/CHANGELOG.md b/CHANGELOG.md index 26c7283f..963c2015 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## main +### Improvements + +* deprecations: `~R` -> `~r`, `Date.range/2` -> `Date.range/3` with decreasing dates (h/t @milmazz) +* pipes: `|> Enum.map(foo) |> Map.new()` => `|> Map.new(foo)` + ## v0.11.6 ### Fixes diff --git a/lib/style/pipes.ex b/lib/style/pipes.ex index 8fd740bb..87800e24 100644 --- a/lib/style/pipes.ex +++ b/lib/style/pipes.ex @@ -210,6 +210,13 @@ defmodule Styler.Style.Pipes do else: node end + # `lhs |> Enum.map(mapper) |> Map.new()` => `lhs |> Map.new(mapper) + defp fix_pipe( + pipe_chain(lhs, {{:., _, [{_, _, [:Enum]}, :map]}, _, [mapper]}, {{:., _, [{_, _, [:Map]}, :new]} = new, nm, []}) + ) do + Style.set_line({:|>, [], [lhs, {new, nm, [mapper]}]}, nm[:line]) + end + for mod <- [:Map, :Keyword] do # lhs |> Map.merge(%{key: value}) => lhs |> Map.put(key, value) defp fix_pipe({:|>, pm, [lhs, {{:., dm, [{_, _, [unquote(mod)]} = mod, :merge]}, m, [{:%{}, _, [{key, value}]}]}]}), diff --git a/test/style/pipes_test.exs b/test/style/pipes_test.exs index e0f75370..5eee8ea0 100644 --- a/test/style/pipes_test.exs +++ b/test/style/pipes_test.exs @@ -654,6 +654,10 @@ defmodule Styler.Style.PipesTest do ) end + test "Enum.map(x) |> Map.new()" do + assert_style("a |> Enum.map(b) |> Map.new()", "Map.new(a, b)") + end + test "into a new map" do assert_style("a |> Enum.into(foo) |> b()") assert_style("a |> Enum.into(%{}) |> b()", "a |> Map.new() |> b()")