zf

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

exception_names.ex (2101B)


      1 defmodule Credo.Check.Consistency.ExceptionNames do
      2   use Credo.Check,
      3     run_on_all: true,
      4     base_priority: :high,
      5     explanations: [
      6       check: """
      7       Exception names should end with a common suffix like "Error".
      8 
      9       Try to name your exception modules consistently:
     10 
     11           defmodule BadCodeError do
     12             defexception [:message]
     13           end
     14 
     15           defmodule ParserError do
     16             defexception [:message]
     17           end
     18 
     19       Inconsistent use should be avoided:
     20 
     21           defmodule BadHTTPResponse do
     22             defexception [:message]
     23           end
     24 
     25           defmodule HTTPHeaderException do
     26             defexception [:message]
     27           end
     28 
     29       While this is not necessarily a concern for the correctness of your code,
     30       you should use a consistent style throughout your codebase.
     31       """
     32     ]
     33 
     34   @collector Credo.Check.Consistency.ExceptionNames.Collector
     35 
     36   @doc false
     37   @impl true
     38   def run_on_all_source_files(exec, source_files, params) do
     39     @collector.find_and_append_issues(source_files, exec, params, &issues_for/3)
     40   end
     41 
     42   defp issues_for(expected, source_file, params) do
     43     issue_meta = IssueMeta.for(source_file, params)
     44 
     45     issue_locations = @collector.find_locations_not_matching(expected, source_file)
     46 
     47     Enum.map(issue_locations, fn location ->
     48       format_issue(issue_meta, [
     49         {:message, message_for(expected, location[:trigger])} | location
     50       ])
     51     end)
     52   end
     53 
     54   defp message_for({:prefix, expected}, trigger) do
     55     message = """
     56     Exception modules should be named consistently.
     57     It seems your strategy is to prefix them with `#{expected}`,
     58     but `#{trigger}` does not follow that convention.
     59     """
     60 
     61     to_one_line(message)
     62   end
     63 
     64   defp message_for({:suffix, expected}, trigger) do
     65     message = """
     66     Exception modules should be named consistently.
     67     It seems your strategy is to have `#{expected}` as a suffix,
     68     but `#{trigger}` does not follow that convention.
     69     """
     70 
     71     to_one_line(message)
     72   end
     73 
     74   defp to_one_line(str) do
     75     str
     76     |> String.split()
     77     |> Enum.join(" ")
     78   end
     79 end