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"}
]
end

Implemented Checks

Examples

Sample with definitions of functions with arity 1
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
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, []}
]
}
}
]
}