credo_contrib
credo_contrib copied to clipboard
A happy home for custom Credo checks
CredoContrib 
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!
Installation
Add credo_contrib to the list of dependencies in your mix.exs:
def deps do
[
{:credo_contrib, "~> 0.2.0", only: [:dev, :test], runtime: false}
]
end
Usage
Add CredoContrib as a plugin in your .credo.exs to enable all checks:
%{
configs: [
%{
name: "default",
plugins: [
{CredoContrib, []}
]
}
]
}
Or add the desired checks individually:
%{
configs: [
%{
name: "default",
checks: [
{CredoContrib.Check.FunctionBlockSyntax, allow_single_kw_defs: false},
# …
]
}
]
}
Available Checks
CredoContrib.Check.DocWhitespace
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
CredoContrib.Check.EmptyDocString
Disallows @doc strings that do not contain any text.
## GOOD
@doc """
This is a function
"""
def bar do
:ok
end
## BAD
@doc """
"""
def bar do
:ok
end
CredoContrib.Check.EmptyTestBlock
Disallows usage of ExUnit.Case.test/3 with an empty body.
For unimplemented tests, use ExUnit.Case.test/1 and set ExUnit.start(except: [:not_implemented])
## GOOD
test "something not implemented"
test "something implemented" do
assert 1 + 1 == 2
end
## BAD
test "something not implemented" do
end
CredoContrib.Check.FunctionBlockSyntax
Disallows mixing of def …, do: syntax with multiple def … do … end-style
definitions
https://github.com/christopheradams/elixir_style_guide#multiple-function-defs
Options
allow_single_kw_defs(default:true): Set tofalseto only allowdef …, do:syntax for functions with multiple heads
CredoContrib.Check.FunctionNameUnderscorePrefix
Disallows function names prefixed with a single underscore
https://github.com/christopheradams/elixir_style_guide#private-functions-with-same-name-as-public
CredoContrib.Check.ModuleAlias
Disallows alias __MODULE__ and @foo __MODULE__
https://github.com/christopheradams/elixir_style_guide#module-pseudo-variable
CredoContrib.Check.ModuleDirectivesOrder
Enforces consistent ordering for module attributes and directives.
https://github.com/christopheradams/elixir_style_guide#module-attribute-ordering
CredoContrib.Check.PublicPrivateFunctionName
Disallows public and private functions with the same name
https://github.com/christopheradams/elixir_style_guide#private-functions-with-same-name-as-public
CredoContrib.Check.SingleFunctionPipe
Disallows usage of the pipe operator with a single function call
https://github.com/christopheradams/elixir_style_guide#avoid-single-pipelines
Options
ignored_locals: Keyword list of names and arities of local functions to ignore. E.g.,[expect: 3, stub: 3]
Development
Setup
bin/setup
Running the tests
bin/test
License
ISC