zf

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

impl_true.ex (1403B)


      1 defmodule Credo.Check.Readability.ImplTrue do
      2   use Credo.Check,
      3     base_priority: :normal,
      4     explanations: [
      5       check: """
      6       When implementing behaviour callbacks, `@impl true` indicates that a function implements a callback, but
      7       a better way is to note the actual behaviour being implemented, for example `@impl MyBehaviour`. This
      8       not only improves readability, but adds extra validation in cases where multiple behaviours are implemented
      9       in a single module.
     10 
     11       Instead of:
     12 
     13           @impl true
     14           def my_funcion() do
     15             ...
     16 
     17       use:
     18 
     19           @impl MyBehaviour
     20           def my_funcion() do
     21             ...
     22 
     23       """
     24     ]
     25 
     26   alias Credo.Code.Heredocs
     27 
     28   @doc false
     29   @impl true
     30   def run(%SourceFile{} = source_file, params) do
     31     issue_meta = IssueMeta.for(source_file, params)
     32 
     33     source_file
     34     |> Heredocs.replace_with_spaces()
     35     |> String.split("\n")
     36     |> Enum.with_index(1)
     37     |> Enum.reduce([], &check_line(&1, &2, issue_meta))
     38   end
     39 
     40   defp check_line({line, line_number}, issues, issue_meta) do
     41     case String.trim(line) do
     42       "@impl true" -> [issue_for(issue_meta, line_number) | issues]
     43       _ -> issues
     44     end
     45   end
     46 
     47   defp issue_for(issue_meta, line_no) do
     48     format_issue(
     49       issue_meta,
     50       message: "@impl true should be @impl MyBehaviour",
     51       trigger: "@impl true",
     52       line_no: line_no
     53     )
     54   end
     55 end