Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mark MultiRule as deprecated #5161

Merged
merged 5 commits into from Aug 7, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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 }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this intended that we want to use the full qualified name for MultiRule?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any other way (besides suppressing deprecation warning for the entire file) to avoid the build to fail because of a deprecated import?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is not as far as I know. It would be really good to know if there is any other way.

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 @@ -320,7 +319,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,7 +21,7 @@ data class MultiRule(
operator fun contains(ruleName: String) = ruleName in this.rules
}

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

class MultiRuleCollector : Collector<MultiRule> {
override val items = mutableListOf<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
@@ -1,10 +1,11 @@
package io.gitlab.arturbosch.detekt.rules.style

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

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

private val maxLineLength = MaxLineLength(config)
private val trailingWhitespace = TrailingWhitespace(config)
Expand Down