zf

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

case_trivial_matches.ex (1364B)


      1 defmodule Credo.Check.Refactor.CaseTrivialMatches do
      2   use Credo.Check,
      3     explanations: [
      4       check: """
      5       PLEASE NOTE: This check is deprecated as it might do more harm than good.
      6 
      7       Related discussion: https://github.com/rrrene/credo/issues/65
      8       """
      9     ]
     10 
     11   @doc false
     12   @impl true
     13   def run(%SourceFile{} = source_file, params) do
     14     issue_meta = IssueMeta.for(source_file, params)
     15 
     16     Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
     17   end
     18 
     19   # TODO: consider for experimental check front-loader (ast)
     20   defp traverse({:case, meta, arguments} = ast, issues, issue_meta) do
     21     cases =
     22       arguments
     23       |> Credo.Code.Block.do_block_for!()
     24       |> List.wrap()
     25       |> Enum.map(&case_statement_for/1)
     26       |> Enum.sort()
     27 
     28     if cases == [false, true] do
     29       {ast, issues ++ [issue_for(issue_meta, meta[:line], :cond)]}
     30     else
     31       {ast, issues}
     32     end
     33   end
     34 
     35   defp traverse(ast, issues, _issue_meta) do
     36     {ast, issues}
     37   end
     38 
     39   defp case_statement_for({:->, _, [[true], _]}), do: true
     40   defp case_statement_for({:->, _, [[false], _]}), do: false
     41   defp case_statement_for(_), do: nil
     42 
     43   defp issue_for(issue_meta, line_no, trigger) do
     44     format_issue(
     45       issue_meta,
     46       message: "Case statements should not only contain `true` and `false`.",
     47       trigger: trigger,
     48       line_no: line_no
     49     )
     50   end
     51 end