Skip to content

Commit

Permalink
Move code away from Analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
BraisGabin committed Mar 14, 2024
1 parent eda8335 commit dba30b0
Show file tree
Hide file tree
Showing 9 changed files with 38 additions and 106 deletions.
1 change: 0 additions & 1 deletion detekt-api/api/detekt-api.api
Expand Up @@ -363,7 +363,6 @@ public abstract interface class io/gitlab/arturbosch/detekt/api/RuleSetProvider
}

public abstract interface class io/gitlab/arturbosch/detekt/api/SetupContext : io/gitlab/arturbosch/detekt/api/PropertiesAware {
public abstract fun getBaseConfig ()Lio/gitlab/arturbosch/detekt/api/Config;
public abstract fun getConfig ()Lio/gitlab/arturbosch/detekt/api/Config;
public abstract fun getConfigUris ()Ljava/util/Collection;
public abstract fun getErrorChannel ()Ljava/lang/Appendable;
Expand Down
Expand Up @@ -16,11 +16,6 @@ interface SetupContext : PropertiesAware {
*/
val config: Config

/**
* Configuration which is used to set up detekt without default config behind
*/
val baseConfig: Config

/**
* The channel to log all the output.
*/
Expand Down
Expand Up @@ -7,7 +7,6 @@ import java.net.URI
class EmptySetupContext : SetupContext {
override val configUris: Collection<URI> = emptyList()
override val config: Config = Config.empty
override val baseConfig: Config = Config.empty
override val outputChannel: Appendable = StringBuilder()
override val errorChannel: Appendable = StringBuilder()
override val properties: MutableMap<String, Any?> = HashMap()
Expand Down
@@ -1,7 +1,6 @@
package io.gitlab.arturbosch.detekt.core

import io.github.detekt.psi.absolutePath
import io.github.detekt.tooling.api.spec.ProcessingSpec
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.CompilerResources
import io.gitlab.arturbosch.detekt.api.Config
Expand All @@ -20,14 +19,8 @@ import io.gitlab.arturbosch.detekt.api.internal.whichDetekt
import io.gitlab.arturbosch.detekt.api.internal.whichJava
import io.gitlab.arturbosch.detekt.api.internal.whichOS
import io.gitlab.arturbosch.detekt.api.ruleId
import io.gitlab.arturbosch.detekt.core.config.AllRulesConfig
import io.gitlab.arturbosch.detekt.core.config.CompositeConfig
import io.gitlab.arturbosch.detekt.core.config.DisabledAutoCorrectConfig
import io.gitlab.arturbosch.detekt.core.config.validation.DeprecatedRule
import io.gitlab.arturbosch.detekt.core.config.validation.loadDeprecations
import io.gitlab.arturbosch.detekt.core.rules.associateRuleIdsToRuleSetIds
import io.gitlab.arturbosch.detekt.core.suppressors.buildSuppressors
import io.gitlab.arturbosch.detekt.core.tooling.getDefaultConfiguration
import io.gitlab.arturbosch.detekt.core.util.isActiveOrDefault
import io.gitlab.arturbosch.detekt.core.util.shouldAnalyzeFile
import org.jetbrains.kotlin.config.languageVersionSettings
Expand All @@ -43,9 +36,6 @@ internal class Analyzer(
private val providers: List<RuleSetProvider>,
private val processors: List<FileProcessListener>
) {

private val config: Config = settings.spec.workaroundConfiguration(settings.baseConfig)

fun run(
ktFiles: Collection<KtFile>,
bindingContext: BindingContext = BindingContext.EMPTY
Expand Down Expand Up @@ -109,7 +99,7 @@ internal class Analyzer(
compilerResources: CompilerResources
): Map<RuleSet.Id, List<Finding2>> {
val activeRuleSetsToRuleSetConfigs = providers.asSequence()
.map { it to config.subConfig(it.ruleSetId.value) }
.map { it to settings.config.subConfig(it.ruleSetId.value) }
.filter { (_, ruleSetConfig) -> ruleSetConfig.isActiveOrDefault(true) }
.map { (provider, ruleSetConfig) -> provider.instance() to ruleSetConfig }
.filter { (_, ruleSetConfig) -> ruleSetConfig.shouldAnalyzeFile(file) }
Expand Down Expand Up @@ -158,7 +148,7 @@ internal class Analyzer(

private fun warnAboutEnabledRequiresTypeResolutionRules() {
providers.asSequence()
.map { it to config.subConfig(it.ruleSetId.value) }
.map { it to settings.config.subConfig(it.ruleSetId.value) }
.filter { (_, ruleSetConfig) -> ruleSetConfig.isActiveOrDefault(true) }
.map { (provider, ruleSetConfig) -> provider.instance() to ruleSetConfig }
.flatMap { (ruleSet, ruleSetConfig) ->
Expand Down Expand Up @@ -201,25 +191,6 @@ private fun throwIllegalStateException(file: KtFile, error: Throwable): Nothing
throw IllegalStateException(message, error)
}

internal fun ProcessingSpec.workaroundConfiguration(config: Config): Config {
var declaredConfig: Config = config

if (rulesSpec.activateAllRules) {
val deprecatedRules = loadDeprecations().filterIsInstance<DeprecatedRule>().toSet()
declaredConfig = AllRulesConfig(declaredConfig, deprecatedRules)
}

if (!rulesSpec.autoCorrect) {
declaredConfig = DisabledAutoCorrectConfig(declaredConfig)
}

if (configSpec.useDefaultConfig) {
declaredConfig = CompositeConfig(declaredConfig, getDefaultConfiguration())
}

return declaredConfig
}

private fun Finding.toFinding2(rule: Finding2.RuleInfo, severity: Severity): Finding2 {
return when (this) {
is CorrectableCodeSmell -> Finding2Impl(rule, entity, message, references, severity, autoCorrectEnabled)
Expand Down
Expand Up @@ -4,7 +4,6 @@ import io.github.detekt.tooling.api.spec.ProcessingSpec
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.PropertiesAware
import io.gitlab.arturbosch.detekt.api.SetupContext
import io.gitlab.arturbosch.detekt.core.config.CompositeConfig
import io.gitlab.arturbosch.detekt.core.config.extractUris
import io.gitlab.arturbosch.detekt.core.settings.ClassloaderAware
import io.gitlab.arturbosch.detekt.core.settings.EnvironmentAware
Expand All @@ -13,7 +12,6 @@ import io.gitlab.arturbosch.detekt.core.settings.ExtensionFacade
import io.gitlab.arturbosch.detekt.core.settings.LoggingAware
import io.gitlab.arturbosch.detekt.core.settings.LoggingFacade
import io.gitlab.arturbosch.detekt.core.settings.PropertiesFacade
import io.gitlab.arturbosch.detekt.core.tooling.getDefaultConfiguration
import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer
import org.jetbrains.kotlin.utils.closeQuietly
import java.io.Closeable
Expand All @@ -27,7 +25,7 @@ import java.net.URI
*/
class ProcessingSettings(
val spec: ProcessingSpec,
override val baseConfig: Config,
override val config: Config,
) : AutoCloseable,
Closeable,
LoggingAware by LoggingFacade(spec.loggingSpec),
Expand All @@ -37,12 +35,6 @@ class ProcessingSettings(
SetupContext {

override val configUris: Collection<URI> = spec.configSpec.extractUris()
override val config: Config
get() = if (spec.configSpec.useDefaultConfig) {
CompositeConfig(baseConfig, spec.getDefaultConfiguration())
} else {
baseConfig
}

/**
* Sharable thread pool between parsing and analysis phase.
Expand Down
@@ -1,10 +1,16 @@
package io.gitlab.arturbosch.detekt.core.tooling

import io.github.detekt.tooling.api.spec.ProcessingSpec
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.core.ProcessingSettings
import io.gitlab.arturbosch.detekt.core.baseline.DETEKT_BASELINE_CREATION_KEY
import io.gitlab.arturbosch.detekt.core.baseline.DETEKT_BASELINE_PATH_KEY
import io.gitlab.arturbosch.detekt.core.config.AllRulesConfig
import io.gitlab.arturbosch.detekt.core.config.CompositeConfig
import io.gitlab.arturbosch.detekt.core.config.DisabledAutoCorrectConfig
import io.gitlab.arturbosch.detekt.core.config.loadConfiguration
import io.gitlab.arturbosch.detekt.core.config.validation.DeprecatedRule
import io.gitlab.arturbosch.detekt.core.config.validation.loadDeprecations
import io.gitlab.arturbosch.detekt.core.reporting.DETEKT_OUTPUT_REPORT_BASE_PATH_KEY
import io.gitlab.arturbosch.detekt.core.reporting.DETEKT_OUTPUT_REPORT_PATHS_KEY
import io.gitlab.arturbosch.detekt.core.util.MONITOR_PROPERTY_KEY
Expand All @@ -13,7 +19,9 @@ import io.gitlab.arturbosch.detekt.core.util.PerformanceMonitor.Phase

internal fun <R> ProcessingSpec.withSettings(execute: ProcessingSettings.() -> R): R {
val monitor = PerformanceMonitor()
val configuration = monitor.measure(Phase.LoadConfig) { loadConfiguration() }
val configuration = monitor.measure(Phase.LoadConfig) {
workaroundConfiguration(loadConfiguration())
}
val settings = monitor.measure(Phase.CreateSettings) {
ProcessingSettings(this, configuration).apply {
baselineSpec.path?.let { register(DETEKT_BASELINE_PATH_KEY, it) }
Expand All @@ -31,3 +39,22 @@ internal fun <R> ProcessingSpec.withSettings(execute: ProcessingSettings.() -> R
}
return result
}

internal fun ProcessingSpec.workaroundConfiguration(config: Config): Config {
var declaredConfig: Config = config

if (rulesSpec.activateAllRules) {
val deprecatedRules = loadDeprecations().filterIsInstance<DeprecatedRule>().toSet()
declaredConfig = AllRulesConfig(declaredConfig, deprecatedRules)
}

if (!rulesSpec.autoCorrect) {
declaredConfig = DisabledAutoCorrectConfig(declaredConfig)
}

if (configSpec.useDefaultConfig) {
declaredConfig = CompositeConfig(declaredConfig, getDefaultConfiguration())
}

return declaredConfig
}

This file was deleted.

Expand Up @@ -119,7 +119,6 @@ private fun resultMapping(baselineFile: Path?, createBaseline: Boolean?) =
init(object : SetupContext {
override val configUris: Collection<URI> = emptyList()
override val config: Config = Config.empty
override val baseConfig: Config = Config.empty
override val outputChannel: PrintStream = NullPrintStream()
override val errorChannel: PrintStream = NullPrintStream()
override val properties: MutableMap<String, Any?> = mutableMapOf(
Expand Down
@@ -1,8 +1,7 @@
package io.gitlab.arturbosch.detekt.core
package io.gitlab.arturbosch.detekt.core.tooling

import io.github.detekt.test.utils.resourceUrl
import io.github.detekt.tooling.api.spec.ProcessingSpec
import io.gitlab.arturbosch.detekt.core.tooling.withSettings
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
Expand All @@ -18,7 +17,7 @@ class WorkaroundConfigurationKtSpec {
useDefaultConfig = true
}
rules { activateAllRules = true }
}.withSettings { spec.workaroundConfiguration(baseConfig) }
}.withSettings { spec.workaroundConfiguration(config) }

@Test
fun `should override active to true by default`() {
Expand All @@ -43,7 +42,7 @@ class WorkaroundConfigurationKtSpec {
private val config = ProcessingSpec {
config { resources = listOf(resourceUrl("/configs/activate-all-rules-will-override-here.yml")) }
rules { activateAllRules = true }
}.withSettings { spec.workaroundConfiguration(baseConfig) }
}.withSettings { spec.workaroundConfiguration(config) }

@Test
fun `should override config when specified`() {
Expand Down Expand Up @@ -71,7 +70,7 @@ class WorkaroundConfigurationKtSpec {
private val config = ProcessingSpec {
config { resources = listOf(resourceUrl("/configs/config-with-auto-correct.yml")) }
rules { autoCorrect = true }
}.withSettings { spec.workaroundConfiguration(baseConfig) }
}.withSettings { spec.workaroundConfiguration(config) }

private val style = config.subConfig("style")
private val comments = config.subConfig("comments")
Expand All @@ -95,7 +94,7 @@ class WorkaroundConfigurationKtSpec {
inner class `when not specified all autoCorrect values are overridden to false` {
private val config = ProcessingSpec {
config { resources = listOf(resourceUrl("/configs/config-with-auto-correct.yml")) }
}.withSettings { spec.workaroundConfiguration(baseConfig) }
}.withSettings { spec.workaroundConfiguration(config) }
private val style = config.subConfig("style")
private val comments = config.subConfig("comments")

Expand All @@ -119,7 +118,7 @@ class WorkaroundConfigurationKtSpec {
private val config = ProcessingSpec {
config { resources = listOf(resourceUrl("/configs/config-with-auto-correct.yml")) }
rules { autoCorrect = false }
}.withSettings { spec.workaroundConfiguration(baseConfig) }
}.withSettings { spec.workaroundConfiguration(config) }
private val style = config.subConfig("style")
private val comments = config.subConfig("comments")

Expand Down Expand Up @@ -149,7 +148,7 @@ class WorkaroundConfigurationKtSpec {
autoCorrect = false
activateAllRules = true
}
}.withSettings { spec.workaroundConfiguration(baseConfig) }
}.withSettings { spec.workaroundConfiguration(config) }

private val style = config.subConfig("style")
private val comments = config.subConfig("comments")
Expand Down

0 comments on commit dba30b0

Please sign in to comment.