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 Jan 11, 2024
1 parent 3f7a17f commit 159ff67
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 104 deletions.
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,9 +1,7 @@
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.CompilerResources
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.RequiresTypeResolution
Expand All @@ -13,16 +11,10 @@ import io.gitlab.arturbosch.detekt.api.RuleSetProvider
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.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.rules.isActive
import io.gitlab.arturbosch.detekt.core.rules.shouldAnalyzeFile
import io.gitlab.arturbosch.detekt.core.suppressors.buildSuppressors
import io.gitlab.arturbosch.detekt.core.tooling.getDefaultConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
Expand All @@ -36,9 +28,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 @@ -102,7 +91,7 @@ internal class Analyzer(
compilerResources: CompilerResources
): Map<RuleSetId, List<Finding>> {
val activeRuleSetsToRuleSetConfigs = providers.asSequence()
.map { it to config.subConfig(it.ruleSetId) }
.map { it to settings.config.subConfig(it.ruleSetId) }
.filter { (_, ruleSetConfig) -> ruleSetConfig.isActive(true) }
.map { (provider, ruleSetConfig) -> provider.instance() to ruleSetConfig }
.filter { (_, ruleSetConfig) -> ruleSetConfig.shouldAnalyzeFile(file) }
Expand Down Expand Up @@ -149,7 +138,7 @@ internal class Analyzer(

private fun warnAboutEnabledRequiresTypeResolutionRules() {
providers.asSequence()
.map { it to config.subConfig(it.ruleSetId) }
.map { it to settings.config.subConfig(it.ruleSetId) }
.filter { (_, ruleSetConfig) -> ruleSetConfig.isActive(true) }
.map { (provider, ruleSetConfig) -> provider.instance() to ruleSetConfig }
.flatMap { (ruleSet, ruleSetConfig) ->
Expand Down Expand Up @@ -191,22 +180,3 @@ private fun throwIllegalStateException(file: KtFile, error: Throwable): Nothing
""".trimIndent()
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
}
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.

@@ -1,4 +1,4 @@
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
Expand All @@ -18,7 +18,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 +43,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 +71,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 +95,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 +119,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 +149,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 159ff67

Please sign in to comment.