Replace @active KDoc tag with @ActiveByDefault annotation (#3592)

* Add @ActiveByDefault annotation

* Add support for @ActiveByDefault annotation

* Use annotation for all activated in v1.2.0

* Use annotation for all activated after v1.2.0

* Use annotation for all activated in v1.0.0

* Update documentation with regard to RuleSetProvider

* Update documentation

* Remove leading 'v' from version in annotation

* Use named parameter 'since' for @ActiveByDefault

* check version matches semantic version pattern.

* Fix typo and correct version format

* Fix merge errors

Co-authored-by: Markus Schwarz <post@markus-schwarz.net>
Co-authored-by: Chao Zhang <zhangchao6865@gmail.com>
This commit is contained in:
marschwar
2021-03-28 20:21:09 +02:00
committed by GitHub
parent 92b6a01903
commit 36edd4c528
145 changed files with 399 additions and 289 deletions

View File

@@ -64,7 +64,7 @@ Kotlin files AST. This can be helpful when implementing and debugging rules.
After some time and testing there is a chance this rule will become active on default.
Rules that contain an `@active` tag in their KDoc will be marked as active in the `default-detekt-config.yml`.
Rules annotated with `@ActiveByDefault` will be marked as active in the`default-detekt-config.yml`.
### When updating the website ...

View File

@@ -0,0 +1,15 @@
package io.gitlab.arturbosch.detekt.api.internal
/**
* Annotated [io.gitlab.arturbosch.detekt.api.Rule] or [io.gitlab.arturbosch.detekt.api.RuleSetProvider]
* is active by default.
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class ActiveByDefault(
/**
* The Detekt version the rule was activated by default in the following format: <major>.<minor>.<patch>,
* where major, minor and patch are non-negative integer numbers.
*/
val since: String
)

View File

