Rule
A rule defines how one specific code structure should look like. If code is found which does not meet this structure, it is considered as harmful regarding maintainability or readability.
A rule is implemented using the visitor pattern and should be started using the visit(KtFile) function. If calculations must be done before or after the visiting process, here are two predefined (preVisit/postVisit) functions which can be overridden to setup/teardown additional data.
Constructors
Properties
Does this rule have auto correct specified in configuration? For auto correction to work the rule set itself enable it.
The default names which can be used instead of this ruleId to refer to this rule in suppression's.
Rules are aware of the paths they should run on via configuration properties.
Wrapped configuration of the ruleSet this rule is in. Use valueOrDefault function to retrieve properties specified for the rule implementing this interface instead. Only use this property directly if you need a specific rule set property.
Functions
Clears previous findings. Normally this is done on every new KtFile analyzed and should be called by clients.
Reports a single new violation. By contract the implementation can check if this finding is already suppressed and should not get reported. An alias set can be given to additionally check if an alias was used when suppressing. Additionally suppression by rule set id is supported.
Same as report but reports a list of findings.
Simplified version of Context.report with rule defaults.
Retrieves a sub configuration or value based on given key. If the configuration property cannot be found, null is returned.
Basic mechanism to decide if a rule should run or not.
Before starting visiting kotlin elements, a check is performed if this rule should be triggered. Pre- and post-visit-hooks are executed before/after the visiting process. BindingContext holds the result of the semantic analysis of the source code by the Kotlin compiler. Rules that rely on symbols and types being resolved can use the BindingContext for this analysis. Note that detekt must receive the correct compile classpath for the code being analyzed otherwise the default value BindingContext.EMPTY will be used and it will not be possible for detekt to resolve types or symbols.