multi_alias_import_require_use.ex (1675B)
1 defmodule Credo.Check.Consistency.MultiAliasImportRequireUse do 2 use Credo.Check, 3 run_on_all: true, 4 base_priority: :high, 5 tags: [:controversial], 6 explanations: [ 7 check: """ 8 When using alias, import, require or use for multiple names from the same 9 namespace, you have two options: 10 11 Use single instructions per name: 12 13 alias Ecto.Query 14 alias Ecto.Schema 15 alias Ecto.Multi 16 17 or use one multi instruction per namespace: 18 19 alias Ecto.{Query, Schema, Multi} 20 21 While this is not necessarily a concern for the correctness of your code, 22 you should use a consistent style throughout your codebase. 23 """ 24 ] 25 26 @collector Credo.Check.Consistency.MultiAliasImportRequireUse.Collector 27 28 @doc false 29 @impl true 30 def run_on_all_source_files(exec, source_files, params) do 31 @collector.find_and_append_issues(source_files, exec, params, &issues_for/3) 32 end 33 34 defp issues_for(expected, source_file, params) do 35 issue_meta = IssueMeta.for(source_file, params) 36 37 issue_locations = @collector.find_locations_not_matching(expected, source_file) 38 39 Enum.map(issue_locations, fn line_no -> 40 format_issue(issue_meta, message: message_for(expected), line_no: line_no) 41 end) 42 end 43 44 defp message_for(:multi = _expected) do 45 "Most of the time you are using the multi-alias/require/import/use syntax, but here you are using multiple single directives" 46 end 47 48 defp message_for(:single = _expected) do 49 "Most of the time you are using the multiple single line alias/require/import/use directives but here you are using the multi-alias/require/import/use syntax" 50 end 51 end