Skip to content

Commit 5480491

Browse files
committed
Include column information in unused variable warning, closes #12591
1 parent bc9c1d2 commit 5480491

File tree

4 files changed

+21
-10
lines changed

4 files changed

+21
-10
lines changed

lib/elixir/src/elixir_env.erl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ reset_unused_vars(#elixir_ex{unused={_Unused, Version}} = S) ->
8585
S#elixir_ex{unused={#{}, Version}}.
8686

8787
check_unused_vars(#elixir_ex{unused={Unused, _Version}}, E) ->
88-
[elixir_errors:file_warn([{line, Line}], E, ?MODULE, {unused_var, Name, Overridden}) ||
89-
{{{Name, nil}, _}, {Line, Overridden}} <- maps:to_list(Unused), is_unused_var(Name)],
88+
[elixir_errors:file_warn(Meta, E, ?MODULE, {unused_var, Name, Overridden}) ||
89+
{{{Name, nil}, _}, {Meta, Overridden}} <- maps:to_list(Unused), is_unused_var(Name)],
9090
E.
9191

9292
merge_and_check_unused_vars(S, #elixir_ex{vars={Read, Write}, unused={Unused, _Version}}, E) ->
@@ -106,11 +106,11 @@ merge_and_check_unused_vars(Current, Unused, ClauseUnused, E) ->
106106
Acc
107107
end;
108108

109-
({{Name, Kind}, _Count}, {Line, Overridden}, Acc) ->
109+
({{Name, Kind}, _Count}, {Meta, Overridden}, Acc) ->
110110
case (Kind == nil) andalso is_unused_var(Name) of
111111
true ->
112112
Warn = {unused_var, Name, Overridden},
113-
elixir_errors:file_warn([{line, Line}], E, ?MODULE, Warn);
113+
elixir_errors:file_warn(Meta, E, ?MODULE, Warn);
114114

115115
false ->
116116
ok

lib/elixir/src/elixir_errors.erl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ file_warn(Meta, E, Module, Desc) when is_list(Meta) ->
7474
case elixir_config:is_bootstrap() of
7575
true -> ok;
7676
false ->
77-
{EnvLine, EnvFile, EnvStacktrace} = env_format(Meta, E),
77+
{EnvPosition, EnvFile, EnvStacktrace} = env_format(Meta, E),
7878
Message = Module:format_error(Desc),
79-
emit_diagnostic(warning, EnvLine, EnvFile, Message, EnvStacktrace)
79+
emit_diagnostic(warning, EnvPosition, EnvFile, Message, EnvStacktrace)
8080
end.
8181

8282
-spec file_error(list(), binary() | #{file := binary(), _ => _}, module(), any()) -> no_return().
@@ -107,9 +107,9 @@ function_error(Meta, Env, Module, Desc) ->
107107
file_error(Meta, Env, Module, Desc).
108108

109109
print_error(Meta, Env, Module, Desc) ->
110-
{EnvLine, EnvFile, EnvStacktrace} = env_format(Meta, Env),
110+
{EnvPosition, EnvFile, EnvStacktrace} = env_format(Meta, Env),
111111
Message = Module:format_error(Desc),
112-
emit_diagnostic(error, EnvLine, EnvFile, Message, EnvStacktrace),
112+
emit_diagnostic(error, EnvPosition, EnvFile, Message, EnvStacktrace),
113113
ok.
114114

115115
%% Compilation error.
@@ -264,7 +264,10 @@ env_format(Meta, #{file := EnvFile} = E) ->
264264
[]
265265
end,
266266

267-
{Line, File, Stacktrace}.
267+
case lists:keyfind(column, 1, Meta) of
268+
{column, Column} -> {{Line, Column}, File, Stacktrace};
269+
_ -> {Line, File, Stacktrace}
270+
end.
268271

269272
file_format(_, nil) ->
270273
"";

lib/elixir/src/elixir_expand.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ mapfold(_Fun, S, E, [], Acc) ->
611611

612612
var_unused({_, Kind} = Pair, Meta, Version, Unused, Override) ->
613613
case (Kind == nil) andalso should_warn(Meta) of
614-
true -> Unused#{{Pair, Version} => {?line(Meta), Override}};
614+
true -> Unused#{{Pair, Version} => {Meta, Override}};
615615
false -> Unused
616616
end.
617617

lib/elixir/test/elixir/code_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ defmodule CodeTest do
5454
:warn
5555
end)
5656
end
57+
58+
test "includes column information when possible" do
59+
assert {_, [%{position: {1, 12}}]} =
60+
Code.with_diagnostics(fn ->
61+
quoted = Code.string_to_quoted!("if true do var = :foo end", columns: true)
62+
Code.eval_quoted(quoted, [])
63+
end)
64+
end
5765
end
5866

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

0 commit comments

Comments
 (0)