Extract xml and html reports to own modules (#2750)

* Move xml report to own module

* Extract common complexity report logic to metrics module

This allows to share complexity report logic between the console report and a report-html module.

* Move whichXXX functions from DebugUtils to api module for now

More modules use the detekt version at runtime
and it is nice to have it in plugins as the IntelliJ or Sonar plugin. We should later move this helpers to the tooling-api.

* Extract html report to own module

* Merge all service files when packaging cli fatJar

* Write the detekt version to all jar manifest files

This allows to retrieve the detekt version from any jar at runtime.

* Extract txt report to own module
This commit is contained in:
Artur Bosch
2020-05-31 15:35:38 +02:00
committed by GitHub
parent 12bce58366
commit 65a49589e4
45 changed files with 214 additions and 121 deletions

View File

@@ -26,6 +26,13 @@ subprojects {
plugin("jacoco")
}
// bundle detekt's version for all jars to use it at runtime
tasks.withType<Jar>().configureEach {
manifest {
attributes(mapOf("DetektVersion" to Versions.DETEKT))
}
}
jacoco.toolVersion = Versions.JACOCO
tasks.withType<Test>().configureEach {

View File

@@ -1,3 +1,4 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.jfrog.bintray.gradle.BintrayExtension
import groovy.lang.GroovyObject
import org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention
@@ -16,6 +17,10 @@ project(":detekt-cli") {
plugin("application")
plugin("com.github.johnrengelman.shadow")
}
tasks.withType<ShadowJar>() {
mergeServiceFiles()
}
}
subprojects {

View File

@@ -1,17 +1,27 @@
package io.gitlab.arturbosch.detekt.core
package io.gitlab.arturbosch.detekt.api.internal
import io.gitlab.arturbosch.detekt.api.Extension
import java.net.URL
import java.util.jar.Manifest
/**
* Returns the name of the running OS.
*/
fun whichOS(): String = System.getProperty("os.name")
/**
* Returns the version of the running JVM.
*/
fun whichJava(): String = System.getProperty("java.runtime.version")
/**
* Returns the bundled detekt version.
*/
fun whichDetekt(): String? {
fun readVersion(resource: URL): String? = resource.openStream()
.use { Manifest(it).mainAttributes.getValue("DetektVersion") }
return Detektor::class.java.classLoader.getResources("META-INF/MANIFEST.MF")
return Extension::class.java.classLoader.getResources("META-INF/MANIFEST.MF")
.asSequence()
.mapNotNull { runCatching { readVersion(it) }.getOrNull() }
.firstOrNull()

View File

@@ -5,23 +5,16 @@ application {
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation(project(":detekt-core"))
implementation(project(":detekt-report-html"))
implementation(project(":detekt-report-txt"))
implementation(project(":detekt-report-xml"))
runtimeOnly(project(":detekt-rules"))
implementation("com.beust:jcommander:${Versions.JCOMMANDER}")
implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:${Versions.KOTLINX_HTML}") {
exclude(group = "org.jetbrains.kotlin")
}
testImplementation(project(":detekt-test"))
testImplementation(project(":detekt-rules"))
}
// bundle detekt's version for debug logging on rule exceptions
tasks.withType<Jar>().configureEach {
manifest {
attributes(mapOf("DetektVersion" to Versions.DETEKT))
}
}
// Implements https://github.com/brianm/really-executable-jars-maven-plugin maven plugin behaviour.
// To check details how it works, see http://skife.org/java/unix/2011/06/20/really_executable_jars.html.
// Extracted from https://github.com/pinterest/ktlint/blob/a86d1c76c44d0a1c1adc3f756f36d8b4cac15d32/ktlint/build.gradle#L40-L57

View File

@@ -1,8 +1,8 @@
package io.gitlab.arturbosch.detekt.cli
import io.gitlab.arturbosch.detekt.cli.out.HtmlOutputReport
import io.gitlab.arturbosch.detekt.cli.out.TxtOutputReport
import io.gitlab.arturbosch.detekt.cli.out.XmlOutputReport
import io.github.detekt.report.html.HtmlOutputReport
import io.github.detekt.report.txt.TxtOutputReport
import io.github.detekt.report.xml.XmlOutputReport
import java.nio.file.Path
import java.nio.file.Paths

View File

@@ -1,5 +1,6 @@
package io.gitlab.arturbosch.detekt.cli.console
import io.github.detekt.metrics.ComplexityReportGenerator
import io.gitlab.arturbosch.detekt.api.ConsoleReport
import io.gitlab.arturbosch.detekt.api.Detektion

View File

@@ -1,6 +1,6 @@
package io.gitlab.arturbosch.detekt.cli.runners
import io.gitlab.arturbosch.detekt.core.whichDetekt
import io.gitlab.arturbosch.detekt.api.internal.whichDetekt
import java.io.PrintStream
class VersionPrinter(private val outputPrinter: PrintStream) : Executable {

View File

@@ -1,3 +0,0 @@
io.gitlab.arturbosch.detekt.cli.out.TxtOutputReport
io.gitlab.arturbosch.detekt.cli.out.XmlOutputReport
io.gitlab.arturbosch.detekt.cli.out.HtmlOutputReport

View File

@@ -4,6 +4,8 @@ import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.test.TestConfig
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.gitlab.arturbosch.detekt.test.createCorrectableFinding
import io.gitlab.arturbosch.detekt.test.createFinding
import org.assertj.core.api.Assertions.assertThat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe

View File

@@ -1,11 +1,12 @@
package io.gitlab.arturbosch.detekt.cli
import io.github.detekt.report.html.HtmlOutputReport
import io.github.detekt.report.txt.TxtOutputReport
import io.github.detekt.report.xml.XmlOutputReport
import io.github.detekt.test.utils.StringPrintStream
import io.github.detekt.test.utils.resource
import io.gitlab.arturbosch.detekt.cli.out.HtmlOutputReport
import io.gitlab.arturbosch.detekt.cli.out.TxtOutputReport
import io.gitlab.arturbosch.detekt.cli.out.XmlOutputReport
import io.gitlab.arturbosch.detekt.core.DetektResult
import io.gitlab.arturbosch.detekt.test.createFinding
import io.gitlab.arturbosch.detekt.test.createProcessingSettings
import org.assertj.core.api.Assertions.assertThat
import org.jetbrains.kotlin.utils.closeQuietly

View File

@@ -2,71 +2,9 @@ package io.gitlab.arturbosch.detekt.cli
import io.github.detekt.test.utils.NullPrintStream
import io.github.detekt.test.utils.resource
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.CorrectableCodeSmell
import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Location
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.SourceLocation
import io.gitlab.arturbosch.detekt.api.TextLocation
import io.gitlab.arturbosch.detekt.core.ModificationNotification
import org.jetbrains.kotlin.psi.KtElement
import java.nio.file.Paths
fun createFinding(ruleName: String = "TestSmell", fileName: String = "TestFile.kt") =
CodeSmell(createIssue(ruleName), createEntity(fileName), "TestMessage")
fun createCorrectableFinding(ruleName: String = "TestSmell", fileName: String = "TestFile.kt") =
CorrectableCodeSmell(createIssue(ruleName), createEntity(fileName), "TestMessage", autoCorrectEnabled = true)
fun createFinding(
issue: Issue,
entity: Entity,
message: String = entity.signature
) = CodeSmell(
issue = issue,
entity = entity,
message = message
)
fun createIssue(id: String) = Issue(
id = id,
severity = Severity.CodeSmell,
description = "Description $id",
debt = Debt.FIVE_MINS
)
fun createEntity(
file: String,
position: Pair<Int, Int> = 1 to 1,
text: IntRange = 0..0,
ktElement: KtElement? = null
) = Entity(
name = "TestEntity",
className = "",
signature = "TestEntitySignature",
location = createLocation(
file = file,
source = SourceLocation(position.first, position.second),
text = TextLocation(text.first, text.last)
),
ktElement = ktElement
)
fun createLocation(
file: String,
source: SourceLocation = SourceLocation(1, 1),
text: TextLocation = TextLocation(0, 0),
locationString: String = ""
) = Location(
source = source,
text = text,
locationString = locationString,
file = file
)
fun createNotification() = ModificationNotification(Paths.get(resource("empty.txt")))
/**

View File

@@ -1,9 +1,9 @@
package io.gitlab.arturbosch.detekt.cli.console
import io.gitlab.arturbosch.detekt.api.ConsoleReport
import io.gitlab.arturbosch.detekt.cli.createCorrectableFinding
import io.gitlab.arturbosch.detekt.test.TestConfig
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.gitlab.arturbosch.detekt.test.createCorrectableFinding
import org.assertj.core.api.Assertions.assertThat
internal object AutoCorrectableIssueAssert {

View File

@@ -1,14 +1,14 @@
package io.gitlab.arturbosch.detekt.cli.console
import io.github.detekt.metrics.CognitiveComplexity
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.cli.createFinding
import io.gitlab.arturbosch.detekt.core.DetektResult
import io.github.detekt.metrics.processors.commentLinesKey
import io.github.detekt.metrics.processors.complexityKey
import io.github.detekt.metrics.processors.linesKey
import io.github.detekt.metrics.processors.logicalLinesKey
import io.github.detekt.metrics.processors.sourceLinesKey
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.core.DetektResult
import io.gitlab.arturbosch.detekt.test.createFinding
import org.assertj.core.api.Assertions.assertThat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe

View File

@@ -2,8 +2,8 @@ package io.gitlab.arturbosch.detekt.cli.console
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.cli.createFinding
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.gitlab.arturbosch.detekt.test.createFinding
import org.assertj.core.api.Assertions.assertThat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe

View File

@@ -2,8 +2,8 @@ package io.gitlab.arturbosch.detekt.cli.console
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.cli.createFinding
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.gitlab.arturbosch.detekt.test.createFinding
import org.assertj.core.api.Assertions.assertThat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe

View File

@@ -1,5 +1,8 @@
package io.gitlab.arturbosch.detekt.cli.out
import io.github.detekt.report.html.HtmlOutputReport
import io.github.detekt.report.txt.TxtOutputReport
import io.github.detekt.report.xml.XmlOutputReport
import io.github.detekt.test.utils.NullPrintStream
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.OutputReport

View File

@@ -3,6 +3,9 @@ package io.gitlab.arturbosch.detekt.core
import io.github.detekt.psi.absolutePath
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId
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 org.jetbrains.kotlin.psi.KtFile
import java.io.PrintStream
import java.nio.file.Files

View File

@@ -1,4 +1,4 @@
dependencies {
api(project(":detekt-api"))
testImplementation(project(":detekt-test-utils"))
testImplementation(project(":detekt-test"))
}

View File

@@ -1,12 +1,11 @@
package io.gitlab.arturbosch.detekt.cli.console
package io.github.detekt.metrics
import io.github.detekt.metrics.CognitiveComplexity
import io.gitlab.arturbosch.detekt.api.Detektion
import io.github.detekt.metrics.processors.commentLinesKey
import io.github.detekt.metrics.processors.complexityKey
import io.github.detekt.metrics.processors.linesKey
import io.github.detekt.metrics.processors.logicalLinesKey
import io.github.detekt.metrics.processors.sourceLinesKey
import io.gitlab.arturbosch.detekt.api.Detektion
class ComplexityMetric(detektion: Detektion) {

View File

@@ -1,4 +1,4 @@
package io.gitlab.arturbosch.detekt.cli.console
package io.github.detekt.metrics
import io.gitlab.arturbosch.detekt.api.Detektion
import java.util.Locale

View File

@@ -1,14 +1,15 @@
package io.gitlab.arturbosch.detekt.cli.console
package io.github.detekt.metrics
import io.github.detekt.metrics.CognitiveComplexity
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.cli.createFinding
import io.github.detekt.metrics.processors.commentLinesKey
import io.github.detekt.metrics.processors.complexityKey
import io.github.detekt.metrics.processors.linesKey
import io.github.detekt.metrics.processors.logicalLinesKey
import io.github.detekt.metrics.processors.sourceLinesKey
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.mockk.every
import io.mockk.mockk
import org.assertj.core.api.Assertions.assertThat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe
@@ -20,7 +21,9 @@ internal class ComplexityReportGeneratorSpec : Spek({
lateinit var detektion: TestDetektion
beforeEachTest {
detektion = TestDetektion(createFinding())
val finding = mockk<Finding>()
every { finding.id }.returns("test")
detektion = TestDetektion(finding)
addData(detektion)
}

View File

@@ -0,0 +1,9 @@
dependencies {
compileOnly(project(":detekt-api"))
compileOnly(project(":detekt-metrics"))
implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:${Versions.KOTLINX_HTML}") {
exclude(group = "org.jetbrains.kotlin")
}
testImplementation(project(":detekt-metrics"))
testImplementation(project(":detekt-test"))
}

View File

@@ -1,13 +1,12 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.html
import io.github.detekt.metrics.ComplexityReportGenerator
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.OutputReport
import io.gitlab.arturbosch.detekt.api.ProjectMetric
import io.gitlab.arturbosch.detekt.api.TextLocation
import io.gitlab.arturbosch.detekt.cli.ClasspathResourceConverter
import io.gitlab.arturbosch.detekt.cli.console.ComplexityReportGenerator
import io.gitlab.arturbosch.detekt.core.whichDetekt
import io.gitlab.arturbosch.detekt.api.internal.whichDetekt
import kotlinx.html.CommonAttributeGroupFacadeFlowInteractiveContent
import kotlinx.html.FlowContent
import kotlinx.html.FlowOrInteractiveContent
@@ -46,7 +45,10 @@ class HtmlOutputReport : OutputReport() {
override val name = "HTML report"
override fun render(detektion: Detektion) =
ClasspathResourceConverter().convert(DEFAULT_TEMPLATE).openStream().bufferedReader().use { it.readText() }
javaClass.getResource("/$DEFAULT_TEMPLATE")
.openStream()
.bufferedReader()
.use { it.readText() }
.replace(PLACEHOLDER_VERSION, renderVersion())
.replace(PLACEHOLDER_DATE, renderDate())
.replace(PLACEHOLDER_METRICS, renderMetrics(detektion.metrics))

View File

@@ -1,7 +1,7 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.html
import io.gitlab.arturbosch.detekt.api.SourceLocation
import io.gitlab.arturbosch.detekt.core.whichDetekt
import io.gitlab.arturbosch.detekt.api.internal.whichDetekt
import kotlinx.html.FlowContent
import kotlinx.html.a
import kotlinx.html.code

View File

@@ -0,0 +1 @@
io.github.detekt.report.html.HtmlOutputReport

View File

@@ -1,4 +1,4 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.html
import io.github.detekt.metrics.CognitiveComplexity
import io.github.detekt.metrics.processors.commentLinesKey
@@ -11,11 +11,11 @@ import io.github.detekt.test.utils.resourceAsPath
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.ProjectMetric
import io.gitlab.arturbosch.detekt.cli.createEntity
import io.gitlab.arturbosch.detekt.cli.createFinding
import io.gitlab.arturbosch.detekt.cli.createIssue
import io.gitlab.arturbosch.detekt.core.whichDetekt
import io.gitlab.arturbosch.detekt.api.internal.whichDetekt
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.gitlab.arturbosch.detekt.test.createEntity
import io.gitlab.arturbosch.detekt.test.createFinding
import io.gitlab.arturbosch.detekt.test.createIssue
import io.mockk.every
import io.mockk.mockk
import org.assertj.core.api.Assertions.assertThat
@@ -132,7 +132,7 @@ class HtmlOutputReportSpec : Spek({
}
it("asserts that the generated HTML is the same as expected") {
val expected = resourceAsPath("/reports/HtmlOutputFormatTest.html")
val expected = resourceAsPath("HtmlOutputFormatTest.html")
var result = htmlReport.render(createTestDetektionWithMultipleSmells())
result = generatedRegex.replace(result, replacement)

View File

@@ -1,4 +1,4 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.html
import io.gitlab.arturbosch.detekt.api.SourceLocation
import kotlinx.html.div

View File

@@ -0,0 +1 @@
DetektVersion: 1.9.1

View File

@@ -0,0 +1,4 @@
dependencies {
implementation(project(":detekt-api"))
testImplementation(project(":detekt-test"))
}

View File

@@ -1,4 +1,4 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.txt
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.OutputReport

View File

@@ -0,0 +1 @@
io.github.detekt.report.txt.TxtOutputReport

View File

@@ -1,7 +1,7 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.txt
import io.gitlab.arturbosch.detekt.test.TestDetektion
import io.gitlab.arturbosch.detekt.cli.createFinding
import io.gitlab.arturbosch.detekt.test.createFinding
import org.assertj.core.api.Assertions.assertThat
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe

View File

@@ -0,0 +1,4 @@
dependencies {
implementation(project(":detekt-api"))
testImplementation(project(":detekt-test"))
}

View File

@@ -19,7 +19,7 @@
*/
@file:Suppress("ALL")
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.xml
import java.util.ArrayList
import java.util.Arrays

View File

@@ -1,4 +1,4 @@
package io.gitlab.arturbosch.detekt.cli.out
package io.github.detekt.report.xml
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.Finding
@@ -21,7 +21,7 @@ class XmlOutputReport : OutputReport() {
lines += "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
lines += "<checkstyle version=\"4.3\">"
smells.groupBy { it.location.file }.forEach { fileName, findings ->
smells.groupBy { it.location.file }.forEach { (fileName, findings) ->
lines += "<file name=\"${fileName.toXmlString()}\">"
findings.forEach {
lines += arrayOf(

View File

@@ -0,0 +1 @@
io.github.detekt.report.xml.XmlOutputReport

View File

@@ -1,4 +1,6 @@
package io.gitlab.arturbosch.detekt.cli.out
@file:Suppress("MaxLineLength")
package io.github.detekt.report.xml
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Debt

View File

@@ -0,0 +1,64 @@
package io.gitlab.arturbosch.detekt.test
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.CorrectableCodeSmell
import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Location
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.SourceLocation
import io.gitlab.arturbosch.detekt.api.TextLocation
import org.jetbrains.kotlin.psi.KtElement
fun createFinding(ruleName: String = "TestSmell", fileName: String = "TestFile.kt") =
CodeSmell(createIssue(ruleName), createEntity(fileName), "TestMessage")
fun createCorrectableFinding(ruleName: String = "TestSmell", fileName: String = "TestFile.kt") =
CorrectableCodeSmell(createIssue(ruleName), createEntity(fileName), "TestMessage", autoCorrectEnabled = true)
fun createFinding(
issue: Issue,
entity: Entity,
message: String = entity.signature
) = CodeSmell(
issue = issue,
entity = entity,
message = message
)
fun createIssue(id: String) = Issue(
id = id,
severity = Severity.CodeSmell,
description = "Description $id",
debt = Debt.FIVE_MINS
)
fun createEntity(
file: String,
position: Pair<Int, Int> = 1 to 1,
text: IntRange = 0..0,
ktElement: KtElement? = null
) = Entity(
name = "TestEntity",
className = "",
signature = "TestEntitySignature",
location = createLocation(
file = file,
source = SourceLocation(position.first, position.second),
text = TextLocation(text.first, text.last)
),
ktElement = ktElement
)
fun createLocation(
file: String,
source: SourceLocation = SourceLocation(1, 1),
text: TextLocation = TextLocation(0, 0),
locationString: String = ""
) = Location(
source = source,
text = text,
locationString = locationString,
file = file
)

View File

@@ -34,4 +34,7 @@ title: io.gitlab.arturbosch.detekt.api.internal - detekt-api
| [createPathFilters](create-path-filters.html) | `fun `[`Config`](../io.gitlab.arturbosch.detekt.api/-config/index.html)`.createPathFilters(): `[`PathFilters`](-path-filters/index.html)`?` |
| [pathMatcher](path-matcher.html) | Converts given [pattern](path-matcher.html#io.gitlab.arturbosch.detekt.api.internal$pathMatcher(kotlin.String)/pattern) into a [PathMatcher](https://docs.oracle.com/javase/8/docs/api/java/nio/file/PathMatcher.html) specified by [FileSystem.getPathMatcher](https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)). We only support the "glob:" syntax to stay os independently. Internally a globbing pattern is transformed to a regex respecting the Windows file system.`fun pathMatcher(pattern: `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`): `[`PathMatcher`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/PathMatcher.html) |
| [validateConfig](validate-config.html) | `fun validateConfig(config: `[`Config`](../io.gitlab.arturbosch.detekt.api/-config/index.html)`, baseline: `[`Config`](../io.gitlab.arturbosch.detekt.api/-config/index.html)`, excludePatterns: `[`Set`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html)`<`[`Regex`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/-regex/index.html)`> = CommaSeparatedPattern(DEFAULT_PROPERTY_EXCLUDES).mapToRegex()): `[`List`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[`Notification`](../io.gitlab.arturbosch.detekt.api/-notification/index.html)`>` |
| [whichDetekt](which-detekt.html) | Returns the bundled detekt version.`fun whichDetekt(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` |
| [whichJava](which-java.html) | Returns the version of the running JVM.`fun whichJava(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |
| [whichOS](which-o-s.html) | Returns the name of the running OS.`fun whichOS(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |

View File

@@ -0,0 +1,12 @@
---
title: whichDetekt - detekt-api
---
[detekt-api](../index.html) / [io.gitlab.arturbosch.detekt.api.internal](index.html) / [whichDetekt](./which-detekt.html)
# whichDetekt
`fun whichDetekt(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?`
Returns the bundled detekt version.

View File

@@ -0,0 +1,12 @@
---
title: whichJava - detekt-api
---
[detekt-api](../index.html) / [io.gitlab.arturbosch.detekt.api.internal](index.html) / [whichJava](./which-java.html)
# whichJava
`fun whichJava(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
Returns the version of the running JVM.

View File

@@ -0,0 +1,12 @@
---
title: whichOS - detekt-api
---
[detekt-api](../index.html) / [io.gitlab.arturbosch.detekt.api.internal](index.html) / [whichOS](./which-o-s.html)
# whichOS
`fun whichOS(): `[`String`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
Returns the name of the running OS.

View File

@@ -9,6 +9,9 @@ include(
"detekt-metrics",
"detekt-parser",
"detekt-psi-utils",
"detekt-report-html",
"detekt-report-txt",
"detekt-report-xml",
"detekt-rules",
"detekt-sample-extensions",
"detekt-test",