CredoContrib is a set of additional checks for the Credo static analysis tool. Many of the checks are implementations of rules from christopheradams/elixir_style_guide. Contributions welcome!
Add credo_contrib
to the list of dependencies in your mix.exs
:
def deps do
[
{:credo_contrib, "~> 0.1.0"}
]
end
Add the desired checks to your .credo.exs
:
%{
configs: [
%{
name: "default",
checks: [
{CredoContrib.Check.FunctionBlockSyntax, allow_single_kw_defs: false},
# …
]
}
]
}
Disallows extranneous whitespace in documentation strings:
## GOOD
defmodule Foo do
@moduledoc """
This is a module
"""
@doc """
This is a function
"""
def bar do
:ok
end
end
## BAD
defmodule Foo do
@moduledoc """
This is a module
"""
@doc """
This is a function
"""
def bar do
:ok
end
end
Disallows mixing of def …, do:
syntax with multiple def … do … end
-style
definitions
https://github.com/christopheradams/elixir_style_guide#multiple-function-defs
allow_single_kw_defs
(default:true
): Set tofalse
to only allowdef …, do:
syntax for functions with multiple heads
Disallows alias __MODULE__
and @foo __MODULE__
https://github.com/christopheradams/elixir_style_guide#module-pseudo-variable
Enforces consistent ordering for module attributes and directives.
https://github.com/christopheradams/elixir_style_guide#module-attribute-ordering
Enforces a consistent naming scheme for modules based on their file path
## GOOD
# lib/foo/bar.ex
defmodule SomeApp.Foo.Bar do
end
# lib/controllers/bar_controller.ex
defmodule SomeApp.BarController do
end
## BAD
# lib/foo/bar/bar.ex
defmodule SomeApp.Foo.Bar do
end
# lib/utils/foo.ex
defmodule SomeApp.Foo do
end
Disallows public and private functions with the same name
https://github.com/christopheradams/elixir_style_guide#private-functions-with-same-name-as-public
Disallows usage of the pipe operator with a single function call
https://github.com/christopheradams/elixir_style_guide#avoid-single-pipelines
ignored_locals
: Keyword list of names and arities of local functions to ignore. E.g.,[expect: 3, stub: 3]