From b2d6f108779c0fb7894dda79287ba497f8918ae7 Mon Sep 17 00:00:00 2001 From: Brais Date: Thu, 2 Dec 2021 00:46:41 +0100 Subject: [PATCH] Concat configurations --- .../core/tooling/DefaultConfigProvider.kt | 36 +++++++++++---- .../core/tooling/DefaultConfigProviderSpec.kt | 42 +++++++++++++++++- .../src/test/resources/sample-rule-set.jar | Bin 22127 -> 27139 bytes .../src/main/resources/config/config.yml | 5 +++ 4 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 detekt-sample-extensions/src/main/resources/config/config.yml diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt index 97eebf8b1b5..94719bee848 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt @@ -2,10 +2,13 @@ package io.gitlab.arturbosch.detekt.core.tooling import io.github.detekt.tooling.api.DefaultConfigurationProvider import io.github.detekt.tooling.api.spec.ProcessingSpec -import io.github.detekt.utils.getSafeResourceAsStream import io.github.detekt.utils.openSafeStream import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.core.config.YamlConfig +import io.gitlab.arturbosch.detekt.core.settings.ExtensionFacade +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream +import java.io.InputStream import java.nio.file.Files import java.nio.file.Path import java.nio.file.StandardCopyOption @@ -20,15 +23,32 @@ class DefaultConfigProvider : DefaultConfigurationProvider { override fun get(): Config = spec.getDefaultConfiguration() override fun copy(targetLocation: Path) { - val configUrl = javaClass.getResource(DEFAULT_CONFIG_RESOURCES_PATH)!! - Files.copy(configUrl.openSafeStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING) + Files.copy(configInputStream(spec), targetLocation, StandardCopyOption.REPLACE_EXISTING) } } -fun ProcessingSpec.getDefaultConfiguration(): Config { - return requireNotNull(javaClass.getSafeResourceAsStream(DEFAULT_CONFIG_RESOURCES_PATH)) - .reader() - .use(YamlConfig::load) +private fun configInputStream(spec: ProcessingSpec): InputStream { + val outputStream = ByteArrayOutputStream() + + requireNotNull(spec.javaClass.getResourceAsStream("/default-detekt-config.yml")) + .use { it.copyTo(outputStream) } + + ExtensionFacade(spec.extensionsSpec).pluginLoader + .getResourcesAsStream("config/config.yml") + .forEach { inputStream -> + outputStream.bufferedWriter().append('\n').flush() + inputStream.use { it.copyTo(outputStream) } + } + + return ByteArrayInputStream(outputStream.toByteArray()) } -private const val DEFAULT_CONFIG_RESOURCES_PATH = "/default-detekt-config.yml" +private fun ClassLoader.getResourcesAsStream(name: String): Sequence { + return getResources(name) + .asSequence() + .map { it.openSafeStream() } +} + +fun ProcessingSpec.getDefaultConfiguration(): Config { + return YamlConfig.load(configInputStream(this).reader()) +} diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProviderSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProviderSpec.kt index e9d032c53ae..c59c0cc4e6b 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProviderSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProviderSpec.kt @@ -6,10 +6,10 @@ import io.gitlab.arturbosch.detekt.core.createNullLoggingSpec import org.assertj.core.api.Assertions.assertThat import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe +import java.nio.file.Files internal class DefaultConfigProviderSpec : Spek({ - - describe("defaultConfigProvider") { + describe("defaultConfigProvider without plugins") { val spec by memoized { createNullLoggingSpec {} } @@ -19,6 +19,7 @@ internal class DefaultConfigProviderSpec : Spek({ assertThat(config.parentPath).isNull() assertThat(config.subConfig("build").valueOrNull("maxIssues")).isEqualTo(0) + assertThat(config.valueOrNull("sample")).isNull() } it("copy") { @@ -29,4 +30,41 @@ internal class DefaultConfigProviderSpec : Spek({ .hasSameTextualContentAs(resourceAsPath("default-detekt-config.yml")) } } + + describe("defaultConfigProvider without plugins") { + val spec by memoized { + createNullLoggingSpec { + extensions { + fromPaths { listOf(resourceAsPath("sample-rule-set.jar")) } + } + } + } + + it("get") { + val config = DefaultConfigProvider().apply { init(spec) }.get() + + assertThat(config.parentPath).isNull() + assertThat(config.subConfig("build").valueOrNull("maxIssues")).isEqualTo(0) + assertThat(config.valueOrNull("sample")).isNotNull() + } + + it("copy") { + val path = createTempFileForTest("test", "test") + DefaultConfigProvider().apply { init(spec) }.copy(path) + + val actual = String(Files.readAllBytes(path), Charsets.UTF_8) + val expected = String(Files.readAllBytes(resourceAsPath("default-detekt-config.yml")), Charsets.UTF_8) + + """ + | + |sample: + | TooManyFunctions: + | active: true + | TooManyFunctionsTwo: + | active: true + | + """.trimMargin() + + assertThat(actual).isEqualTo(expected) + } + } }) diff --git a/detekt-core/src/test/resources/sample-rule-set.jar b/detekt-core/src/test/resources/sample-rule-set.jar index 335faf48280ad9b66f5cf018981ae08648411b49..4a0859cbd439fb383cad67393afb9ecc04a9237b 100644 GIT binary patch literal 27139 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

Srb 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 BCwc$? diff --git a/detekt-sample-extensions/src/main/resources/config/config.yml b/detekt-sample-extensions/src/main/resources/config/config.yml new file mode 100644 index 00000000000..7b42d0fe288 --- /dev/null +++ b/detekt-sample-extensions/src/main/resources/config/config.yml @@ -0,0 +1,5 @@ +sample: + TooManyFunctions: + active: true + TooManyFunctionsTwo: + active: true