Skip to content

Commit 3a6a0c0

Browse files
authored
Merge pull request #1152 from albertored/fix-apply
False positive in Credo.Check.Refactor.Apply
2 parents 8a03218 + 014bb5a commit 3a6a0c0

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

lib/credo/check/refactor/apply.ex

+8-3
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,21 @@ defmodule Credo.Check.Refactor.Apply do
5555
defp issue({:apply, _meta, [{:__MODULE__, _, _}, _fun, _args]}, _issue_meta), do: nil
5656

5757
defp issue({:apply, meta, [fun, args]}, issue_meta) do
58-
do_issue(:apply2, fun, args, meta, issue_meta)
58+
issue(:apply2, fun, args, meta, issue_meta)
5959
end
6060

6161
defp issue({:apply, meta, [_module, fun, args]}, issue_meta) do
62-
do_issue(:apply3, fun, args, meta, issue_meta)
62+
issue(:apply3, fun, args, meta, issue_meta)
6363
end
6464

6565
defp issue(_ast, _issue_meta), do: nil
6666

67-
defp do_issue(_apply, _fun, [{:|, _, _}], _meta, _issue_meta), do: nil
67+
defp issue(tag, fun, args, meta, issue_meta) do
68+
args = if(is_list(args), do: Enum.reverse(args), else: args)
69+
do_issue(tag, fun, args, meta, issue_meta)
70+
end
71+
72+
defp do_issue(_apply, _fun, [{:|, _, _} | _], _meta, _issue_meta), do: nil
6873

6974
defp do_issue(:apply2, {name, _meta, nil}, args, meta, issue_meta)
7075
when is_atom(name) and is_list(args) do

test/credo/check/refactor/apply_test.exs

+23-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ defmodule Credo.Check.Refactor.ApplyTest do
4444
|> to_source_file
4545
|> run_check(@described_check)
4646
|> refute_issues()
47+
48+
"""
49+
defmodule Test do
50+
def some_function(fun, args) do
51+
apply(fun, [:foo, :bar | args])
52+
end
53+
end
54+
"""
55+
|> to_source_file
56+
|> run_check(@described_check)
57+
|> refute_issues()
4758
end
4859

4960
test "it should NOT report violation for apply/3" do
@@ -76,7 +87,18 @@ defmodule Credo.Check.Refactor.ApplyTest do
7687
"""
7788
defmodule Test do
7889
def some_function(module, fun, args) do
79-
apply(fun, [:foo | args])
90+
apply(module, fun, [:foo | args])
91+
end
92+
end
93+
"""
94+
|> to_source_file
95+
|> run_check(@described_check)
96+
|> refute_issues()
97+
98+
"""
99+
defmodule Test do
100+
def some_function(module, fun, args) do
101+
apply(module, fun, [:foo, :bar | args])
80102
end
81103
end
82104
"""

0 commit comments

Comments
 (0)