io_inspect.ex (1445B)
1 defmodule Credo.Check.Warning.IoInspect do 2 use Credo.Check, 3 base_priority: :high, 4 explanations: [ 5 check: """ 6 While calls to IO.inspect might appear in some parts of production code, 7 most calls to this function are added during debugging sessions. 8 9 This check warns about those calls, because they might have been committed 10 in error. 11 """ 12 ] 13 14 @call_string "IO.inspect" 15 16 @doc false 17 @impl true 18 def run(%SourceFile{} = source_file, params) do 19 issue_meta = IssueMeta.for(source_file, params) 20 21 Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta)) 22 end 23 24 defp traverse( 25 {{:., _, [{:__aliases__, _, [:Elixir, :IO]}, :inspect]}, meta, _arguments} = ast, 26 issues, 27 issue_meta 28 ) do 29 {ast, issues_for_call(meta, issues, issue_meta)} 30 end 31 32 defp traverse( 33 {{:., _, [{:__aliases__, _, [:IO]}, :inspect]}, meta, _arguments} = ast, 34 issues, 35 issue_meta 36 ) do 37 {ast, issues_for_call(meta, issues, issue_meta)} 38 end 39 40 defp traverse(ast, issues, _issue_meta) do 41 {ast, issues} 42 end 43 44 defp issues_for_call(meta, issues, issue_meta) do 45 [issue_for(issue_meta, meta[:line], @call_string) | issues] 46 end 47 48 defp issue_for(issue_meta, line_no, trigger) do 49 format_issue( 50 issue_meta, 51 message: "There should be no calls to IO.inspect/1.", 52 trigger: trigger, 53 line_no: line_no 54 ) 55 end 56 end