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