zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

io_puts.ex (1185B)


      1 defmodule Credo.Check.Refactor.IoPuts do
      2   use Credo.Check,
      3     tags: [:controversial],
      4     explanations: [
      5       check: """
      6       Prefer using Logger statements over using `IO.puts/1`.
      7 
      8       This is a situational check.
      9 
     10       As such, it might be a great help for e.g. Phoenix projects, but
     11       a clear mismatch for CLI projects.
     12       """
     13     ]
     14 
     15   @call_string "IO.puts"
     16 
     17   @doc false
     18   @impl true
     19   def run(%SourceFile{} = source_file, params) do
     20     issue_meta = IssueMeta.for(source_file, params)
     21 
     22     Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
     23   end
     24 
     25   defp traverse(
     26          {{:., _, [{:__aliases__, _, [:IO]}, :puts]}, meta, _arguments} = ast,
     27          issues,
     28          issue_meta
     29        ) do
     30     {ast, issues_for_call(meta, issues, issue_meta)}
     31   end
     32 
     33   defp traverse(ast, issues, _issue_meta) do
     34     {ast, issues}
     35   end
     36 
     37   defp issues_for_call(meta, issues, issue_meta) do
     38     [issue_for(issue_meta, meta[:line], @call_string) | issues]
     39   end
     40 
     41   defp issue_for(issue_meta, line_no, trigger) do
     42     format_issue(
     43       issue_meta,
     44       message: "There should be no calls to IO.puts/1.",
     45       trigger: trigger,
     46       line_no: line_no
     47     )
     48   end
     49 end