unnecessary_alias_expansion.ex (1416B)
1 defmodule Credo.Check.Readability.UnnecessaryAliasExpansion do 2 use Credo.Check, 3 base_priority: :low, 4 explanations: [ 5 check: """ 6 Alias expansion is useful but when aliasing a single module, 7 it can be harder to read with unnecessary braces. 8 9 # preferred 10 11 alias ModuleA.Foo 12 alias ModuleA.{Foo, Bar} 13 14 # NOT preferred 15 16 alias ModuleA.{Foo} 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, _, [{{:., _, [_, :{}]}, _, [{:__aliases__, opts, [child]}]}]} = ast, 35 issues, 36 issue_meta 37 ) do 38 {ast, issues ++ [issue_for(issue_meta, Keyword.get(opts, :line), child)]} 39 end 40 41 defp traverse(ast, issues, _issue_meta), do: {ast, issues} 42 43 defp issue_for(issue_meta, line_no, trigger) do 44 format_issue( 45 issue_meta, 46 message: "Unnecessary alias expansion for #{trigger}, consider removing braces.", 47 trigger: trigger, 48 line_no: line_no 49 ) 50 end 51 end