@@ -18,6 +18,7 @@ run(#{tracers := Tracers} = E, ExecutionCallback, AfterExecutionCallback) ->
18
18
Res ->
19
19
warn_unused_aliases (Pid , LexEnv ),
20
20
warn_unused_imports (Pid , LexEnv ),
21
+ warn_unused_requires (Pid , LexEnv ),
21
22
AfterExecutionCallback (LexEnv ),
22
23
Res
23
24
after
@@ -33,10 +34,12 @@ run(#{tracers := Tracers} = E, ExecutionCallback, AfterExecutionCallback) ->
33
34
trace ({alias_expansion , _Meta , Lookup , _Result }, #{lexical_tracker := Pid }) ->
34
35
? tracker :alias_dispatch (Pid , Lookup ),
35
36
ok ;
36
- trace ({require , Meta , Module , _Opts }, #{lexical_tracker := Pid }) ->
37
+ trace ({require , Meta , Module , Opts }, #{lexical_tracker := Pid , module : = CurrentModule }) ->
37
38
case lists :keyfind (from_macro , 1 , Meta ) of
38
39
{from_macro , true } -> ? tracker :remote_dispatch (Pid , Module , compile );
39
- _ -> ? tracker :add_export (Pid , Module )
40
+ _ ->
41
+ ? tracker :add_export (Pid , Module ),
42
+ ? tracker :add_require (Pid , Module , [{module , CurrentModule }, {opts , Opts } | Meta ])
40
43
end ,
41
44
ok ;
42
45
trace ({struct_expansion , _Meta , Module , _Keys }, #{lexical_tracker := Pid }) ->
@@ -95,6 +98,11 @@ warn_unused_imports(Pid, E) ->
95
98
{ModOrMFA , Meta } <- unused_imports_for_module (Module , Imports )],
96
99
ok .
97
100
101
+ warn_unused_requires (Pid , E ) ->
102
+ [elixir_errors :file_warn (Meta , ? key (E , file ), ? MODULE , {unused_require , Module })
103
+ || {Module , Meta } <- ? tracker :collect_unused_requires (Pid )],
104
+ ok .
105
+
98
106
unused_imports_for_module (Module , Imports ) ->
99
107
case Imports of
100
108
#{Module := Meta } -> [{Module , Meta }];
@@ -111,4 +119,6 @@ format_error({unused_alias, Module}) ->
111
119
format_error ({unused_import , {Module , Function , Arity }}) ->
112
120
io_lib :format (" unused import ~ts .~ts /~w " , [elixir_aliases :inspect (Module ), Function , Arity ]);
113
121
format_error ({unused_import , Module }) ->
114
- io_lib :format (" unused import ~ts " , [elixir_aliases :inspect (Module )]).
122
+ io_lib :format (" unused import ~ts " , [elixir_aliases :inspect (Module )]);
123
+ format_error ({unused_require , Module }) ->
124
+ io_lib :format (" unused require ~ts " , [elixir_aliases :inspect (Module )]).
0 commit comments