CredoExt
Credo Checks Extension
Installation
If available in Hex, the package can be installed
by adding credo_ext along with credo to your list of dependencies in mix.exs, credo itself is required to run default checks and credo_ext is required to run custom checks. credo is needed for credo-ext in compile time:
def deps do
[
{:credo, "~> 1.7", runtime: false},
{:credo_ext, "~> 0.1.0"}
]
endImplemented Checks
CredoExt.Check.Readability.DoKeywordFunctionsLineConsistency- This check enforces all functions with same name and arity in a module havedo:defined either on the same line of signature or on a new line, ignoring full-body functions (do ... end).
Examples
Sample with definitions of functions with arity 1
```elixir defmodule SampleArity1 do #1 do on same line def get_type(%{type: type}), do: type |> Map.get(:coding) |> hd() |> Map.get(:code) #2 do on same line def get_type(%{ type: type, value: value }), do: type |> Map.get(:coding) |> hd() |> Map.get(:code) #3 do on next line def get_type(%{ type: :ok, }), do: :ok |> Map.get(:coding) |> hd() |> Map.get(:code) #4 do on same line def get_type(%{ type: :ok_1, }), do: :ok_1 |> Map.get(:coding) |> hd() |> Map.get(:code) #5 do on same line def get_type(%{ type: :ok_2, }), do: :ok_2 |> Map.get(:coding) |> hd() |> Map.get(:code) #6 do same line def get_type(%{ type: :ok_3, }), do: :ok_3 #7 ignored because is a full body function def get_type(%{ type: :ok_3, }) do :ok_3 end end ```Sample with definitions of functions with arity 2
```elixir defmodule SampleArity2 do # do same line defp get_type(nil, nil), do: nil # do same line defp get_type(%{ item: "item" }, nil), do: nil # do same line defp get_type( %{ item: "item", item2: "item2" }, %{another: "another"} ), do: nil # do next line defp get_type(%{type: :test}, :ok), do: :ok # do next line defp get_type(%{ type: :test, value: :error }, :ok), do: :ok # ignored because it is a full body function defp get_type(%{ type: :test, value: :error2 }, :ok) do :ok end # ignored because it is a full body function defp get_type(%{ type: :test, value: :error3 }, :ok) do :ok |> to_string() |> IO.inspect(label: "---- ok ----", limit: :infinity) end # do next line defp get_type(nil, :ok), do: :ok # do next line defp get_type(nil, :err), do: :err |> to_string() |> IO.inspect(label: "---- io ----", limit: :infinity) end ```Usage
Add the needed custom check into to your .credo.exs file:
%{
configs: [
%{
checks: %{
enabled: [
..., # Other checks
{CredoExt.Check.Readability.DoKeywordFunctionsLineConsistency, []}
]
}
}
]
}