Check Parameters
Checks are configured using parameters (short: params).
There are custom params for each check and a set of general params that work for all checks.
Configuration
Checks and their params are configured in Credo's configuration file:
# .credo.exs
%{
configs: [
%{
name: "default",
checks: [
{Credo.Check.Consistency.TabsOrSpaces, false},
{Credo.Check.Design.AliasUsage, if_nested_deeper_than: 2},
],
# files etc.
}
]
}
All checks are configured using a two-element tuple:
{MyApp.CheckModule, params}
MyApp.CheckModule
is the module representing the check to be configured (read more about custom checks).
params
can be either false
, to disable the check ...
# This check won't be part of the analysis
{Credo.Check.Consistency.TabsOrSpaces, false}
... or a keyword list of parameters, used to configure the check:
{Credo.Check.Design.AliasUsage, if_nested_deeper_than: 2}
General params
While params
are defined by each check individually, there are a couple of general params provided by Credo, which work the same for each check.
The general params available are:
:category
Overwrites the category of the check
{Credo.Check.Warning.IExPry, category: :readability}
:exit_status
Overwrites a custom exit status for the check
{Credo.Check.Warning.IoInspect, exit_status: 0}
Read more on exit status in Credo.
:files
Controls which files the check runs on.
This allows for specific files or patterns to be included/excluded for specific checks.
The syntax is the same as for the top-level :files
key:
# check included for Elixir files in lib/ only
{Credo.Check.Consistency.ExceptionNames, files: %{included: ["lib/**/*.ex"]}},
# check excluded for a specific file
{Credo.Check.Warning.IExPry, files: %{excluded: ["lib/debug_server.ex"]}},
# check included for all Elixir script files, but excluded for test scripts
{Credo.Check.Warning.IoInspect, files: %{included: ["**/*.exs"], excluded: ["**/*_test.exs"]}},
Please note that these params do not "override" the top-level config, but are applied to the result of the top-level config's resolution.
:priority
Overwrites the priority of the check
{Credo.Check.Warning.IoInspect, priority: :low}
Available priorities are: :low
, :normal
, :high
and :higher
.
:tags
Overwrites or appends the tags of the check
# Overwrite all tags for `MyApp.CheckModule`
{MyApp.CheckModule, tags: [:my_tag]}
# OR: append tags to `MyApp.CheckModule`
{MyApp.CheckModule, tags: [:__initial__, :my_tag]}
Tags can then be used to include or exclude checks from the analysis:
# Only run checks tagged `:my_tag` during analysis
$ mix credo --checks-with-tag my_tag
# Exclude all checks tagged `:my_tag` from analysis
$ mix credo --checks-without-tag my_tag