Skip to content

Commit 7a6cf4e

Browse files
authored
Merge pull request #275 from onelesd/credo-warning-fixes
fix compiler & credo warnings: lib/elixir_script/passes/find_modules.ex
2 parents f89a49e + 7704f48 commit 7a6cf4e

1 file changed

Lines changed: 53 additions & 49 deletions

File tree

lib/elixir_script/passes/find_modules.ex

Lines changed: 53 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule ElixirScript.Passes.FindModules do
33
alias ElixirScript.Translator.Utils
44
alias ElixirScript.Translator.State
55

6+
@spec execute(map, map) :: map
67
def execute(compiler_data, opts) do
78
data = Enum.reduce(compiler_data.data, [], fn(data, list) ->
89
quoted = update_quoted(data.ast)
@@ -53,15 +54,22 @@ defmodule ElixirScript.Passes.FindModules do
5354
{ ast, state }
5455
end
5556

56-
defp do_module_processing({:defmodule, context1, [{:__aliases__, _, name} = the_alias, [do: body]]}, state, opts) do
57-
{ body, inner_modules } = make_inner_module_aliases(name, body)
57+
58+
defp do_module_processing({:defmodule, _context1, [{:__aliases__, _, name} = the_alias, [do: body]]}, state, opts) do
59+
{ body, inner_modules } = make_inner_module_aliases(body)
5860

5961
aliases = Enum.map(inner_modules, fn
60-
({:defmodule, _, [{:__aliases__, _, inner_module_name}, [do: inner_module_body]]}) ->
62+
({:defmodule, _, [{:__aliases__, _, inner_module_name}, [do: _inner_module_body]]}) ->
6163
{ :alias, [], [{:__aliases__, [alias: false], name ++ inner_module_name}, [as: {:__aliases__, [alias: false], inner_module_name }] ] }
6264
end)
6365

64-
state = Enum.reduce(inner_modules, state, fn
66+
state = do_module_processing_state(inner_modules, state, name, aliases, opts)
67+
68+
[%{name: Utils.quoted_to_name(the_alias), type: :module, ast: do_module_processing_body(body, aliases, opts) }] ++ state
69+
end
70+
71+
defp do_module_processing_state(inner_modules, state, name, aliases, opts) do
72+
Enum.reduce(inner_modules, state, fn
6573
({:defmodule, context1, [{:__aliases__, context2, inner_module_name}, [do: inner_module_body]]}, state) ->
6674

6775
module_name = Utils.quoted_to_name({:__aliases__, [], tl(name) ++ inner_module_name})
@@ -73,39 +81,36 @@ defmodule ElixirScript.Passes.FindModules do
7381
{:defmodule, context1, [{:__aliases__, context2, name ++ inner_module_name}, [do: add_aliases_to_body(inner_module_body, this_module_aliases)]]},
7482
state, opts)
7583
end)
84+
end
7685

77-
body = case body do
78-
{:__block__, context, list } ->
79-
list = Enum.map(list, fn
80-
{:use, _, [module, _] } = using ->
81-
{:use, handle_use_expression(using, module, opts) }
82-
{:use, _, [module] } = using ->
83-
{:use, handle_use_expression(using, module, opts) }
84-
ast ->
85-
{:expanded, ast}
86-
end)
87-
|> Enum.reduce([], fn
88-
{:use, ast}, state ->
89-
case ast do
90-
{:__block__, _, list} ->
91-
state ++ list
92-
_ ->
93-
state ++ [ast]
94-
end
95-
96-
{:expanded, ast}, state ->
97-
state ++ [ast]
98-
end)
99-
100-
{:__block__, context, list}
101-
102-
_ ->
103-
body
104-
end
105-
106-
body = add_aliases_to_body(body, aliases)
107-
108-
[%{name: Utils.quoted_to_name(the_alias), type: :module, ast: body }] ++ state
86+
defp do_module_processing_body(body, aliases, opts) do
87+
body
88+
|> case do
89+
{:__block__, context, list } ->
90+
list =
91+
list
92+
|> Enum.map(fn
93+
{:use, _, [module, _] } = using ->
94+
{:use, handle_use_expression(using, module, opts) }
95+
{:use, _, [module] } = using ->
96+
{:use, handle_use_expression(using, module, opts) }
97+
ast ->
98+
{:expanded, ast}
99+
end)
100+
|> Enum.reduce([], fn
101+
{:use, {:__block__, _, list}}, state ->
102+
state ++ list
103+
{:use, ast}, state ->
104+
state ++ [ast]
105+
{:expanded, ast}, state ->
106+
state ++ [ast]
107+
end)
108+
109+
{:__block__, context, list}
110+
_ ->
111+
body
112+
end
113+
|> add_aliases_to_body(aliases)
109114
end
110115

111116
defp add_aliases_to_body(body, aliases) do
@@ -117,23 +122,21 @@ defmodule ElixirScript.Passes.FindModules do
117122
end
118123
end
119124

120-
defp make_inner_module_aliases(name, body) do
125+
defp make_inner_module_aliases(body) do
121126
case body do
122127
nil ->
123128
{ { :__block__, [], [] }, [] }
124129

125130
{:__block__, context, list2 } ->
126-
{ list2, inner_modules } = Enum.partition(list2, fn(x) ->
127-
case x do
128-
{:defmodule, _, [{:__aliases__, _, inner_module_name}, [do: inner_module_body]]} ->
131+
{ list2, inner_modules } = Enum.partition(list2, fn
132+
{:defmodule, _, [{:__aliases__, _, _inner_module_name}, [do: _inner_module_body]]} ->
129133
false
130134
_ ->
131135
true
132-
end
133136
end)
134137

135138
{ {:__block__, context, list2}, inner_modules }
136-
{:defmodule, _, [{:__aliases__, context, inner_module_name}, [do: inner_module_body]]} = mod ->
139+
{:defmodule, _, [{:__aliases__, context, _inner_module_name}, [do: _inner_module_body]]} = mod ->
137140
{ {:__block__, context, [] }, [mod] }
138141
_ ->
139142
{ body, [] }
@@ -162,13 +165,14 @@ defmodule ElixirScript.Passes.FindModules do
162165
defp update_quoted(quoted) do
163166
Macro.prewalk(quoted, fn
164167
({name, context, parms}) ->
165-
context = if context[:import] == Kernel do
166-
context = Keyword.update!(context, :import, fn(_) -> ElixirScript.Kernel end)
167-
else
168-
context
169-
end
170-
171-
{name, context, parms}
168+
context =
169+
if context[:import] == Kernel do
170+
Keyword.update!(context, :import, fn(_) -> ElixirScript.Kernel end)
171+
else
172+
context
173+
end
174+
175+
{name, context, parms}
172176
(x) ->
173177
x
174178
end)

0 commit comments

Comments
 (0)