zf

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

operation_with_constant_result.ex (1588B)


      1 defmodule Credo.Check.Warning.OperationWithConstantResult do
      2   use Credo.Check,
      3     base_priority: :high,
      4     explanations: [
      5       check: """
      6       Some numerical operations always yield the same result and therefore make
      7       little sense in production code.
      8 
      9       Examples:
     10 
     11           x * 1   # always returns x
     12           x * 0   # always returns 0
     13 
     14       In practice they are likely the result of a debugging session or were made by
     15       mistake.
     16       """
     17     ]
     18 
     19   @ops_and_constant_results [
     20     {:*, "zero", 0},
     21     {:*, "the left side of the expression", 1}
     22   ]
     23 
     24   @doc false
     25   @impl true
     26   def run(%SourceFile{} = source_file, params) do
     27     issue_meta = IssueMeta.for(source_file, params)
     28 
     29     Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
     30   end
     31 
     32   # skip references to functions
     33   defp traverse({:&, _, _}, issues, _) do
     34     {nil, issues}
     35   end
     36 
     37   for {op, constant_result, operand} <- @ops_and_constant_results do
     38     defp traverse(
     39            {unquote(op), meta, [_lhs, unquote(operand)]} = ast,
     40            issues,
     41            issue_meta
     42          ) do
     43       new_issue =
     44         issue_for(
     45           issue_meta,
     46           meta[:line],
     47           unquote(op),
     48           unquote(constant_result)
     49         )
     50 
     51       {ast, issues ++ [new_issue]}
     52     end
     53   end
     54 
     55   defp traverse(ast, issues, _issue_meta) do
     56     {ast, issues}
     57   end
     58 
     59   defp issue_for(issue_meta, line_no, trigger, constant_result) do
     60     format_issue(
     61       issue_meta,
     62       message: "Operation will always return #{constant_result}.",
     63       trigger: trigger,
     64       line_no: line_no
     65     )
     66   end
     67 end