@@ -40,17 +40,42 @@ defmodule Credo.Check.Warning.ForbiddenModule do
4040 defp traverse ( ast = { :__aliases__ , meta , modules } , issues , forbidden_modules , issue_meta ) do
4141 module = Name . full ( modules )
4242
43+ issues = put_issue_if_forbidden ( issues , issue_meta , meta [ :line ] , module , forbidden_modules )
44+
45+ { ast , issues }
46+ end
47+
48+ defp traverse (
49+ ast = { :alias , _meta , [ { { _ , _ , [ { :__aliases__ , _opts , base_alias } , :{} ] } , _ , aliases } ] } ,
50+ issues ,
51+ forbidden_modules ,
52+ issue_meta
53+ ) do
54+ modules =
55+ Enum . map ( aliases , fn { :__aliases__ , meta , module } ->
56+ { Name . full ( [ base_alias , module ] ) , meta [ :line ] }
57+ end )
58+
59+ issues =
60+ Enum . reduce ( modules , issues , fn { module , line } , issues ->
61+ put_issue_if_forbidden ( issues , issue_meta , line , module , forbidden_modules )
62+ end )
63+
64+ { ast , issues }
65+ end
66+
67+ defp traverse ( ast , issues , _ , _ ) , do: { ast , issues }
68+
69+ defp put_issue_if_forbidden ( issues , issue_meta , line_no , module , forbidden_modules ) do
4370 forbidden_module_names = Enum . map ( forbidden_modules , & elem ( & 1 , 0 ) )
4471
4572 if found_module? ( forbidden_module_names , module ) do
46- { ast , [ issue_for ( issue_meta , meta [ :line ] , module , forbidden_modules ) | issues ] }
73+ [ issue_for ( issue_meta , line_no , module , forbidden_modules ) | issues ]
4774 else
48- { ast , issues }
75+ issues
4976 end
5077 end
5178
52- defp traverse ( ast , issues , _ , _ ) , do: { ast , issues }
53-
5479 defp found_module? ( forbidden_module_names , module ) do
5580 Enum . member? ( forbidden_module_names , module )
5681 end
@@ -68,6 +93,9 @@ defmodule Credo.Check.Warning.ForbiddenModule do
6893 end
6994
7095 defp message ( forbidden_modules , module ) do
71- Enum . find_value ( forbidden_modules , fn { ^ module , message } -> message end )
96+ Enum . find_value ( forbidden_modules , fn
97+ { ^ module , message } -> message
98+ _ -> nil
99+ end )
72100 end
73101end
0 commit comments