@@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.formatting
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.RuleSetProvider
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
/**
* This rule set provides wrappers for rules implemented by ktlint - https://ktlint.github.io/.
@@ -16,8 +17,8 @@ import io.gitlab.arturbosch.detekt.api.RuleSetProvider
*
* @configuration android - if android style guides should be preferred (default: `false`)
* @configuration autoCorrect - if rules should auto correct style violation (default: `true`)
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class FormattingProvider : RuleSetProvider {
override val ruleSetId: String = "formatting"

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.ChainWrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ChainWrapping(config: Config) : FormattingRule(config) {
override val wrapping = ChainWrappingRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.CommentSpacingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class CommentSpacing(config: Config) : FormattingRule(config) {
override val wrapping = CommentSpacingRule()

View File

@@ -2,13 +2,13 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.FilenameRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class Filename(config: Config) : FormattingRule(config) {
override val wrapping = FilenameRule()

View File

@@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.core.api.FeatureInAlphaState
import com.pinterest.ktlint.ruleset.standard.FinalNewlineRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
import io.gitlab.arturbosch.detekt.formatting.INSERT_FINAL_NEWLINE_KEY
import org.ec4j.core.model.Property
@@ -13,11 +14,10 @@ import org.ec4j.core.model.PropertyType
*
* @configuration insertFinalNewLine - report absence or presence of a newline (default: `true`)
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*
*/
@OptIn(FeatureInAlphaState::class)
@ActiveByDefault(since = "1.0.0")
class FinalNewline(config: Config) : FormattingRule(config) {
override val wrapping = FinalNewlineRule()

View File

@@ -2,6 +2,7 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.MaxLineLengthRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.ANDROID_MAX_LINE_LENGTH
import io.gitlab.arturbosch.detekt.formatting.DEFAULT_IDEA_LINE_LENGTH
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
@@ -11,9 +12,8 @@ import io.gitlab.arturbosch.detekt.formatting.MAX_LINE_LENGTH_KEY
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @configuration maxLineLength - maximum line length (default: `120`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class MaximumLineLength(config: Config) : FormattingRule(config) {
override val wrapping = MaxLineLengthRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.ModifierOrderRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-modifier-order">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ModifierOrdering(config: Config) : FormattingRule(config) {
override val wrapping = ModifierOrderRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.experimental.MultiLineIfElseRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-modifier-order">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class MultiLineIfElse(config: Config) : FormattingRule(config) {
override val wrapping = MultiLineIfElseRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoBlankLineBeforeRbraceRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoBlankLineBeforeRbrace(config: Config) : FormattingRule(config) {
override val wrapping = NoBlankLineBeforeRbraceRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoConsecutiveBlankLinesRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-blank">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoConsecutiveBlankLines(config: Config) : FormattingRule(config) {
override val wrapping = NoConsecutiveBlankLinesRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoEmptyClassBodyRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-empty-class-body">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoEmptyClassBody(config: Config) : FormattingRule(config) {
override val wrapping = NoEmptyClassBodyRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoLineBreakAfterElseRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoLineBreakAfterElse(config: Config) : FormattingRule(config) {
override val wrapping = NoLineBreakAfterElseRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoLineBreakBeforeAssignmentRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoLineBreakBeforeAssignment(config: Config) : FormattingRule(config) {
override val wrapping = NoLineBreakBeforeAssignmentRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoMultipleSpacesRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoMultipleSpaces(config: Config) : FormattingRule(config) {
override val wrapping = NoMultipleSpacesRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoSemicolonsRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-semi">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoSemicolons(config: Config) : FormattingRule(config) {
override val wrapping = NoSemicolonsRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoTrailingSpacesRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-trailing-whitespaces">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoTrailingSpaces(config: Config) : FormattingRule(config) {
override val wrapping = NoTrailingSpacesRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoUnitReturnRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-unit-return">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoUnitReturn(config: Config) : FormattingRule(config) {
override val wrapping = NoUnitReturnRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoUnusedImportsRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoUnusedImports(config: Config) : FormattingRule(config) {
override val wrapping = NoUnusedImportsRule()

View File

@@ -2,13 +2,13 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.NoWildcardImportsRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-import">ktlint-website</a> for documentation.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NoWildcardImports(config: Config) : FormattingRule(config) {
override val wrapping = NoWildcardImportsRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.experimental.PackageNameRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class PackageName(config: Config) : FormattingRule(config) {
override val wrapping = PackageNameRule()

View File

@@ -2,6 +2,7 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.ParameterListWrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.DEFAULT_INDENT
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
import io.gitlab.arturbosch.detekt.formatting.INDENT_SIZE_KEY
@@ -11,9 +12,9 @@ import io.gitlab.arturbosch.detekt.formatting.INDENT_SIZE_KEY
*
* @configuration indentSize - indentation size (default: `4`)
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ParameterListWrapping(config: Config) : FormattingRule(config) {
override val wrapping = ParameterListWrappingRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundColonRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundColon(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundColonRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundCommaRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundComma(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundCommaRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundCurlyRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundCurly(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundCurlyRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundDotRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundDot(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundDotRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundKeywordRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundKeyword(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundKeywordRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundOperatorsRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundOperators(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundOperatorsRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundParensRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundParens(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundParensRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.SpacingAroundRangeOperatorRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-spacing">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class SpacingAroundRangeOperator(config: Config) : FormattingRule(config) {
override val wrapping = SpacingAroundRangeOperatorRule()

View File

@@ -2,14 +2,15 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers
import com.pinterest.ktlint.ruleset.standard.StringTemplateRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
/**
* See <a href="https://ktlint.github.io/#rule-string-template">ktlint-website</a> for documentation.
*
* @active since v1.0.0
* @autoCorrect since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class StringTemplate(config: Config) : FormattingRule(config) {
override val wrapping = StringTemplateRule()

View File

@@ -1,7 +1,30 @@
package io.gitlab.arturbosch.detekt.generator.collection
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.psi.KtClassOrObject
import kotlin.reflect.KClass
fun KtClassOrObject.isAnnotatedWith(annotation: KClass<out Annotation>) =
annotationEntries.any { it.shortName?.identifier == annotation.simpleName }
fun KtClassOrObject.isAnnotatedWith(annotation: KClass<out Annotation>): Boolean =
annotationEntries.any { it.isOfType(annotation) }
fun KtClassOrObject.firstAnnotationParameter(annotation: KClass<out Annotation>): String =
checkNotNull(firstAnnotationParameterOrNull(annotation))
fun KtClassOrObject.firstAnnotationParameterOrNull(annotation: KClass<out Annotation>): String? =
annotationEntries
.firstOrNull { it.isOfType(annotation) }
?.firstParameterOrNull()
private fun KtAnnotationEntry.isOfType(annotation: KClass<out Annotation>) =
shortName?.identifier == annotation.simpleName
private fun KtAnnotationEntry.firstParameterOrNull() =
valueArguments
.firstOrNull()
?.getArgumentExpression()
?.text
?.withoutQuotes()
private fun String.withoutQuotes() = removePrefix(QUOTES).removeSuffix(QUOTES)
private const val QUOTES = "\""

View File

@@ -0,0 +1,27 @@
package io.gitlab.arturbosch.detekt.generator.collection
import io.gitlab.arturbosch.detekt.generator.collection.exception.InvalidDocumentationException
sealed class DefaultActivationStatus {
abstract val active: Boolean
}
object Inactive : DefaultActivationStatus() {
override val active = false
}
data class Active(val since: String) : DefaultActivationStatus() {
override val active = true
init {
if (!since.matches(SEMANTIC_VERSION_PATTERN)) {
throw InvalidDocumentationException(
"'$since' must match the semantic version pattern <major>.<minor>.<patch>"
)
}
}
companion object {
private val SEMANTIC_VERSION_PATTERN = """^\d+\.\d+.\d+$""".toRegex()
}
}

View File

@@ -5,8 +5,7 @@ data class Rule(
val description: String,
val nonCompliantCodeExample: String,
val compliantCodeExample: String,
val active: Boolean,
val activeSince: String? = null,
val defaultActivationStatus: DefaultActivationStatus,
var severity: String,
var debt: String,
var aliases: String?,

View File

@@ -1,6 +1,7 @@
package io.gitlab.arturbosch.detekt.generator.collection
import io.gitlab.arturbosch.detekt.api.DetektVisitor
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
import io.gitlab.arturbosch.detekt.generator.collection.exception.InvalidDocumentationException
import io.gitlab.arturbosch.detekt.rules.isOverride
@@ -16,7 +17,7 @@ import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
data class RuleSetProvider(
val name: String,
val description: String,
val active: Boolean,
val defaultActivationStatus: DefaultActivationStatus,
val rules: List<String> = listOf(),
val configuration: List<Configuration> = listOf()
)
@@ -34,7 +35,6 @@ class RuleSetProviderCollector : Collector<RuleSetProvider> {
}
}
private const val TAG_ACTIVE = "active"
private const val PROPERTY_RULE_SET_ID = "ruleSetId"
private val SUPPORTED_PROVIDERS =
@@ -44,7 +44,7 @@ class RuleSetProviderVisitor : DetektVisitor() {
var containsRuleSetProvider = false
private var name: String = ""
private var description: String = ""
private var active: Boolean = false
private var defaultActivationStatus: DefaultActivationStatus = Inactive
private val ruleNames: MutableList<String> = mutableListOf()
private val configuration = mutableListOf<Configuration>()
@@ -57,7 +57,7 @@ class RuleSetProviderVisitor : DetektVisitor() {
throw InvalidDocumentationException("Missing description for RuleSet $name.")
}
return RuleSetProvider(name, description, active, ruleNames, configuration)
return RuleSetProvider(name, description, defaultActivationStatus, ruleNames, configuration)
}
override fun visitSuperTypeList(list: KtSuperTypeList) {
@@ -71,7 +71,9 @@ class RuleSetProviderVisitor : DetektVisitor() {
override fun visitClassOrObject(classOrObject: KtClassOrObject) {
description = classOrObject.docComment?.getDefaultSection()?.getContent()?.trim() ?: ""
active = classOrObject.docComment?.getDefaultSection()?.findTagByName(TAG_ACTIVE) != null
if (classOrObject.isAnnotatedWith(ActiveByDefault::class)) {
defaultActivationStatus = Active(since = classOrObject.firstAnnotationParameter(ActiveByDefault::class))
}
configuration.addAll(classOrObject.parseConfigurationTags())
super.visitClassOrObject(classOrObject)
}

View File

@@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.generator.collection
import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.DetektVisitor
import io.gitlab.arturbosch.detekt.api.ThresholdRule
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import io.gitlab.arturbosch.detekt.formatting.FormattingRule
import io.gitlab.arturbosch.detekt.generator.collection.exception.InvalidAliasesDeclaration
@@ -27,8 +28,7 @@ internal class RuleVisitor : DetektVisitor() {
private var nonCompliant = ""
private var compliant = ""
private var name = ""
private var active = false
private var activeSince: String? = null
private var defaultActivationStatus: DefaultActivationStatus = Inactive
private var autoCorrect = false
private var requiresTypeResolution = false
private var severity = ""
@@ -48,8 +48,7 @@ internal class RuleVisitor : DetektVisitor() {
description = description,
nonCompliantCodeExample = nonCompliant,
compliantCodeExample = compliant,
active = active,
activeSince = activeSince,
defaultActivationStatus = defaultActivationStatus,
severity = severity,
debt = debt,
aliases = aliases,
@@ -91,14 +90,9 @@ internal class RuleVisitor : DetektVisitor() {
throw InvalidDocumentationException("KDoc for rule $name must not contain tabs")
}
active = classOrObject.hasKDocTag(TAG_ACTIVE)
val activeTagContent = classOrObject.kDocSection()
?.findTagByName(TAG_ACTIVE)
?.getContent()
?.split(" ")
.orEmpty()
if (SINCE_KEYWORD in activeTagContent) {
activeSince = activeTagContent.last()
if (classOrObject.isAnnotatedWith(ActiveByDefault::class)) {
val activeByDefaultSinceValue = classOrObject.firstAnnotationParameter(ActiveByDefault::class)
defaultActivationStatus = Active(since = activeByDefaultSinceValue)
}
autoCorrect = classOrObject.hasKDocTag(TAG_AUTO_CORRECT)
@@ -202,8 +196,6 @@ internal class RuleVisitor : DetektVisitor() {
EmptyRule::class.simpleName
)
private const val TAG_ACTIVE = "active"
private const val SINCE_KEYWORD = "since"
private const val TAG_AUTO_CORRECT = "autoCorrect"
private const val TAG_NONCOMPLIANT = "<noncompliant>"
private const val ENDTAG_NONCOMPLIANT = "</noncompliant>"

View File

@@ -33,7 +33,7 @@ object ConfigPrinter : DocumentationPrinter<List<RuleSetPage>> {
@Suppress("ComplexMethod") // preserving the declarative structure while building the dsl
private fun YamlNode.printRuleSet(ruleSet: RuleSetProvider, rules: List<Rule>) {
node(ruleSet.name) {
keyValue { "active" to "${ruleSet.active}" }
keyValue { "active" to "${ruleSet.defaultActivationStatus.active}" }
val ruleSetExclusion = exclusions.singleOrNull { ruleSet.name in it.ruleSets }
if (ruleSetExclusion != null) {
keyValue { Config.EXCLUDES_KEY to ruleSetExclusion.pattern }
@@ -48,7 +48,7 @@ object ConfigPrinter : DocumentationPrinter<List<RuleSetPage>> {
}
rules.forEach { rule ->
node(rule.name) {
keyValue { Config.ACTIVE_KEY to "${rule.active}" }
keyValue { Config.ACTIVE_KEY to "${rule.defaultActivationStatus.active}" }
if (rule.autoCorrect) {
keyValue { Config.AUTO_CORRECT_KEY to "true" }
}

View File

@@ -1,5 +1,6 @@
package io.gitlab.arturbosch.detekt.generator.printer.rulesetpage
import io.gitlab.arturbosch.detekt.generator.collection.Active
import io.gitlab.arturbosch.detekt.generator.collection.Rule
import io.gitlab.arturbosch.detekt.generator.out.MarkdownContent
import io.gitlab.arturbosch.detekt.generator.out.bold
@@ -41,8 +42,8 @@ object RuleSetPagePrinter : DocumentationPrinter<RuleSetPage> {
}
paragraph {
"${bold { "Active by default" }}: ${if (rule.active) "Yes" else "No"}" +
(rule.activeSince?.let { " - Since $it" } ?: "")
"${bold { "Active by default" }}: ${if (rule.defaultActivationStatus.active) "Yes" else "No"}" +
((rule.defaultActivationStatus as? Active)?.let { " - Since v${it.since}" } ?: "")
}
if (rule.requiresTypeResolution) {

View File

@@ -75,7 +75,7 @@ class RuleCollectorSpec : Spek({
assertThat(items[0].description).contains("more...")
}
it("is not active") {
it("is not active by default") {
val code = """
/**
* description
@@ -83,45 +83,44 @@ class RuleCollectorSpec : Spek({
class SomeRandomClass : Rule
"""
val items = subject.run(code)
assertThat(items[0].active).isFalse()
assertThat(items[0].defaultActivationStatus.active).isFalse()
}
it("is active tag present") {
it("is active by default with valid version") {
val code = """
/**
* description
* @active
*/
@ActiveByDefault("1.12.123")
class SomeRandomClass : Rule
"""
val items = subject.run(code)
assertThat(items[0].active).isTrue()
val defaultActivationStatus = items[0].defaultActivationStatus as Active
assertThat(defaultActivationStatus.since).isEqualTo("1.12.123")
}
it("is active tag present with since") {
it("is active by default with named since") {
val code = """
/**
* description
* @active since v1.2.3
*/
@ActiveByDefault(since = "1.2.3")
class SomeRandomClass : Rule
"""
val items = subject.run(code)
assertThat(items[0].active).isTrue
assertThat(items[0].activeSince).isEqualTo("v1.2.3")
val defaultActivationStatus = items[0].defaultActivationStatus as Active
assertThat(defaultActivationStatus.since).isEqualTo("1.2.3")
}
it("is active tag present with since") {
it("is active by default with invalid version") {
val code = """
/**
* description
* @active whatever
*/
@ActiveByDefault("1.2.x")
class SomeRandomClass : Rule
"""
val items = subject.run(code)
assertThat(items[0].active).isTrue
assertThat(items[0].activeSince).isNull()
assertThatExceptionOfType(InvalidDocumentationException::class.java).isThrownBy { subject.run(code) }
}
it("is auto-correctable tag is present") {
@@ -136,18 +135,6 @@ class RuleCollectorSpec : Spek({
assertThat(items[0].autoCorrect).isTrue()
}
it("is active if the tag is there and has a description") {
val code = """
/**
* description
* @active description about the active tag
*/
class SomeRandomClass : Rule
"""
val items = subject.run(code)
assertThat(items[0].active).isTrue()
}
it("collects the issue property") {
val code = """
/**

View File

@@ -87,8 +87,9 @@ class RuleSetProviderCollectorSpec : Spek({
/**
* $description
*
* @active since v1.0.0
*
*/
@ActiveByDefault("1.0.0")
class TestProvider: RuleSetProvider {
override val ruleSetId: String = "$ruleSetId"
@@ -127,7 +128,7 @@ class RuleSetProviderCollectorSpec : Spek({
it("is active") {
val items = subject.run(code)
val provider = items[0]
assertThat(provider.active).isTrue()
assertThat(provider.defaultActivationStatus.active).isTrue()
}
}
@@ -155,7 +156,7 @@ class RuleSetProviderCollectorSpec : Spek({
it("is not active") {
val items = subject.run(code)
val provider = items[0]
assertThat(provider.active).isFalse()
assertThat(provider.defaultActivationStatus.active).isFalse()
}
}
@@ -206,6 +207,31 @@ class RuleSetProviderCollectorSpec : Spek({
}
}
context("a RuleSetProvider with invalid activation version") {
val code = """
package foo
/**
* description
*/
@ActiveByDefault(since = "1.2.xyz")
class TestProvider: RuleSetProvider {
override val ruleSetId: String = "ruleSetId"
override fun instance(config: Config): RuleSet {
return RuleSet(ruleSetId, listOf(
TestRule(config)
))
}
}
"""
it("throws an exception") {
assertThatExceptionOfType(InvalidDocumentationException::class.java)
.isThrownBy { subject.run(code) }
}
}
context("a RuleSetProvider with no rules") {
val ruleSetId = "test"
val code = """
@@ -236,9 +262,8 @@ class RuleSetProviderCollectorSpec : Spek({
/**
* $description
*
* @active since v1.0.0
*/
@ActiveByDefault("1.0.0")
class TestProvider: RuleSetProvider {
override val ruleSetId: String = "$ruleSetId"

View File

@@ -1,13 +1,15 @@
package io.gitlab.arturbosch.detekt.generator.util
import io.gitlab.arturbosch.detekt.generator.collection.Active
import io.gitlab.arturbosch.detekt.generator.collection.Configuration
import io.gitlab.arturbosch.detekt.generator.collection.Inactive
import io.gitlab.arturbosch.detekt.generator.collection.Rule
import io.gitlab.arturbosch.detekt.generator.collection.RuleSetProvider
import io.gitlab.arturbosch.detekt.generator.printer.rulesetpage.RuleSetPage
internal fun createRuleSetPage(): RuleSetPage {
val rules = createRules()
val ruleSetProvider = RuleSetProvider("style", "style rule set", true, rules.map { it.name })
val ruleSetProvider = RuleSetProvider("style", "style rule set", Active("1.0.0"), rules.map { it.name })
return RuleSetPage(ruleSetProvider, rules)
}
@@ -17,8 +19,7 @@ internal fun createRules(): List<Rule> {
description = "a wildcard import",
nonCompliantCodeExample = "import foo.*",
compliantCodeExample = "import foo.bar",
active = true,
activeSince = "v1.0.0",
defaultActivationStatus = Active(since = "1.0.0"),
severity = "Defect",
debt = "10min",
aliases = "alias1, alias2",
@@ -33,7 +34,7 @@ internal fun createRules(): List<Rule> {
description = "equals null",
nonCompliantCodeExample = "",
compliantCodeExample = "",
active = false,
defaultActivationStatus = Inactive,
severity = "",
debt = "",
aliases = null,
@@ -45,8 +46,7 @@ internal fun createRules(): List<Rule> {
description = "removes :Unit",
nonCompliantCodeExample = "fun stuff(): Unit {}",
compliantCodeExample = "fun stuff() {}",
active = true,
activeSince = "v1.16.0",
defaultActivationStatus = Active(since = "1.16.0"),
severity = "",
debt = "5m",
aliases = null,

View File

@@ -29,8 +29,6 @@ import java.util.Collections
* Adapted from Unbescape - https://github.com/unbescape/unbescape/
*
* Utility class for performing XML escape/unescape operations.
*
* @active since v1.0.0
*/
object XmlEscape {

View File

@@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdRule
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtDoWhileExpression
import org.jetbrains.kotlin.psi.KtExpression
@@ -37,9 +38,8 @@ import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
* </compliant>
*
* @configuration threshold - the number of conditions which will trigger the rule (default: `4`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ComplexCondition(
config: Config = Config.empty,
threshold: Int = DEFAULT_CONDITIONS_COUNT

View File

@@ -10,6 +10,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdRule
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.valueOrDefaultCommaSeparated
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtExpression
@@ -44,9 +45,8 @@ import org.jetbrains.kotlin.psi.KtWhenExpression
* `for` statement (default: `false`)
* @configuration nestingFunctions - Comma separated list of function names which add complexity
* (default: `[run, let, apply, with, also, use, forEach, isNotNull, ifNull]`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ComplexMethod(
config: Config = Config.empty,
threshold: Int = DEFAULT_THRESHOLD_METHOD_COMPLEXITY

View File

@@ -2,13 +2,13 @@ package io.gitlab.arturbosch.detekt.rules.complexity
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
/**
* This rule set contains rules that report complex code.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ComplexityProvider : DefaultRuleSetProvider {
override val ruleSetId: String = "complexity"

View File

@@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdRule
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
@@ -22,9 +23,8 @@ import java.util.IdentityHashMap
* things.
*
* @configuration threshold - the size of class required to trigger the rule (default: `600`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class LargeClass(
config: Config = Config.empty,
threshold: Int = DEFAULT_THRESHOLD_CLASS_LENGTH

View File

@@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdRule
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
@@ -22,9 +23,8 @@ import java.util.IdentityHashMap
* Extract parts of the functionality of long methods into separate, smaller methods.
*
* @configuration threshold - number of lines in a method to trigger the rule (default: `60`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class LongMethod(
config: Config = Config.empty,
threshold: Int = DEFAULT_THRESHOLD_METHOD_LENGTH

View File

@@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.valueOrDefaultCommaSeparated
import io.gitlab.arturbosch.detekt.rules.isOverride
import org.jetbrains.kotlin.psi.KtAnnotated
@@ -34,9 +35,8 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
* @configuration ignoreAnnotated - ignore long parameters list for constructors or functions in the context of these
* annotation class names (default: `[]`); (e.g. ['Inject', 'Module', 'Suppress']);
* the most common case is for dependency injection where constructors are annotated with @Inject.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class LongParameterList(
config: Config = Config.empty
) : Rule(config) {

View File

@@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdRule
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.isUsedForNesting
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtContainerNodeForControlStructureBody
@@ -26,9 +27,8 @@ import org.jetbrains.kotlin.psi.KtWhenExpression
* Prefer extracting the nested code into well-named functions to make it easier to understand.
*
* @configuration threshold - the nested depth required to trigger rule (default: `4`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class NestedBlockDepth(
config: Config = Config.empty,
threshold: Int = DEFAULT_THRESHOLD_NESTING

View File

@@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.api.Metric
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.hasAnnotation
import io.gitlab.arturbosch.detekt.rules.isOverride
import org.jetbrains.kotlin.psi.KtClass
@@ -32,9 +33,8 @@ import org.jetbrains.kotlin.psi.psiUtil.isPrivate
* @configuration ignoreDeprecated - ignore deprecated functions (default: `false`)
* @configuration ignorePrivate - ignore private functions (default: `false`)
* @configuration ignoreOverridden - ignore overridden functions (default: `false`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class TooManyFunctions(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -2,13 +2,13 @@ package io.gitlab.arturbosch.detekt.rules.coroutines
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
/**
* The coroutines rule set analyzes code for potential coroutines problems.
*
* @active since v1.4.0
*/
@ActiveByDefault(since = "1.4.0")
class CoroutinesProvider : DefaultRuleSetProvider {
override val ruleSetId: String = "coroutines"

View File

@@ -2,14 +2,14 @@ package io.gitlab.arturbosch.detekt.rules.documentation
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
/**
* This rule set provides rules that address issues in comments and documentation
* of the code.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class CommentSmellProvider : DefaultRuleSetProvider {
override val ruleSetId: String = "comments"

View File

@@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCatchClause
import org.jetbrains.kotlin.psi.KtClassInitializer
import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -25,10 +26,9 @@ import org.jetbrains.kotlin.psi.KtWhileExpression
* fun unnecessaryFunction() {
* }
* </noncompliant>
*
* @active since v1.0.0
*/
@Suppress("TooManyFunctions")
@ActiveByDefault(since = "1.0.0")
class EmptyBlocks(val config: Config = Config.empty) : MultiRule() {
private val emptyCatchBlock = EmptyCatchBlock(config)

View File

@@ -2,6 +2,7 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.LazyRegex
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.ALLOWED_EXCEPTION_NAME
import io.gitlab.arturbosch.detekt.rules.isAllowedExceptionName
import org.jetbrains.kotlin.psi.KtCatchClause
@@ -13,8 +14,8 @@ import org.jetbrains.kotlin.psi.KtCatchClause
*
* @configuration allowedExceptionNameRegex - ignores exception types which match this regex
* (default: `'_|(ignore|expected).*'`)
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyCatchBlock(config: Config) : EmptyRule(
config = config,
description =

View File

@@ -3,15 +3,15 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.hasCommentInside
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.isObjectLiteral
/**
* Reports empty classes. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyClassBlock(config: Config) : EmptyRule(config) {
override fun visitClassOrObject(classOrObject: KtClassOrObject) {

View File

@@ -2,14 +2,14 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
/**
* The empty-blocks ruleset contains rules that will report empty blocks of code
* which should be avoided.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyCodeProvider : DefaultRuleSetProvider {
override val ruleSetId: String = "empty-blocks"

View File

@@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtClass
@@ -13,9 +14,8 @@ import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType
/**
* Reports empty default constructors. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyDefaultConstructor(config: Config) : EmptyRule(config = config) {
override fun visitPrimaryConstructor(constructor: KtPrimaryConstructor) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtDoWhileExpression
/**
* Reports empty `do`/`while` loops. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyDoWhileBlock(config: Config) : EmptyRule(config) {
override fun visitDoWhileExpression(expression: KtDoWhileExpression) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtIfExpression
/**
* Reports empty `else` blocks. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyElseBlock(config: Config) : EmptyRule(config) {
override fun visitIfExpression(expression: KtIfExpression) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtFinallySection
/**
* Reports empty `finally` blocks. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyFinallyBlock(config: Config) : EmptyRule(config) {
override fun visitFinallySection(finallySection: KtFinallySection) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtForExpression
/**
* Reports empty `for` loops. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyForBlock(config: Config) : EmptyRule(config) {
override fun visitForExpression(expression: KtForExpression) {

View File

@@ -1,6 +1,7 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.isOpen
import io.gitlab.arturbosch.detekt.rules.isOverride
import org.jetbrains.kotlin.psi.KtClass
@@ -18,9 +19,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
* @configuration ignoreOverriddenFunctions - Excludes all the overridden functions (default: `false`)
* (deprecated: "Use `ignoreOverridden` instead")
* @configuration ignoreOverridden - Excludes all the overridden functions (default: `false`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyFunctionBlock(config: Config) : EmptyRule(config) {
private val ignoreOverridden =

View File

@@ -3,15 +3,15 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafPsiElement
import org.jetbrains.kotlin.lexer.KtSingleValueToken
import org.jetbrains.kotlin.psi.KtIfExpression
/**
* Reports empty `if` blocks. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyIfBlock(config: Config) : EmptyRule(config) {
override fun visitIfExpression(expression: KtIfExpression) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtClassInitializer
/**
* Reports empty `init` expressions. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyInitBlock(config: Config) : EmptyRule(config) {
override fun visitClassInitializer(initializer: KtClassInitializer) {

View File

@@ -3,13 +3,13 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtFile
/**
* Reports empty Kotlin (.kt) files. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyKtFile(config: Config) : EmptyRule(config) {
override fun visitKtFile(file: KtFile) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtSecondaryConstructor
/**
* Reports empty secondary constructors. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptySecondaryConstructor(config: Config) : EmptyRule(config) {
override fun visitSecondaryConstructor(constructor: KtSecondaryConstructor) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtTryExpression
/**
* Reports empty `try` blocks. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.6.0
*/
@ActiveByDefault(since = "1.6.0")
class EmptyTryBlock(config: Config) : EmptyRule(config) {
override fun visitTryExpression(expression: KtTryExpression) {

View File

@@ -3,13 +3,13 @@ package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtWhenExpression
/**
* Reports empty `when` expressions. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyWhenBlock(config: Config) : EmptyRule(config) {
override fun visitWhenExpression(expression: KtWhenExpression) {

View File

@@ -1,13 +1,13 @@
package io.gitlab.arturbosch.detekt.rules.empty
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtWhileExpression
/**
* Reports empty `while` expressions. Empty blocks of code serve no purpose and should be removed.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EmptyWhileBlock(config: Config) : EmptyRule(config) {
override fun visitWhileExpression(expression: KtWhileExpression) {

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtWhenExpression
/**
@@ -29,9 +30,8 @@ import org.jetbrains.kotlin.psi.KtWhenExpression
* else -> println("else")
* }
* </compliant>
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class DuplicateCaseInWhenExpression(config: Config) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.isEqualsFunction
import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
@@ -35,9 +36,8 @@ import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
* return this === other
* }
* </compliant>
*
* @active since v1.2.0
*/
@ActiveByDefault(since = "1.2.0")
class EqualsAlwaysReturnsTrueOrFalse(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.isEqualsFunction
import io.gitlab.arturbosch.detekt.rules.isHashCodeFunction
import org.jetbrains.kotlin.com.intellij.psi.PsiFile
@@ -43,9 +44,8 @@ import java.util.ArrayDeque
* }
* }
* </compliant>
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class EqualsWithHashCodeExist(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
import org.jetbrains.kotlin.psi.psiUtil.getCallNameExpression
@@ -22,9 +23,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression
* Runtime.getRuntime().gc()
* System.runFinalization()
* </noncompliant>
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ExplicitGarbageCollectionCall(config: Config) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.isStringOrNullableString
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
@@ -40,9 +41,8 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getType
* str.toUpperCase(Locale.US)
* str.toLowerCase(Locale.US)
* </compliant>
*
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class ImplicitDefaultLocale(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.getIntValueForPsiElement
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtBinaryExpression
@@ -30,9 +31,8 @@ import org.jetbrains.kotlin.psi.KtBinaryExpression
*
* val range = 2 until 3
* </compliant>
*
* @active since v1.2.0
*/
@ActiveByDefault(since = "1.2.0")
class InvalidRange(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -27,9 +28,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getSuperNames
* }
* }
* </noncompliant>
*
* @active since v1.2.0
*/
@ActiveByDefault(since = "1.2.0")
class IteratorHasNextCallsNextMethod(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -42,9 +43,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getSuperNames
* }
* }
* </compliant>
*
* @active since v1.2.0
*/
@ActiveByDefault(since = "1.2.0")
class IteratorNotThrowingNoSuchElementException(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.cfg.WhenChecker
import org.jetbrains.kotlin.cfg.WhenMissingCase
@@ -64,10 +65,8 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getType
* }
* </compliant>
* @configuration allowElseExpression - whether `else` can be treated as a valid case for enums and sealed classes (default: `true`)
*
* @active since v1.2.0
*
*/
@ActiveByDefault(since = "1.2.0")
@RequiresTypeResolution
class MissingWhenCase(config: Config = Config.empty) : Rule(config) {

View File

@@ -2,13 +2,13 @@ package io.gitlab.arturbosch.detekt.rules.bugs
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
/**
* The potential-bugs rule set provides rules that detect potential bugs.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class PotentialBugProvider : DefaultRuleSetProvider {
override val ruleSetId: String = "potential-bugs"

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.KtWhenExpression
@@ -56,10 +57,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
* }
* }
* </compliant>
*
* @active since v1.2.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.2.0")
class RedundantElseInWhen(config: Config = Config.empty) : Rule(config) {
override val issue: Issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.KtUnaryExpression
@@ -24,10 +25,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
* val a = 1
* val b = a
* </compliant>
*
* @active since v1.16.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.16.0")
class UnnecessaryNotNullOperator(config: Config = Config.empty) : Rule(config) {
override val issue: Issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafPsiElement
import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters1
@@ -29,10 +30,9 @@ import org.jetbrains.kotlin.types.ErrorType
* val a: String? = null
* val b = a?.length
* </compliant>
*
* @active since v1.16.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.16.0")
class UnnecessarySafeCall(config: Config = Config.empty) : Rule(config) {
override val issue: Issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.KtExpression
@@ -31,10 +32,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
* println() // unreachable
* }
* </noncompliant>
*
* @active since v1.0.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.0.0")
class UnreachableCode(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtPostfixExpression
@@ -31,10 +32,9 @@ import org.jetbrains.kotlin.types.typeUtil.nullability
* println(str?.length)
* }
* </compliant>
*
* @active since v1.2.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.2.0")
class UnsafeCallOnNullableType(config: Config = Config.empty) : Rule(config) {
override val issue: Issue = Issue(
"UnsafeCallOnNullableType",

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS
@@ -30,10 +31,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
* println(s as Int)
* }
* </compliant>
*
* @active since v1.16.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.16.0")
class UnsafeCast(config: Config = Config.empty) : Rule(config) {
override val defaultRuleIdAliases: Set<String> = setOf("UNCHECKED_CAST")

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.hasCorrectEqualsParameter
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -33,9 +34,8 @@ import org.jetbrains.kotlin.psi.KtNamedFunction
* }
* }
* </compliant>
*
* @active since v1.2.0
*/
@ActiveByDefault(since = "1.2.0")
class WrongEqualsTypeParameter(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.valueOrDefaultCommaSeparated
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -30,8 +31,8 @@ import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
*
* @configuration methodNames - methods which should not throw exceptions
* (default: `[toString, hashCode, equals, finalize]`)
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class ExceptionRaisedInUnexpectedLocation(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -2,13 +2,13 @@ package io.gitlab.arturbosch.detekt.rules.exceptions
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
/**
* Rules in this rule set report issues related to how code throws and handles Exceptions.
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ExceptionsProvider : DefaultRuleSetProvider {
override val ruleSetId: String = "exceptions"

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtCatchClause
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
@@ -43,9 +44,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression
* }
* }
* </compliant>
*
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class PrintStackTrace(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCatchClause
import org.jetbrains.kotlin.psi.KtThrowExpression
@@ -45,9 +46,8 @@ import org.jetbrains.kotlin.psi.KtThrowExpression
* }
* }
* </compliant>
*
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class RethrowCaughtException(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtFinallySection
@@ -39,9 +40,9 @@ import org.jetbrains.kotlin.types.KotlinType
* </noncompliant>
*
* @configuration ignoreLabeled - ignores labeled return statements (default: `false`)
* @active since v1.16.0
*/
@RequiresTypeResolution
@ActiveByDefault(since = "1.16.0")
class ReturnFromFinally(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.LazyRegex
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.valueOrDefaultCommaSeparated
import io.gitlab.arturbosch.detekt.rules.ALLOWED_EXCEPTION_NAME
import io.gitlab.arturbosch.detekt.rules.isAllowedExceptionName
@@ -75,8 +76,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
* - MalformedURLException`)
* @configuration allowedExceptionNameRegex - ignores too generic exception types which match this regex
* (default: `'_|(ignore|expected).*'`)
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class SwallowedException(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtFinallySection
import org.jetbrains.kotlin.psi.KtThrowExpression
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
@@ -24,8 +25,8 @@ import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
* }
* }
* </noncompliant>
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class ThrowingExceptionFromFinally(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.valueOrDefaultCommaSeparated
import org.jetbrains.kotlin.psi.KtCallExpression
@@ -38,8 +39,8 @@ import org.jetbrains.kotlin.psi.KtCallExpression
* (default: `- IllegalArgumentException
* - IllegalStateException
* - IOException`)
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class ThrowingExceptionsWithoutMessageOrCause(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtCatchClause
import org.jetbrains.kotlin.psi.KtThrowExpression
@@ -36,9 +37,8 @@ import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
* }
* }
* </compliant>
*
* @active since v1.16.0
*/
@ActiveByDefault(since = "1.16.0")
class ThrowingNewInstanceOfSameException(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

View File

@@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.LazyRegex
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.ALLOWED_EXCEPTION_NAME
import io.gitlab.arturbosch.detekt.rules.isAllowedExceptionName
import org.jetbrains.kotlin.psi.KtCatchClause
@@ -45,8 +46,8 @@ import org.jetbrains.kotlin.psi.KtTypeReference
* - Throwable`)
* @configuration allowedExceptionNameRegex - ignores too generic exception types which match this regex
* (default: `'_|(ignore|expected).*'`)
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class TooGenericExceptionCaught(config: Config) : Rule(config) {
override val issue = Issue(

View File

@@ -7,6 +7,7 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.psi.KtThrowExpression
import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
@@ -37,9 +38,8 @@ import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
* - Exception
* - Throwable
* - RuntimeException`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class TooGenericExceptionThrown(config: Config) : Rule(config) {
override val issue = Issue(

View File

@@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.LazyRegex
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.identifierName
import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -15,8 +16,8 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
* Reports when class or object names which do not follow the specified naming convention are used.
*
* @configuration classPattern - naming pattern (default: `'[A-Z][a-zA-Z0-9]*'`)
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ClassNaming(config: Config = Config.empty) : Rule(config) {
override val defaultRuleIdAliases: Set<String> = setOf("ClassName")

View File

@@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.LazyRegex
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.identifierName
import io.gitlab.arturbosch.detekt.rules.isOverride
import io.gitlab.arturbosch.detekt.rules.naming.util.isContainingExcludedClassOrObject
@@ -21,9 +22,8 @@ import org.jetbrains.kotlin.psi.psiUtil.isPrivate
* @configuration privateParameterPattern - naming pattern (default: `'[a-z][A-Za-z0-9]*'`)
* @configuration excludeClassPattern - ignores variables in classes which match this regex (default: `'$^'`)
* @configuration ignoreOverridden - ignores constructor properties that have the override modifier (default: `true`)
*
* @active since v1.0.0
*/
@ActiveByDefault(since = "1.0.0")
class ConstructorParameterNaming(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(

Some files were not shown because too many files have changed in this diff Show More