Skip to content

Commit

Permalink
Mark MultiRule as deprecated (#5161)
Browse files Browse the repository at this point in the history
* Deprecate MultiRule

* add more suppressions

* fix merge error

Co-authored-by: Markus Schwarz <post@markus-schwarz.net>
  • Loading branch information
marschwar and Markus Schwarz committed Aug 7, 2022
1 parent cdd2d71 commit 0d42e58
Show file tree
Hide file tree
Showing 14 changed files with 41 additions and 25 deletions.
Expand Up @@ -7,6 +7,7 @@ import org.jetbrains.kotlin.psi.KtFile
* Can be used to combine different rules which do similar work like
* scanning the source code line by line to increase performance.
*/
@Deprecated("multi rules are much more difficult to maintain and support will be removed in the future")
abstract class MultiRule : BaseRule() {

abstract val rules: List<Rule>
Expand Down
Expand Up @@ -6,7 +6,6 @@ import io.gitlab.arturbosch.detekt.api.BaseRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.FileProcessListener
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.RuleSetId
import io.gitlab.arturbosch.detekt.api.RuleSetProvider
Expand Down Expand Up @@ -95,9 +94,10 @@ internal class Analyzer(
bindingContext: BindingContext,
compilerResources: CompilerResources
): Map<RuleSetId, List<Finding>> {
@Suppress("DEPRECATION")
fun isCorrectable(rule: BaseRule): Boolean = when (rule) {
is Rule -> rule.autoCorrect
is MultiRule -> rule.rules.any { it.autoCorrect }
is io.gitlab.arturbosch.detekt.api.MultiRule -> rule.rules.any { it.autoCorrect }
else -> error("No other rule type expected.")
}

Expand Down
Expand Up @@ -5,7 +5,6 @@ import io.github.detekt.tooling.api.spec.RulesSpec
import io.gitlab.arturbosch.detekt.api.BaseRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.RuleId
import io.gitlab.arturbosch.detekt.api.RuleSet
Expand Down Expand Up @@ -35,7 +34,8 @@ fun RuleSet.visitFile(

fun associateRuleIdsToRuleSetIds(ruleSets: Sequence<RuleSet>): Map<RuleId, RuleSetId> {
fun extractIds(rule: BaseRule) =
if (rule is MultiRule) {
@Suppress("DEPRECATION")
if (rule is io.gitlab.arturbosch.detekt.api.MultiRule) {
rule.rules.asSequence().map(Rule::ruleId)
} else {
sequenceOf(rule.ruleId)
Expand Down
Expand Up @@ -3,7 +3,6 @@ package io.gitlab.arturbosch.detekt.core.suppressors
import io.gitlab.arturbosch.detekt.api.BaseRule
import io.gitlab.arturbosch.detekt.api.ConfigAware
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import org.jetbrains.kotlin.resolve.BindingContext

Expand All @@ -22,8 +21,9 @@ private fun buildSuppressors(rule: ConfigAware, bindingContext: BindingContext):
}

internal fun getSuppressors(rule: BaseRule, bindingContext: BindingContext): List<Suppressor> {
@Suppress("DEPRECATION")
return when (rule) {
is MultiRule -> rule.rules.flatMap { innerRule ->
is io.gitlab.arturbosch.detekt.api.MultiRule -> rule.rules.flatMap { innerRule ->
buildSuppressors(innerRule, bindingContext).map { suppressor -> InnerSuppressor(innerRule, suppressor) }
}
is ConfigAware -> buildSuppressors(rule, bindingContext)
Expand Down
Expand Up @@ -9,7 +9,6 @@ import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Location
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.Severity
Expand Down Expand Up @@ -283,6 +282,7 @@ class SuppressionSpec {
@Nested
inner class `MultiRule` {
@Suppress("DEPRECATION")
private lateinit var subject: io.gitlab.arturbosch.detekt.api.MultiRule
@BeforeEach
Expand Down Expand Up @@ -320,7 +320,9 @@ private fun isSuppressedBy(annotation: String, argument: String): Boolean {
return annotatedClass.isSuppressedBy("Test", setOf("alias"))
}
private class AMultiRule(config: Config) : MultiRule() {
private class AMultiRule(config: Config) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {
override val rules: List<Rule> = listOf(TestLPL(config))
}
Expand Down
Expand Up @@ -7,7 +7,6 @@ import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.RuleSet
import io.gitlab.arturbosch.detekt.api.RuleSetProvider
Expand Down Expand Up @@ -70,7 +69,9 @@ private class MultiRuleProvider : RuleSetProvider {
override fun instance(config: Config): RuleSet = RuleSet(ruleSetId, listOf(TestMultiRule(config)))
}

private class TestMultiRule(config: Config) : MultiRule() {
private class TestMultiRule(config: Config) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {

private val one = TestRuleOne(config)
private val two = TestRuleTwo(config)
Expand Down
Expand Up @@ -6,7 +6,6 @@ import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.test.TestConfig
Expand Down Expand Up @@ -79,7 +78,9 @@ class SuppressorsSpec {
}
}

private class AMultiRule(config: Config) : MultiRule() {
private class AMultiRule(config: Config) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {
override val rules: List<Rule> = listOf(ARule(config))
}

Expand Down
@@ -1,7 +1,6 @@
package io.gitlab.arturbosch.detekt.formatting

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.formatting.wrappers.AnnotationOnSeparateLine
import io.gitlab.arturbosch.detekt.formatting.wrappers.AnnotationSpacing
Expand Down Expand Up @@ -65,7 +64,9 @@ import java.util.LinkedList
/**
* Runs all KtLint rules.
*/
class KtLintMultiRule(config: Config = Config.empty) : MultiRule() {
class KtLintMultiRule(config: Config = Config.empty) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {

override val rules: List<Rule> = listOf(
// Wrappers for ktlint-ruleset-standard rules. Enabled by default.
Expand Down
Expand Up @@ -21,6 +21,7 @@ data class MultiRule(
operator fun contains(ruleName: String) = ruleName in this.rules
}

@Suppress("DEPRECATION")
private val multiRule = io.gitlab.arturbosch.detekt.api.MultiRule::class.simpleName.orEmpty()

class MultiRuleCollector : Collector<MultiRule> {
Expand Down
Expand Up @@ -3,7 +3,6 @@ package io.github.detekt.report.sarif
import io.github.detekt.sarif4k.MultiformatMessageString
import io.github.detekt.sarif4k.ReportingDescriptor
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.RuleSetId
import io.gitlab.arturbosch.detekt.api.RuleSetProvider
Expand All @@ -24,15 +23,21 @@ internal fun toReportingDescriptors(config: Config): List<ReportingDescriptor> {
}
val descriptors = mutableListOf<ReportingDescriptor>()
ruleSetIdAndRules.forEach { (ruleSetId, rule) ->
@Suppress("DEPRECATION")
when (rule) {
is MultiRule -> descriptors.addAll(rule.toDescriptors(ruleSetId))
is io.gitlab.arturbosch.detekt.api.MultiRule -> descriptors.addAll(
rule.toDescriptors(
ruleSetId
)
)
is Rule -> descriptors.add(rule.toDescriptor(ruleSetId))
}
}
return descriptors
}

private fun MultiRule.toDescriptors(ruleSetId: RuleSetId): List<ReportingDescriptor> =
@Suppress("DEPRECATION")
private fun io.gitlab.arturbosch.detekt.api.MultiRule.toDescriptors(ruleSetId: RuleSetId): List<ReportingDescriptor> =
this.rules.map { it.toDescriptor(ruleSetId) }

private fun Rule.toDescriptor(ruleSetId: RuleSetId): ReportingDescriptor {
Expand Down
@@ -1,10 +1,11 @@
package io.gitlab.arturbosch.detekt.rules.documentation

import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.MultiRule
import org.jetbrains.kotlin.psi.KtDeclaration

class KDocStyle(config: Config = Config.empty) : MultiRule() {
class KDocStyle(config: Config = Config.empty) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {

private val deprecatedBlockTag = DeprecatedBlockTag(config)
private val endOfSentenceFormat = EndOfSentenceFormat(config)
Expand Down
@@ -1,7 +1,6 @@
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
Expand Down Expand Up @@ -29,7 +28,9 @@ import org.jetbrains.kotlin.psi.KtWhileExpression
*/
@Suppress("TooManyFunctions")
@ActiveByDefault(since = "1.0.0")
class EmptyBlocks(val config: Config = Config.empty) : MultiRule() {
class EmptyBlocks(val config: Config = Config.empty) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {

private val emptyCatchBlock = EmptyCatchBlock(config)
private val emptyClassBlock = EmptyClassBlock(config)
Expand Down
@@ -1,7 +1,6 @@
package io.gitlab.arturbosch.detekt.rules.naming

import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.MultiRule
import io.gitlab.arturbosch.detekt.api.Rule
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtConstructor
Expand All @@ -16,7 +15,9 @@ import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.KtVariableDeclaration
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType

class NamingRules(config: Config = Config.empty) : MultiRule() {
class NamingRules(config: Config = Config.empty) :
@Suppress("DEPRECATION")
io.gitlab.arturbosch.detekt.api.MultiRule() {

private val variableNamingRule = VariableNaming(config)
private val variableMinNameLengthRule = VariableMinLength(config)
Expand Down
Expand Up @@ -2,7 +2,6 @@ package io.gitlab.arturbosch.detekt.rules

import io.gitlab.arturbosch.detekt.api.BaseRule
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.RuleSetProvider
import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider
Expand Down Expand Up @@ -63,7 +62,9 @@ private fun getRulesPackageNameForProvider(providerType: Class<out RuleSetProvid

private fun getRules(provider: RuleSetProvider): List<BaseRule> {
val ruleSet = provider.instance(Config.empty)
val rules = ruleSet.rules.flatMap { (it as? MultiRule)?.rules ?: listOf(it) }

@Suppress("DEPRECATION")
val rules = ruleSet.rules.flatMap { (it as? io.gitlab.arturbosch.detekt.api.MultiRule)?.rules ?: listOf(it) }
assertThat(rules).isNotEmpty
return rules
}
Expand Down

0 comments on commit 0d42e58

Please sign in to comment.