Skip to content

Commit 1b7f227

Browse files
committed
fix: finding the correct alias declaration
1 parent b3fcd72 commit 1b7f227

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

lib/refactorex/refactor/alias.ex

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,23 @@ defmodule Refactorex.Refactor.Alias do
7474
defp go_to_declaration(node, used_alias) do
7575
node
7676
|> Z.zip()
77-
|> Z.find(fn
78-
{:alias, _, [_, opts]} ->
79-
Enum.any?(opts, &match?({{_, _, [:as]}, {_, _, [^used_alias]}}, &1))
80-
81-
{:__aliases__, _, aliases} ->
82-
List.last(aliases) == used_alias
83-
84-
_ ->
85-
false
77+
|> Z.traverse_while(nil, fn
78+
%{node: {:alias, _, [_, opts]}} = zipper, nil ->
79+
if Enum.any?(opts, &match?({{_, _, [:as]}, {_, _, [^used_alias]}}, &1)),
80+
do: {:halt, zipper, zipper},
81+
else: {:cont, zipper, nil}
82+
83+
%{node: {:__aliases__, _, aliases}} = zipper, nil ->
84+
if List.last(aliases) == used_alias,
85+
do: {:halt, zipper, zipper},
86+
else: {:cont, zipper, nil}
87+
88+
%{node: {:., _, [_, :{}]}} = zipper, nil ->
89+
{:skip, zipper, nil}
90+
91+
zipper, nil ->
92+
{:cont, zipper, nil}
8693
end)
94+
|> elem(1)
8795
end
8896
end

test/refactor/alias/inline_alias_test.exs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,40 @@ defmodule Refactorex.Refactor.Alias.InlineAliasTest do
187187
)
188188
end
189189

190+
test "inlines nested namespace alias" do
191+
assert_refactored(
192+
InlineAlias,
193+
"""
194+
defmodule Shop do
195+
alias Shop.{
196+
Cart,
197+
Inventory.{Item},
198+
Inventory
199+
}
200+
201+
def restock(item_id, quantity) do
202+
# v
203+
Inventory.update_stock(item_id, quantity)
204+
# ^
205+
end
206+
end
207+
""",
208+
"""
209+
defmodule Shop do
210+
alias Shop.{
211+
Cart,
212+
Inventory.{Item},
213+
Inventory
214+
}
215+
216+
def restock(item_id, quantity) do
217+
Shop.Inventory.update_stock(item_id, quantity)
218+
end
219+
end
220+
"""
221+
)
222+
end
223+
190224
test "ignores alias declaration" do
191225
assert_ignored(
192226
InlineAlias,

0 commit comments

Comments
 (0)