Skip to content

Commit d13f415

Browse files
committed
Do not warn unused imports twice, closes #13178
1 parent d23e42e commit d13f415

File tree

1 file changed

+12
-24
lines changed

1 file changed

+12
-24
lines changed

lib/elixir/src/elixir_import.erl

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,26 @@ import(Meta, Ref, Opts, E) ->
99
{Functions, Macros, Added} =
1010
case keyfind(only, Opts) of
1111
{only, functions} ->
12-
{Added1, Funs} = import_functions(Meta, Ref, Opts, E),
12+
{Added1, _Used1, Funs} = import_functions(Meta, Ref, Opts, E),
1313
{Funs, keydelete(Ref, ?key(E, macros)), Added1};
1414
{only, macros} ->
15-
{Added2, Macs} = import_macros(true, Meta, Ref, Opts, E),
15+
{Added2, _Used2, Macs} = import_macros(true, Meta, Ref, Opts, E),
1616
{keydelete(Ref, ?key(E, functions)), Macs, Added2};
1717
{only, sigils} ->
18-
{Added1, Funs} = import_sigil_functions(Meta, Ref, Opts, E),
19-
{Added2, Macs} = import_sigil_macros(Meta, Ref, Opts, E),
18+
{Added1, _Used1, Funs} = import_sigil_functions(Meta, Ref, Opts, E),
19+
{Added2, _Used2, Macs} = import_sigil_macros(Meta, Ref, Opts, E),
2020
{Funs, Macs, Added1 or Added2};
2121
{only, List} when is_list(List) ->
22-
{Added1, Funs} = import_functions(Meta, Ref, Opts, E),
23-
{Added2, Macs} = import_macros(false, Meta, Ref, Opts, E),
22+
{Added1, Used1, Funs} = import_functions(Meta, Ref, Opts, E),
23+
{Added2, Used2, Macs} = import_macros(false, Meta, Ref, Opts, E),
24+
[elixir_errors:file_warn(Meta, ?key(E, file), ?MODULE, {invalid_import, {Ref, Name, Arity}}) ||
25+
{Name, Arity} <- (List -- Used1) -- Used2],
2426
{Funs, Macs, Added1 or Added2};
2527
{only, Other} ->
2628
elixir_errors:file_error(Meta, E, ?MODULE, {invalid_option, only, Other});
2729
false ->
28-
{Added1, Funs} = import_functions(Meta, Ref, Opts, E),
29-
{Added2, Macs} = import_macros(false, Meta, Ref, Opts, E),
30+
{Added1, _Used1, Funs} = import_functions(Meta, Ref, Opts, E),
31+
{Added2, _Used2, Macs} = import_macros(false, Meta, Ref, Opts, E),
3032
{Funs, Macs, Added1 or Added2}
3133
end,
3234

@@ -95,9 +97,6 @@ calculate(Meta, Key, Opts, Old, File, Existing) ->
9597
_ -> elixir_errors:file_error(Meta, File, ?MODULE, only_and_except_given)
9698
end,
9799

98-
[elixir_errors:file_warn(Meta, File, ?MODULE, {invalid_import, {Key, Name, Arity}}) ||
99-
{Name, Arity} <- Only -- get_exports(Key)],
100-
101100
intersection(Only, Existing());
102101

103102
_ ->
@@ -125,32 +124,21 @@ calculate(Meta, Key, Opts, Old, File, Existing) ->
125124
%% Normalize the data before storing it
126125
case ordsets:from_list(New) of
127126
[] ->
128-
{false, keydelete(Key, Old)};
127+
{false, [], keydelete(Key, Old)};
129128
Set ->
130129
ensure_no_special_form_conflict(Meta, File, Key, Set),
131-
{true, [{Key, Set} | keydelete(Key, Old)]}
130+
{true, Set, [{Key, Set} | keydelete(Key, Old)]}
132131
end.
133132

134133
%% Retrieve functions and macros from modules
135134

136-
get_exports(Module) ->
137-
get_functions(Module) ++ get_macros(Module).
138-
139135
get_functions(Module) ->
140136
try
141137
Module:'__info__'(functions)
142138
catch
143139
error:undef -> remove_internals(Module:module_info(exports))
144140
end.
145141

146-
get_macros(Module) ->
147-
case fetch_macros(Module) of
148-
{ok, Macros} ->
149-
Macros;
150-
error ->
151-
[]
152-
end.
153-
154142
fetch_macros(Module) ->
155143
try
156144
{ok, Module:'__info__'(macros)}

0 commit comments

Comments
 (0)