zf

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

multi_alias.ex (1582B)


      1 defmodule Credo.Check.Readability.MultiAlias do
      2   use Credo.Check,
      3     base_priority: :low,
      4     tags: [:controversial],
      5     explanations: [
      6       check: """
      7       Multi alias expansion makes module uses harder to search for in large code bases.
      8 
      9           # preferred
     10 
     11           alias Module.Foo
     12           alias Module.Bar
     13 
     14           # NOT preferred
     15 
     16           alias Module.{Foo, Bar}
     17 
     18       Like all `Readability` issues, this one is not a technical concern.
     19       But you can improve the odds of others reading and liking your code by making
     20       it easier to follow.
     21       """
     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   # TODO: consider for experimental check front-loader (ast)
     33   defp traverse(
     34          {:alias, _, [{{_, _, [{alias, opts, _base_alias}, :{}]}, _, [multi_alias | _]}]} = ast,
     35          issues,
     36          issue_meta
     37        )
     38        when alias in [:__aliases__, :__MODULE__] do
     39     {:__aliases__, _, module} = multi_alias
     40     module = Enum.join(module, ".")
     41 
     42     new_issue = issue_for(issue_meta, Keyword.get(opts, :line), module)
     43 
     44     {ast, [new_issue | issues]}
     45   end
     46 
     47   defp traverse(ast, issues, _issue_meta), do: {ast, issues}
     48 
     49   defp issue_for(issue_meta, line_no, trigger) do
     50     format_issue(
     51       issue_meta,
     52       message:
     53         "Avoid grouping aliases in '{ ... }'; please specify one fully-qualified alias per line.",
     54       trigger: trigger,
     55       line_no: line_no
     56     )
     57   end
     58 end