zf

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

alias_as.ex (1804B)


      1 defmodule Credo.Check.Readability.AliasAs do
      2   use Credo.Check,
      3     base_priority: :low,
      4     tags: [:experimental],
      5     explanations: [
      6       check: """
      7       Aliases which are not completely renamed using the `:as` option are easier to follow.
      8 
      9           # preferred
     10 
     11           def MyModule do
     12             alias MyApp.Module1
     13 
     14             def my_function(foo) do
     15               Module1.run(foo)
     16             end
     17           end
     18 
     19           # NOT preferred
     20 
     21           def MyModule do
     22             alias MyApp.Module1, as: M1
     23 
     24             def my_function(foo) do
     25               # what the heck is `M1`?
     26               M1.run(foo)
     27             end
     28           end
     29 
     30       Like all `Readability` issues, this one is not a technical concern.
     31       But you can improve the odds of others reading and liking your code by making
     32       it easier to follow.
     33       """
     34     ]
     35 
     36   @doc false
     37   @impl true
     38   def run(%SourceFile{} = source_file, params) do
     39     source_file
     40     |> Credo.Code.prewalk(&traverse(&1, &2, IssueMeta.for(source_file, params)))
     41     |> Enum.reverse()
     42   end
     43 
     44   defp traverse(ast, issues, issue_meta), do: {ast, add_issue(issues, issue(ast, issue_meta))}
     45 
     46   defp add_issue(issues, nil), do: issues
     47   defp add_issue(issues, issue), do: [issue | issues]
     48 
     49   defp issue({:alias, _, [{:__MODULE__, _, nil}, [as: {_, meta, _}]]}, issue_meta),
     50     do: issue_for(issue_meta, meta[:line], inspect(:__MODULE__))
     51 
     52   defp issue({:alias, _, [{_, _, original}, [as: {_, meta, _}]]}, issue_meta),
     53     do: issue_for(issue_meta, meta[:line], inspect(Module.concat(original)))
     54 
     55   defp issue(_ast, _issue_meta), do: nil
     56 
     57   defp issue_for(issue_meta, line_no, trigger) do
     58     format_issue(
     59       issue_meta,
     60       message: "Avoid using the :as option with alias.",
     61       trigger: trigger,
     62       line_no: line_no
     63     )
     64   end
     65 end