diff --git a/lib/credo/check/refactor/apply.ex b/lib/credo/check/refactor/apply.ex index a4c0dba00..ad43e8247 100644 --- a/lib/credo/check/refactor/apply.ex +++ b/lib/credo/check/refactor/apply.ex @@ -55,16 +55,21 @@ defmodule Credo.Check.Refactor.Apply do defp issue({:apply, _meta, [{:__MODULE__, _, _}, _fun, _args]}, _issue_meta), do: nil defp issue({:apply, meta, [fun, args]}, issue_meta) do - do_issue(:apply2, fun, args, meta, issue_meta) + issue(:apply2, fun, args, meta, issue_meta) end defp issue({:apply, meta, [_module, fun, args]}, issue_meta) do - do_issue(:apply3, fun, args, meta, issue_meta) + issue(:apply3, fun, args, meta, issue_meta) end defp issue(_ast, _issue_meta), do: nil - defp do_issue(_apply, _fun, [{:|, _, _}], _meta, _issue_meta), do: nil + defp issue(tag, fun, args, meta, issue_meta) do + args = if(is_list(args), do: Enum.reverse(args), else: args) + do_issue(tag, fun, args, meta, issue_meta) + end + + defp do_issue(_apply, _fun, [{:|, _, _} | _], _meta, _issue_meta), do: nil defp do_issue(:apply2, {name, _meta, nil}, args, meta, issue_meta) when is_atom(name) and is_list(args) do diff --git a/test/credo/check/refactor/apply_test.exs b/test/credo/check/refactor/apply_test.exs index 6748be73e..032f3f652 100644 --- a/test/credo/check/refactor/apply_test.exs +++ b/test/credo/check/refactor/apply_test.exs @@ -44,6 +44,17 @@ defmodule Credo.Check.Refactor.ApplyTest do |> to_source_file |> run_check(@described_check) |> refute_issues() + + """ + defmodule Test do + def some_function(fun, args) do + apply(fun, [:foo, :bar | args]) + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> refute_issues() end test "it should NOT report violation for apply/3" do @@ -76,7 +87,18 @@ defmodule Credo.Check.Refactor.ApplyTest do """ defmodule Test do def some_function(module, fun, args) do - apply(fun, [:foo | args]) + apply(module, fun, [:foo | args]) + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> refute_issues() + + """ + defmodule Test do + def some_function(module, fun, args) do + apply(module, fun, [:foo, :bar | args]) end end """