Skip to content

Commit

Permalink
alias: fix single-module alias deletion newlines bug
Browse files Browse the repository at this point in the history
  • Loading branch information
novaugust committed Dec 6, 2023
1 parent 09fa479 commit 2ef4c30
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 28 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## main

## v0.10.5

### Fixes

* alias: fix single-module alias deletion newlines bug

## v0.10.4

### Improvements
Expand Down
16 changes: 10 additions & 6 deletions lib/style/module_directives.ex
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,10 @@ defmodule Styler.Style.ModuleDirectives do
behaviours = expand_and_sort(directives[:"@behaviour"] || [])

uses = (directives[:use] || []) |> Enum.flat_map(&expand_directive/1) |> reset_newlines()

imports = expand_and_sort(directives[:import] || [])
aliases = expand_and_sort(directives[:alias] || [])
requires = expand_and_sort(directives[:require] || [])
original_aliases = directives[:alias] || []
aliases = expand_and_sort(directives[:alias] || [])

directives =
[
Expand All @@ -170,7 +170,8 @@ defmodule Styler.Style.ModuleDirectives do
|> fix_line_numbers(List.first(nondirectives))

cond do
Enum.empty?(directives) ->
# the # of aliases can be decreased during sorting - if there were any, we need to be sure to write the deletion
Enum.empty?(directives) and Enum.empty?(original_aliases) ->
parent

Enum.empty?(nondirectives) ->
Expand Down Expand Up @@ -253,10 +254,13 @@ defmodule Styler.Style.ModuleDirectives do
|> reset_newlines()
end

# alias Foo.{Bar, Baz}
# Deletes root level aliases ala (`alias Foo` -> ``)
defp expand_directive({:alias, _, [{:__aliases__, _, [_]}]}), do: []

# import Foo.{Bar, Baz}
# =>
# alias Foo.Bar
# alias Foo.Baz
# import Foo.Bar
# import Foo.Baz
defp expand_directive({directive, _, [{{:., _, [{:__aliases__, _, module}, :{}]}, _, right}]}),
do: Enum.map(right, fn {_, meta, segments} -> {directive, meta, [{:__aliases__, [], module ++ segments}]} end)

Expand Down
4 changes: 0 additions & 4 deletions lib/style/single_node.ex
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@ defmodule Styler.Style.SingleNode do
alias Styler.Style
alias Styler.Zipper

# Delete root level alias
# `alias Foo` -> ``
def run({{:alias, _, [{:__aliases__, _, [_]}]}, _} = zipper, ctx), do: {:cont, Zipper.remove(zipper), ctx}

def run({node, meta}, ctx), do: {:cont, {style(node), meta}, ctx}

# as of 1.15, elixir's formatter takes care of this for us.
Expand Down
34 changes: 34 additions & 0 deletions test/style/module_directives_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -415,4 +415,38 @@ defmodule Styler.Style.ModuleDirectivesTest do
)
end
end

test "Deletes root level alias" do
assert_style("alias Foo", "")

assert_style(
"""
alias unquote(Foo)
alias Foo
alias Bar, as: Bop
alias __MODULE__
""",
"""
alias __MODULE__
alias Bar, as: Bop
alias unquote(Foo)
"""
)

assert_style(
"""
alias A.A
alias B.B
alias C
require D
""",
"""
alias A.A
alias B.B
require D
"""
)
end
end
18 changes: 0 additions & 18 deletions test/style/single_node_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -293,22 +293,4 @@ defmodule Styler.Style.SingleNodeTest do
assert_style("Enum.reverse(foo, bar) ++ bar")
end
end

test "Delete root level alias" do
assert_style("alias Foo", "")

assert_style(
"""
alias unquote(Foo)
alias Foo
alias Bar, as: Bop
alias __MODULE__
""",
"""
alias __MODULE__
alias Bar, as: Bop
alias unquote(Foo)
"""
)
end
end

0 comments on commit 2ef4c30

Please sign in to comment.