detekt Configuration File
detekt uses a YAML style configuration file for various things:
- rule set and rule properties
- build failure
- console reports
- output reports
- processors
See the default-detekt-config.yml file for all defined configuration options and their default values.
Note: When using a custom config file, the default values are ignored unless you also set the --build-upon-default-config
flag.
Config validation
If config validation is enabled, detekt will verify that your configuration file is structured correctly and all first party rule sets, rules and configuration options are valid and not marked as deprecated.
config:
validation: true
warningsAsErrors: false
excludes: ''
Invalid or deprecated rules and configuration options are by default printed as warnings unless warningsAsErrors
is set to true
.
Note: Custom rules sets are excluded from config validation by default.
If you have extended detekt and rely on a custom properties, you will need to exclude those from config validation by adding their paths to the excludes
attribute. Multiple values are separated by comma and .*
can be used as a wildcard (e.g. propA,build>.*>propB
).
Rule sets and rules
detekt allows easily to just pick the rules you want and configure them the way you like. For example if you want to allow up to 20 functions inside a Kotlin file instead of the default threshold, write:
complexity:
TooManyFunctions:
thresholdInFiles: 20
To read about all supported rule sets and rules, use the side navigation Rule Sets
.
Path Filters / Excludes / Includes
Fine grained path filters can be defined for each rule or rule set through globbing patterns. This gives the user more freedom in analyzing only specific files and rule authors the ability to write library only rules.
complexity:
TooManyFunctions:
...
excludes: ['**/internal/**']
includes: ['**/internal/util/NeedsToBeChecked.kt']
In case you want to apply the same filters for different rules, you can use YAML anchors and aliases to reapply previously defined paths.
naming:
ClassNaming:
...
excludes: &testFolders
- '**/test/**'
- '**/androidTest/**'
ConstructorParameterNaming:
...
excludes: *testFolders
Build failure
Detekt supports the option to fail your build if a threshold of code smell issues is met.
For this the following code must be inside the detekt config:
build:
maxIssues: 10 # break the build if more than ten weighted issues are found
weights:
complexity: 2 # every rule of the complexity rule set should count as if two issues were found...
LongParameterList: 1 # ...with the exception of the LongParameterList rule.
comments: 0 # comment rules are just a nice to know?!
Every rule and rule set can be attached with an integer value which is the weight of the finding. For example: If you have 5 findings of the category complexity, then your failThreshold of 10 is reached as 5 x 2 = 10.
Weights are respected in the following priority order:
- The specified weight for a rule
- The specified weight for a rule set
- By default, the weight is 1.