Skip to content

Commit

Permalink
Concat configurations
Browse files Browse the repository at this point in the history
  • Loading branch information
BraisGabin committed Nov 20, 2021
1 parent 337459d commit 549f773
Showing 1 changed file with 31 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ 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.tooling.internal.getSafeResourceAsStream
import io.github.detekt.tooling.internal.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.InputStream
import java.io.PipedInputStream
import java.io.PipedOutputStream
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.StandardCopyOption
Expand All @@ -20,14 +22,35 @@ 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 {
val configReader = javaClass.getSafeResourceAsStream(DEFAULT_CONFIG_RESOURCES_PATH)!!.reader()
return YamlConfig.load(configReader)
private fun configInputStream(spec: ProcessingSpec): InputStream {
val outputStream = PipedOutputStream()

Thread {
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) }
}

outputStream.close()
}.start()

return PipedInputStream(outputStream)
}

private const val DEFAULT_CONFIG_RESOURCES_PATH = "/default-detekt-config.yml"
private fun ClassLoader.getResourcesAsStream(name: String): Sequence<InputStream> {
return getResources(name)
.asSequence()
.map { it.openStream() }
}

fun ProcessingSpec.getDefaultConfiguration(): Config {
return YamlConfig.load(configInputStream(this).reader())
}

0 comments on commit 549f773

Please sign in to comment.