Skip to content

Commit ba4f622

Browse files
committed
Rework last merge to work with older Elixir versions
Refs #1127
1 parent cdfd789 commit ba4f622

File tree

3 files changed

+29
-40
lines changed

3 files changed

+29
-40
lines changed

lib/credo/check/warning/forbidden_module.ex

+12-24
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,18 @@ defmodule Credo.Check.Warning.ForbiddenModule do
2525

2626
@impl Credo.Check
2727
def run(%SourceFile{} = source_file, params) do
28-
modules = Params.get(params, :modules, __MODULE__)
29-
30-
modules =
31-
if Keyword.keyword?(modules) do
32-
Enum.map(modules, fn {key, value} -> {Name.full(key), value} end)
33-
else
34-
Enum.map(modules, fn key -> {Name.full(key), nil} end)
35-
end
28+
forbidden_modules =
29+
params
30+
|> Params.get(:modules, __MODULE__)
31+
|> Enum.map(fn
32+
{key, value} -> {Name.full(key), value}
33+
key -> {Name.full(key), nil}
34+
end)
35+
|> Map.new()
3636

3737
Credo.Code.prewalk(
3838
source_file,
39-
&traverse(&1, &2, modules, IssueMeta.for(source_file, params))
39+
&traverse(&1, &2, forbidden_modules, IssueMeta.for(source_file, params))
4040
)
4141
end
4242

@@ -58,6 +58,7 @@ defmodule Credo.Check.Warning.ForbiddenModule do
5858
Enum.reduce(aliases, issues, fn {:__aliases__, meta, module}, issues ->
5959
full_module = Name.full([base_alias, module])
6060
module = Name.full(module)
61+
6162
put_issue_if_forbidden(issues, issue_meta, meta, full_module, forbidden_modules, module)
6263
end)
6364

@@ -67,21 +68,15 @@ defmodule Credo.Check.Warning.ForbiddenModule do
6768
defp traverse(ast, issues, _, _), do: {ast, issues}
6869

6970
defp put_issue_if_forbidden(issues, issue_meta, meta, module, forbidden_modules, trigger) do
70-
forbidden_module_names = Enum.map(forbidden_modules, &elem(&1, 0))
71-
72-
if found_module?(forbidden_module_names, module) do
71+
if Map.has_key?(forbidden_modules, module) do
7372
[issue_for(issue_meta, meta, module, forbidden_modules, trigger) | issues]
7473
else
7574
issues
7675
end
7776
end
7877

79-
defp found_module?(forbidden_module_names, module) do
80-
Enum.member?(forbidden_module_names, module)
81-
end
82-
8378
defp issue_for(issue_meta, meta, module, forbidden_modules, trigger) do
84-
message = message(forbidden_modules, module) || "The `#{trigger}` module is not allowed."
79+
message = forbidden_modules[module] || "The `#{trigger}` module is not allowed."
8580

8681
format_issue(
8782
issue_meta,
@@ -91,11 +86,4 @@ defmodule Credo.Check.Warning.ForbiddenModule do
9186
column: meta[:column]
9287
)
9388
end
94-
95-
defp message(forbidden_modules, module) do
96-
Enum.find_value(forbidden_modules, fn
97-
{^module, message} -> message
98-
_ -> nil
99-
end)
100-
end
10189
end

lib/credo/check/warning/leaky_environment.ex

+13-11
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,18 @@ defmodule Credo.Check.Warning.LeakyEnvironment do
2727
Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
2828
end
2929

30-
@colon_and_dot_length 2
31-
defp traverse({{:., _, call}, meta, args} = ast, issues, issue_meta) do
30+
defp traverse({{:., meta, call}, _, args} = ast, issues, issue_meta) do
3231
case get_forbidden_call(call, args) do
3332
nil ->
3433
{ast, issues}
3534

3635
{trigger, meta} ->
3736
{ast, [issue_for(issue_meta, meta, trigger) | issues]}
3837

39-
trigger ->
38+
"" <> trigger ->
4039
[module, _function] = call
41-
len = module |> Atom.to_string() |> String.length()
42-
column = meta[:column] - len - @colon_and_dot_length
43-
meta = Keyword.put(meta, :column, column)
4440

45-
{ast, [issue_for(issue_meta, meta, trigger) | issues]}
41+
{ast, [issue_for(issue_meta, meta, trigger, module) | issues]}
4642
end
4743
end
4844

@@ -61,8 +57,7 @@ defmodule Credo.Check.Warning.LeakyEnvironment do
6157
end
6258
end
6359

64-
defp get_forbidden_call([:erlang, :open_port], [_, opts])
65-
when is_list(opts) do
60+
defp get_forbidden_call([:erlang, :open_port], [_, opts]) when is_list(opts) do
6661
if not Keyword.has_key?(opts, :env) do
6762
":erlang.open_port"
6863
end
@@ -72,13 +67,20 @@ defmodule Credo.Check.Warning.LeakyEnvironment do
7267
nil
7368
end
7469

75-
defp issue_for(issue_meta, meta, trigger) do
70+
defp issue_for(issue_meta, meta, trigger, erlang_module \\ nil) do
71+
column =
72+
if erlang_module do
73+
meta[:column] - String.length(":#{erlang_module}")
74+
else
75+
meta[:column]
76+
end
77+
7678
format_issue(
7779
issue_meta,
7880
message: "When using #{trigger}, clear or overwrite sensitive environment variables.",
7981
trigger: trigger,
8082
line_no: meta[:line],
81-
column: meta[:column]
83+
column: column
8284
)
8385
end
8486
end

lib/credo/check/warning/unsafe_exec.ex

+4-5
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ defmodule Credo.Check.Warning.UnsafeExec do
3434
Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
3535
end
3636

37-
defp traverse({{:., _loc, call}, meta, args} = ast, issues, issue_meta) do
37+
defp traverse({{:., meta, call}, _, args} = ast, issues, issue_meta) do
3838
case get_forbidden_call(call, args) do
3939
{bad, suggestion, trigger} ->
4040
[module, _function] = call
41+
4142
{ast, [issue_for(bad, suggestion, trigger, meta, module, issue_meta) | issues]}
4243

4344
nil ->
@@ -66,10 +67,8 @@ defmodule Credo.Check.Warning.UnsafeExec do
6667
nil
6768
end
6869

69-
@colon_and_dot_length 2
70-
defp issue_for(call, suggestion, trigger, meta, module, issue_meta) do
71-
len = module |> Atom.to_string() |> String.length()
72-
column = meta[:column] - len - @colon_and_dot_length
70+
defp issue_for(call, suggestion, trigger, meta, erlang_module, issue_meta) do
71+
column = meta[:column] - String.length(":#{erlang_module}")
7372

7473
format_issue(issue_meta,
7574
message: "Prefer #{suggestion} over #{call} to prevent command injection.",

0 commit comments

Comments
 (0)