Skip to content

Commit a490ad6

Browse files
committed
sort |> reverse => sort(:desc)
1 parent 78ced6b commit a490ad6

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ they can and will change without that change being reflected in Styler's semanti
77

88
### Improvements
99

10+
- `enum |> Enum.sort() |> Enum.reverse()` => `Enum.sort(enum, :desc)`
11+
- Req pipe optimizations (see below!)
12+
1013
#### Req pipe optimizations
1114

1215
[Req](https://github.com/wojtekmach/req) is a popular HTTP Client. If you aren't using it, you can just ignore this whole section!

docs/pipes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ a |> Enum.filter(fun) |> List.first(default) |> ...
110110
# Styled:
111111
a |> Enum.find(fun) |> ...
112112
a |> Enum.find(default, fun) |> ...
113+
114+
# Given:
115+
a |> Enum.sort() |> Enum.reverse() |> ...
116+
a |> Enum.sort(:desc) |> ...
113117
```
114118

115119
## Unpiping Single Pipes

lib/style/pipes.ex

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,23 @@ defmodule Styler.Style.Pipes do
294294
defp fix_pipe({:|>, m, [lhs, {{:., m2, [{anon_fun, _, _}] = fun}, _, []}]}) when anon_fun in [:&, :fn],
295295
do: {:|>, m, [lhs, {:then, m2, fun}]}
296296

297+
# `lhs |> Enum.sort([:asc, :desc]) |> Enum.reverse()` => `lhs |> Enum.sort(:desc | :asc)`
298+
defp fix_pipe(
299+
pipe_chain(
300+
pm,
301+
lhs,
302+
{{:., _, [{_, _, [:Enum]}, :sort]} = sort, meta, sort_args},
303+
{{:., _, [{_, _, [:Enum]}, :reverse]}, _, []}
304+
) = node
305+
) do
306+
case sort_args do
307+
[] -> {:|>, pm, [lhs, {sort, meta, [{:__block__, [line: meta[:line]], [:desc]}]}]}
308+
[{_, m, [:desc]}] -> {:|>, pm, [lhs, {sort, meta, [{:__block__, m, [:asc]}]}]}
309+
[{_, m, [:asc]}] -> {:|>, pm, [lhs, {sort, meta, [{:__block__, m, [:desc]}]}]}
310+
_ -> node
311+
end
312+
end
313+
297314
# `lhs |> Enum.reverse() |> Enum.concat(enum)` => `lhs |> Enum.reverse(enum)`
298315
defp fix_pipe(
299316
pipe_chain(

test/style/pipes_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,13 @@ defmodule Styler.Style.PipesTest do
576576
)
577577
end
578578

579+
test "Enum.sort/Enum.reverse" do
580+
assert_style("a |> Enum.sort(direction) |> Enum.reverse()")
581+
assert_style("a |> Enum.sort(:asc) |> Enum.reverse()", "Enum.sort(a, :desc)")
582+
assert_style("a |> Enum.sort(:desc) |> Enum.reverse()", "Enum.sort(a, :asc)")
583+
assert_style("a |> Enum.sort() |> Enum.reverse()", "Enum.sort(a, :desc)")
584+
end
585+
579586
test "reverse/concat" do
580587
assert_style("a |> Enum.reverse() |> Enum.concat()")
581588
assert_style("a |> Enum.reverse(bar) |> Enum.concat()")

0 commit comments

Comments
 (0)