Skip to content

Commit 536dcb3

Browse files
Include column in unused alias and imports warning messages (#12593)
1 parent 5480491 commit 536dcb3

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

lib/elixir/lib/kernel/lexical_tracker.ex

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ defmodule Kernel.LexicalTracker do
3535
end
3636

3737
@doc false
38-
def add_import(pid, module, fas, line, warn) when is_atom(module) do
39-
:gen_server.cast(pid, {:add_import, module, fas, line, warn})
38+
def add_import(pid, module, fas, meta, warn) when is_atom(module) do
39+
:gen_server.cast(pid, {:add_import, module, fas, meta, warn})
4040
end
4141

4242
@doc false
43-
def add_alias(pid, module, line, warn) when is_atom(module) do
44-
:gen_server.cast(pid, {:add_alias, module, line, warn})
43+
def add_alias(pid, module, meta, warn) when is_atom(module) do
44+
:gen_server.cast(pid, {:add_alias, module, meta, warn})
4545
end
4646

4747
@doc false
@@ -209,18 +209,18 @@ defmodule Kernel.LexicalTracker do
209209
{:noreply, put_in(state.exports[module], true)}
210210
end
211211

212-
def handle_cast({:add_import, module, fas, line, warn}, state) do
212+
def handle_cast({:add_import, module, fas, meta, warn}, state) do
213213
if warn do
214-
imports = for module_or_fa <- [module | fas], do: {module_or_fa, line}, into: %{}
214+
imports = for module_or_fa <- [module | fas], do: {module_or_fa, meta}, into: %{}
215215
{:noreply, put_in(state.imports[module], imports)}
216216
else
217217
{:noreply, state}
218218
end
219219
end
220220

221-
def handle_cast({:add_alias, module, line, warn}, state) do
221+
def handle_cast({:add_alias, module, meta, warn}, state) do
222222
if warn do
223-
{:noreply, put_in(state.aliases[module], line)}
223+
{:noreply, put_in(state.aliases[module], meta)}
224224
else
225225
{:noreply, state}
226226
end

lib/elixir/src/elixir_lexical.erl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ trace({import, Meta, Module, Opts}, #{lexical_tracker := Pid}) ->
3838
_ -> []
3939
end,
4040

41-
?tracker:add_import(Pid, Module, Only, ?line(Meta), Imported and should_warn(Meta, Opts)),
41+
?tracker:add_import(Pid, Module, Only, Meta, Imported and should_warn(Meta, Opts)),
4242
ok;
4343
trace({alias, Meta, _Old, New, Opts}, #{lexical_tracker := Pid}) ->
44-
?tracker:add_alias(Pid, New, ?line(Meta), should_warn(Meta, Opts)),
44+
?tracker:add_alias(Pid, New, Meta, should_warn(Meta, Opts)),
4545
ok;
4646
trace({alias_expansion, _Meta, Lookup, _Result}, #{lexical_tracker := Pid}) ->
4747
?tracker:alias_dispatch(Pid, Lookup),
@@ -110,9 +110,9 @@ with_file(File, #{lexical_tracker := Pid} = E, Callback) ->
110110
%% ERROR HANDLING
111111

112112
warn_unused_imports(Pid, E) ->
113-
[elixir_errors:file_warn([{line, Line}], ?key(E, file), ?MODULE, {unused_import, ModOrMFA})
113+
[elixir_errors:file_warn(Meta, ?key(E, file), ?MODULE, {unused_import, ModOrMFA})
114114
|| {Module, Imports} <- ?tracker:collect_unused_imports(Pid),
115-
{ModOrMFA, Line} <- unused_imports_for_module(Module, Imports)],
115+
{ModOrMFA, Meta} <- unused_imports_for_module(Module, Imports)],
116116
ok.
117117

118118
unused_imports_for_module(Module, Imports) ->
@@ -122,8 +122,8 @@ unused_imports_for_module(Module, Imports) ->
122122
end.
123123

124124
warn_unused_aliases(Pid, E) ->
125-
[elixir_errors:file_warn([{line, Line}], ?key(E, file), ?MODULE, {unused_alias, Module})
126-
|| {Module, Line} <- ?tracker:collect_unused_aliases(Pid)],
125+
[elixir_errors:file_warn(Meta, ?key(E, file), ?MODULE, {unused_alias, Module})
126+
|| {Module, Meta} <- ?tracker:collect_unused_aliases(Pid)],
127127
ok.
128128

129129
format_error({unused_alias, Module}) ->

lib/elixir/test/elixir/code_test.exs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,41 @@ defmodule CodeTest do
5555
end)
5656
end
5757

58-
test "includes column information when possible" do
58+
test "includes column information on unused variables" do
5959
assert {_, [%{position: {1, 12}}]} =
6060
Code.with_diagnostics(fn ->
6161
quoted = Code.string_to_quoted!("if true do var = :foo end", columns: true)
6262
Code.eval_quoted(quoted, [])
6363
end)
6464
end
65+
66+
test "includes column information on unused aliases" do
67+
sample = """
68+
defmodule CodeTest.UnusedAlias do
69+
alias String.Chars
70+
end
71+
"""
72+
73+
assert {_, [%{position: {2, 3}}]} =
74+
Code.with_diagnostics(fn ->
75+
quoted = Code.string_to_quoted!(sample, columns: true)
76+
Code.eval_quoted(quoted, [])
77+
end)
78+
end
79+
80+
test "includes column information on unused imports" do
81+
sample = """
82+
defmodule CodeTest.UnusedImport do
83+
import URI
84+
end
85+
"""
86+
87+
assert {_, [%{position: {2, 3}}]} =
88+
Code.with_diagnostics(fn ->
89+
quoted = Code.string_to_quoted!(sample, columns: true)
90+
Code.eval_quoted(quoted, [])
91+
end)
92+
end
6593
end
6694

6795
describe "eval_string/1,2,3" do

0 commit comments

Comments
 (0)