@@ -18,6 +18,7 @@ run(#{tracers := Tracers} = E, ExecutionCallback, AfterExecutionCallback) ->
1818 Res ->
1919 warn_unused_aliases (Pid , LexEnv ),
2020 warn_unused_imports (Pid , LexEnv ),
21+ warn_unused_requires (Pid , LexEnv ),
2122 AfterExecutionCallback (LexEnv ),
2223 Res
2324 after
@@ -33,10 +34,12 @@ run(#{tracers := Tracers} = E, ExecutionCallback, AfterExecutionCallback) ->
3334trace ({alias_expansion , _Meta , Lookup , _Result }, #{lexical_tracker := Pid }) ->
3435 ? tracker :alias_dispatch (Pid , Lookup ),
3536 ok ;
36- trace ({require , Meta , Module , _Opts }, #{lexical_tracker := Pid }) ->
37+ trace ({require , Meta , Module , Opts }, #{lexical_tracker := Pid , module : = CurrentModule }) ->
3738 case lists :keyfind (from_macro , 1 , Meta ) of
3839 {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 ])
4043 end ,
4144 ok ;
4245trace ({struct_expansion , _Meta , Module , _Keys }, #{lexical_tracker := Pid }) ->
@@ -95,6 +98,11 @@ warn_unused_imports(Pid, E) ->
9598 {ModOrMFA , Meta } <- unused_imports_for_module (Module , Imports )],
9699 ok .
97100
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+
98106unused_imports_for_module (Module , Imports ) ->
99107 case Imports of
100108 #{Module := Meta } -> [{Module , Meta }];
@@ -111,4 +119,6 @@ format_error({unused_alias, Module}) ->
111119format_error ({unused_import , {Module , Function , Arity }}) ->
112120 io_lib :format (" unused import ~ts .~ts /~w " , [elixir_aliases :inspect (Module ), Function , Arity ]);
113121format_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