From da7a73d427a7281888e35b1486fb0bd34b7d5785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Tue, 16 Aug 2022 21:18:08 +0200 Subject: [PATCH] Warn about enabled rules that are not going to run --- .../gitlab/arturbosch/detekt/core/Analyzer.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt index d469dadcf86a..74d3ce84c4a6 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt @@ -8,6 +8,7 @@ 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.RuleSet import io.gitlab.arturbosch.detekt.api.RuleSetId import io.gitlab.arturbosch.detekt.api.RuleSetProvider import io.gitlab.arturbosch.detekt.api.internal.CompilerResources @@ -47,6 +48,9 @@ internal class Analyzer( @Suppress("DEPRECATION") val dataFlowValueFactory = DataFlowValueFactoryImpl(languageVersionSettings) val compilerResources = CompilerResources(languageVersionSettings, dataFlowValueFactory) + if (bindingContext == BindingContext.EMPTY) { + warnAboutEnabledRequiresTypeResolutionRules(settings::info) + } val findingsPerFile: FindingsResult = if (settings.spec.executionSpec.parallelAnalysis) { runAsync(ktFiles, bindingContext, compilerResources) @@ -187,3 +191,16 @@ internal fun ProcessingSpec.workaroundConfiguration(config: Config): Config = wi return declaredConfig ?: getDefaultConfiguration() } + +private fun warnAboutEnabledRequiresTypeResolutionRules(log: (String) -> Unit) { + providers.asSequence() + .map { it to config.subConfig(it.ruleSetId) } + .filter { (_, ruleSetConfig) -> ruleSetConfig.isActive() } + .map { (provider, ruleSetConfig) -> provider.instance(ruleSetConfig) to ruleSetConfig } + .flatMap { (ruleSet, _) -> ruleSet.rules.asSequence() } + .filter { rule -> (rule as? Rule)?.active == true } + .filter { rule -> rule::class.hasAnnotation() } + .forEach { rule -> + log("The rule '${rule.ruleId}' requires type resolution but it was run without it.") + } +}