From c1fd41924175d0b8f86e0ab4857b6d4a389c1bb8 Mon Sep 17 00:00:00 2001 From: jisaacstone Date: Sat, 31 Aug 2024 19:15:55 -0700 Subject: [PATCH] Change to not warn on calls to IO.inspect/3 It seems unlikely that an inspect call with a specific file handler passed in would be from a debugging session, so it makes sense to exclude these calls --- lib/credo/check/warning/io_inspect.ex | 11 ++++++----- test/credo/check/warning/io_inspect_test.exs | 13 +++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/credo/check/warning/io_inspect.ex b/lib/credo/check/warning/io_inspect.ex index 73c834558..bc5d91942 100644 --- a/lib/credo/check/warning/io_inspect.ex +++ b/lib/credo/check/warning/io_inspect.ex @@ -16,23 +16,24 @@ defmodule Credo.Check.Warning.IoInspect do @impl true def run(%SourceFile{} = source_file, params) do issue_meta = IssueMeta.for(source_file, params) - Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta)) end defp traverse( - {{:., _, [{:__aliases__, meta, [:"Elixir", :IO]}, :inspect]}, _, _arguments} = ast, + {{:., _, [{:__aliases__, meta, [:"Elixir", :IO]}, :inspect]}, _, args} = ast, issues, issue_meta - ) do + ) + when length(args) < 3 do {ast, issues_for_call(meta, "Elixir.IO.inspect", issues, issue_meta)} end defp traverse( - {{:., _, [{:__aliases__, meta, [:IO]}, :inspect]}, _meta, _arguments} = ast, + {{:., _, [{:__aliases__, meta, [:IO]}, :inspect]}, _, args} = ast, issues, issue_meta - ) do + ) + when length(args) < 3 do {ast, issues_for_call(meta, "IO.inspect", issues, issue_meta)} end diff --git a/test/credo/check/warning/io_inspect_test.exs b/test/credo/check/warning/io_inspect_test.exs index cabf2a575..902903a42 100644 --- a/test/credo/check/warning/io_inspect_test.exs +++ b/test/credo/check/warning/io_inspect_test.exs @@ -20,6 +20,19 @@ defmodule Credo.Check.Warning.IoInspectTest do |> refute_issues() end + test "it should NOT report Inspect/3" do + """ + defmodule CredoSampleModule do + def some_function(parameter1) do + IO.inspect(:stderr, parameter1, []) + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> refute_issues() + end + # # cases raising issues #