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 ```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, []}
        ]
      }
    }
  ]
}