Skip to content

Commit 6dacf53

Browse files
lexmagJosé Valim
authored andcommitted
Fix Kernel.LexicalTracker not to discard alias directives on import
Closes #4871. Signed-off-by: José Valim <jose.valim@plataformatec.com.br>
1 parent 5e22b12 commit 6dacf53

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

lib/elixir/lib/kernel/lexical_tracker.ex

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,15 @@ defmodule Kernel.LexicalTracker do
148148

149149
def handle_cast({:add_import, module, fas, line, warn}, state) when is_atom(module) do
150150
directives =
151-
for {{:import, {import_module, _, _}}, _} = directive <- state.directives,
152-
module != import_module,
153-
do: directive,
154-
into: %{}
155-
156-
directives = add_directive(directives, module, line, warn, :import)
151+
state.directives
152+
|> Enum.reject(&match?({{:import, {^module, _, _}}, _}, &1))
153+
|> :maps.from_list
154+
|> add_directive(module, line, warn, :import)
157155

158156
directives =
159-
Enum.reduce fas, directives, fn {function, arity}, directives ->
157+
Enum.reduce(fas, directives, fn {function, arity}, directives ->
160158
add_directive(directives, {module, function, arity}, line, warn, :import)
161-
end
159+
end)
162160

163161
{:noreply, %{state | directives: directives}}
164162
end

lib/elixir/test/elixir/kernel/warning_test.exs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,20 @@ defmodule Kernel.WarningTest do
310310
purge Sample
311311
end
312312

313+
test "unused alias when also import" do
314+
assert capture_err(fn ->
315+
Code.compile_string """
316+
defmodule Sample do
317+
alias :lists, as: List
318+
import MapSet
319+
new()
320+
end
321+
"""
322+
end) =~ "unused alias List"
323+
after
324+
purge Sample
325+
end
326+
313327
test "unused inside dynamic module" do
314328
import List, only: [flatten: 1], warn: false
315329

0 commit comments

Comments
 (0)