From 65a49589e43bbbb4cb20083ae6f09c94cbefee81 Mon Sep 17 00:00:00 2001 From: Artur Bosch Date: Sun, 31 May 2020 15:35:38 +0200 Subject: [PATCH] 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 --- buildSrc/src/main/kotlin/commons.gradle.kts | 7 ++ buildSrc/src/main/kotlin/packaging.gradle.kts | 5 ++ .../detekt/api/internal/Versions.kt | 14 +++- detekt-cli/build.gradle.kts | 13 +--- .../arturbosch/detekt/cli/ReportPath.kt | 6 +- .../detekt/cli/console/ComplexityReport.kt | 1 + .../detekt/cli/runners/VersionPrinter.kt | 2 +- ....gitlab.arturbosch.detekt.api.OutputReport | 3 - .../detekt/cli/IssueExtensionSpec.kt | 2 + .../arturbosch/detekt/cli/OutputFacadeSpec.kt | 7 +- .../arturbosch/detekt/cli/TestFactory.kt | 62 ------------------ .../cli/console/AutoCorrectableIssueAssert.kt | 2 +- .../cli/console/ComplexityReportSpec.kt | 6 +- .../console/FileBasedFindingsReportSpec.kt | 2 +- .../detekt/cli/console/FindingsReportSpec.kt | 2 +- .../arturbosch/detekt/cli/out/ReportsSpec.kt | 3 + .../io/gitlab/arturbosch/detekt/core/Junk.kt | 3 + detekt-metrics/build.gradle.kts | 2 +- .../detekt/metrics}/ComplexityMetric.kt | 5 +- .../metrics}/ComplexityReportGenerator.kt | 2 +- .../metrics}/ComplexityReportGeneratorSpec.kt | 13 ++-- detekt-report-html/build.gradle.kts | 9 +++ .../detekt/report/html}/HtmlOutputReport.kt | 12 ++-- .../github/detekt/report/html}/HtmlUtils.kt | 4 +- ....gitlab.arturbosch.detekt.api.OutputReport | 1 + .../default-html-report-template.html | 0 .../report/html}/HtmlOutputReportSpec.kt | 12 ++-- .../detekt/report/html}/HtmlUtilsSpec.kt | 2 +- .../test/resources}/HtmlOutputFormatTest.html | 0 .../src/test/resources/META-INF/MANIFEST.MF | 1 + detekt-report-txt/build.gradle.kts | 4 ++ .../detekt/report/txt}/TxtOutputReport.kt | 2 +- ....gitlab.arturbosch.detekt.api.OutputReport | 1 + .../detekt/report/txt}/TxtOutputReportSpec.kt | 4 +- detekt-report-xml/build.gradle.kts | 4 ++ .../io/github/detekt/report/xml}/XmlEscape.kt | 2 +- .../detekt/report/xml}/XmlOutputReport.kt | 4 +- ....gitlab.arturbosch.detekt.api.OutputReport | 1 + .../detekt/report/xml}/XmlOutputFormatSpec.kt | 4 +- .../arturbosch/detekt/test/TestFactory.kt | 64 +++++++++++++++++++ .../index.md | 3 + .../which-detekt.md | 12 ++++ .../which-java.md | 12 ++++ .../which-o-s.md | 12 ++++ settings.gradle.kts | 3 + 45 files changed, 214 insertions(+), 121 deletions(-) rename detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/DebugUtils.kt => detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Versions.kt (58%) delete mode 100644 detekt-cli/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console => detekt-metrics/src/main/kotlin/io/github/detekt/metrics}/ComplexityMetric.kt (88%) rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console => detekt-metrics/src/main/kotlin/io/github/detekt/metrics}/ComplexityReportGenerator.kt (97%) rename {detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console => detekt-metrics/src/test/kotlin/io/github/detekt/metrics}/ComplexityReportGeneratorSpec.kt (92%) create mode 100644 detekt-report-html/build.gradle.kts rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-html/src/main/kotlin/io/github/detekt/report/html}/HtmlOutputReport.kt (93%) rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-html/src/main/kotlin/io/github/detekt/report/html}/HtmlUtils.kt (97%) create mode 100644 detekt-report-html/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport rename {detekt-cli => detekt-report-html}/src/main/resources/default-html-report-template.html (100%) rename {detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-html/src/test/kotlin/io/github/detekt/report/html}/HtmlOutputReportSpec.kt (96%) rename {detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-html/src/test/kotlin/io/github/detekt/report/html}/HtmlUtilsSpec.kt (99%) rename {detekt-cli/src/test/resources/reports => detekt-report-html/src/test/resources}/HtmlOutputFormatTest.html (100%) create mode 100644 detekt-report-html/src/test/resources/META-INF/MANIFEST.MF create mode 100644 detekt-report-txt/build.gradle.kts rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-txt/src/main/kotlin/io/github/detekt/report/txt}/TxtOutputReport.kt (92%) create mode 100644 detekt-report-txt/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport rename {detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-txt/src/test/kotlin/io/github/detekt/report/txt}/TxtOutputReportSpec.kt (94%) create mode 100644 detekt-report-xml/build.gradle.kts rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml}/XmlEscape.kt (99%) rename {detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml}/XmlOutputReport.kt (93%) create mode 100644 detekt-report-xml/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport rename {detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out => detekt-report-xml/src/test/kotlin/io/github/detekt/report/xml}/XmlOutputFormatSpec.kt (98%) create mode 100644 detekt-test/src/main/kotlin/io/gitlab/arturbosch/detekt/test/TestFactory.kt create mode 100644 docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-detekt.md create mode 100644 docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-java.md create mode 100644 docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-o-s.md diff --git a/buildSrc/src/main/kotlin/commons.gradle.kts b/buildSrc/src/main/kotlin/commons.gradle.kts index 95c140e71..0e6207204 100644 --- a/buildSrc/src/main/kotlin/commons.gradle.kts +++ b/buildSrc/src/main/kotlin/commons.gradle.kts @@ -26,6 +26,13 @@ subprojects { plugin("jacoco") } + // bundle detekt's version for all jars to use it at runtime + tasks.withType().configureEach { + manifest { + attributes(mapOf("DetektVersion" to Versions.DETEKT)) + } + } + jacoco.toolVersion = Versions.JACOCO tasks.withType().configureEach { diff --git a/buildSrc/src/main/kotlin/packaging.gradle.kts b/buildSrc/src/main/kotlin/packaging.gradle.kts index 3ba65b5b3..e3f9d8cb4 100644 --- a/buildSrc/src/main/kotlin/packaging.gradle.kts +++ b/buildSrc/src/main/kotlin/packaging.gradle.kts @@ -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() { + mergeServiceFiles() + } } subprojects { diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/DebugUtils.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Versions.kt similarity index 58% rename from detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/DebugUtils.kt rename to detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Versions.kt index a3ca1c799..eaf78c5bb 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/DebugUtils.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Versions.kt @@ -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() diff --git a/detekt-cli/build.gradle.kts b/detekt-cli/build.gradle.kts index 1e92a928c..b5dcb9960 100644 --- a/detekt-cli/build.gradle.kts +++ b/detekt-cli/build.gradle.kts @@ -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().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 diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ReportPath.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ReportPath.kt index 096ecc197..9354dec78 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ReportPath.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/ReportPath.kt @@ -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 diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReport.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReport.kt index c86abf34c..ac26ba355 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReport.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReport.kt @@ -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 diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt index c9e1456fd..b59b60ea0 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt @@ -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 { diff --git a/detekt-cli/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport b/detekt-cli/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport deleted file mode 100644 index 1b21ec63b..000000000 --- a/detekt-cli/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport +++ /dev/null @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/IssueExtensionSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/IssueExtensionSpec.kt index 7d05e383d..5e1ee3862 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/IssueExtensionSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/IssueExtensionSpec.kt @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/OutputFacadeSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/OutputFacadeSpec.kt index 1d87e46c3..49b971754 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/OutputFacadeSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/OutputFacadeSpec.kt @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/TestFactory.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/TestFactory.kt index 16268a294..b9ef9f43d 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/TestFactory.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/TestFactory.kt @@ -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 = 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"))) /** diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/AutoCorrectableIssueAssert.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/AutoCorrectableIssueAssert.kt index 12051869e..292aa7812 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/AutoCorrectableIssueAssert.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/AutoCorrectableIssueAssert.kt @@ -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 { diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportSpec.kt index cb92228b4..fc21bb545 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportSpec.kt @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FileBasedFindingsReportSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FileBasedFindingsReportSpec.kt index 9de126145..530d699f0 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FileBasedFindingsReportSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FileBasedFindingsReportSpec.kt @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FindingsReportSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FindingsReportSpec.kt index 517447cf6..c285ad39b 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FindingsReportSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/FindingsReportSpec.kt @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/ReportsSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/ReportsSpec.kt index 7bc23e919..daf080879 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/ReportsSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/ReportsSpec.kt @@ -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 diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Junk.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Junk.kt index a3eea0184..4e0f2676a 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Junk.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Junk.kt @@ -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 diff --git a/detekt-metrics/build.gradle.kts b/detekt-metrics/build.gradle.kts index d6d2afcdf..9a19a5fa7 100644 --- a/detekt-metrics/build.gradle.kts +++ b/detekt-metrics/build.gradle.kts @@ -1,4 +1,4 @@ dependencies { api(project(":detekt-api")) - testImplementation(project(":detekt-test-utils")) + testImplementation(project(":detekt-test")) } diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityMetric.kt b/detekt-metrics/src/main/kotlin/io/github/detekt/metrics/ComplexityMetric.kt similarity index 88% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityMetric.kt rename to detekt-metrics/src/main/kotlin/io/github/detekt/metrics/ComplexityMetric.kt index f86393c6c..7d744bb0a 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityMetric.kt +++ b/detekt-metrics/src/main/kotlin/io/github/detekt/metrics/ComplexityMetric.kt @@ -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) { diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportGenerator.kt b/detekt-metrics/src/main/kotlin/io/github/detekt/metrics/ComplexityReportGenerator.kt similarity index 97% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportGenerator.kt rename to detekt-metrics/src/main/kotlin/io/github/detekt/metrics/ComplexityReportGenerator.kt index 75f581d1b..577ae252d 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportGenerator.kt +++ b/detekt-metrics/src/main/kotlin/io/github/detekt/metrics/ComplexityReportGenerator.kt @@ -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 diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportGeneratorSpec.kt b/detekt-metrics/src/test/kotlin/io/github/detekt/metrics/ComplexityReportGeneratorSpec.kt similarity index 92% rename from detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportGeneratorSpec.kt rename to detekt-metrics/src/test/kotlin/io/github/detekt/metrics/ComplexityReportGeneratorSpec.kt index 591f7e0a2..ec968557b 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/console/ComplexityReportGeneratorSpec.kt +++ b/detekt-metrics/src/test/kotlin/io/github/detekt/metrics/ComplexityReportGeneratorSpec.kt @@ -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() + every { finding.id }.returns("test") + detektion = TestDetektion(finding) addData(detektion) } diff --git a/detekt-report-html/build.gradle.kts b/detekt-report-html/build.gradle.kts new file mode 100644 index 000000000..5165210de --- /dev/null +++ b/detekt-report-html/build.gradle.kts @@ -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")) +} diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlOutputReport.kt b/detekt-report-html/src/main/kotlin/io/github/detekt/report/html/HtmlOutputReport.kt similarity index 93% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlOutputReport.kt rename to detekt-report-html/src/main/kotlin/io/github/detekt/report/html/HtmlOutputReport.kt index fba25f6c3..cdeb0993d 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlOutputReport.kt +++ b/detekt-report-html/src/main/kotlin/io/github/detekt/report/html/HtmlOutputReport.kt @@ -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)) diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlUtils.kt b/detekt-report-html/src/main/kotlin/io/github/detekt/report/html/HtmlUtils.kt similarity index 97% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlUtils.kt rename to detekt-report-html/src/main/kotlin/io/github/detekt/report/html/HtmlUtils.kt index 2bda75664..161974ed0 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlUtils.kt +++ b/detekt-report-html/src/main/kotlin/io/github/detekt/report/html/HtmlUtils.kt @@ -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 diff --git a/detekt-report-html/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport b/detekt-report-html/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport new file mode 100644 index 000000000..f8846e666 --- /dev/null +++ b/detekt-report-html/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport @@ -0,0 +1 @@ +io.github.detekt.report.html.HtmlOutputReport diff --git a/detekt-cli/src/main/resources/default-html-report-template.html b/detekt-report-html/src/main/resources/default-html-report-template.html similarity index 100% rename from detekt-cli/src/main/resources/default-html-report-template.html rename to detekt-report-html/src/main/resources/default-html-report-template.html diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlOutputReportSpec.kt b/detekt-report-html/src/test/kotlin/io/github/detekt/report/html/HtmlOutputReportSpec.kt similarity index 96% rename from detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlOutputReportSpec.kt rename to detekt-report-html/src/test/kotlin/io/github/detekt/report/html/HtmlOutputReportSpec.kt index 0895bb52c..347bd15d6 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlOutputReportSpec.kt +++ b/detekt-report-html/src/test/kotlin/io/github/detekt/report/html/HtmlOutputReportSpec.kt @@ -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) diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlUtilsSpec.kt b/detekt-report-html/src/test/kotlin/io/github/detekt/report/html/HtmlUtilsSpec.kt similarity index 99% rename from detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlUtilsSpec.kt rename to detekt-report-html/src/test/kotlin/io/github/detekt/report/html/HtmlUtilsSpec.kt index 0e844a70d..968a2e361 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/HtmlUtilsSpec.kt +++ b/detekt-report-html/src/test/kotlin/io/github/detekt/report/html/HtmlUtilsSpec.kt @@ -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 diff --git a/detekt-cli/src/test/resources/reports/HtmlOutputFormatTest.html b/detekt-report-html/src/test/resources/HtmlOutputFormatTest.html similarity index 100% rename from detekt-cli/src/test/resources/reports/HtmlOutputFormatTest.html rename to detekt-report-html/src/test/resources/HtmlOutputFormatTest.html diff --git a/detekt-report-html/src/test/resources/META-INF/MANIFEST.MF b/detekt-report-html/src/test/resources/META-INF/MANIFEST.MF new file mode 100644 index 000000000..86c3fb7e4 --- /dev/null +++ b/detekt-report-html/src/test/resources/META-INF/MANIFEST.MF @@ -0,0 +1 @@ +DetektVersion: 1.9.1 diff --git a/detekt-report-txt/build.gradle.kts b/detekt-report-txt/build.gradle.kts new file mode 100644 index 000000000..a58dcebf3 --- /dev/null +++ b/detekt-report-txt/build.gradle.kts @@ -0,0 +1,4 @@ +dependencies { + implementation(project(":detekt-api")) + testImplementation(project(":detekt-test")) +} diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/TxtOutputReport.kt b/detekt-report-txt/src/main/kotlin/io/github/detekt/report/txt/TxtOutputReport.kt similarity index 92% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/TxtOutputReport.kt rename to detekt-report-txt/src/main/kotlin/io/github/detekt/report/txt/TxtOutputReport.kt index 0dd886725..5f82ec81d 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/TxtOutputReport.kt +++ b/detekt-report-txt/src/main/kotlin/io/github/detekt/report/txt/TxtOutputReport.kt @@ -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 diff --git a/detekt-report-txt/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport b/detekt-report-txt/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport new file mode 100644 index 000000000..cd99b155c --- /dev/null +++ b/detekt-report-txt/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport @@ -0,0 +1 @@ +io.github.detekt.report.txt.TxtOutputReport diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/TxtOutputReportSpec.kt b/detekt-report-txt/src/test/kotlin/io/github/detekt/report/txt/TxtOutputReportSpec.kt similarity index 94% rename from detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/TxtOutputReportSpec.kt rename to detekt-report-txt/src/test/kotlin/io/github/detekt/report/txt/TxtOutputReportSpec.kt index 1e7bd3647..52796d3d6 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/TxtOutputReportSpec.kt +++ b/detekt-report-txt/src/test/kotlin/io/github/detekt/report/txt/TxtOutputReportSpec.kt @@ -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 diff --git a/detekt-report-xml/build.gradle.kts b/detekt-report-xml/build.gradle.kts new file mode 100644 index 000000000..a58dcebf3 --- /dev/null +++ b/detekt-report-xml/build.gradle.kts @@ -0,0 +1,4 @@ +dependencies { + implementation(project(":detekt-api")) + testImplementation(project(":detekt-test")) +} diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlEscape.kt b/detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml/XmlEscape.kt similarity index 99% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlEscape.kt rename to detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml/XmlEscape.kt index cc0a82d99..de82d9d68 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlEscape.kt +++ b/detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml/XmlEscape.kt @@ -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 diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlOutputReport.kt b/detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml/XmlOutputReport.kt similarity index 93% rename from detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlOutputReport.kt rename to detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml/XmlOutputReport.kt index 2d30214cd..11a8a3413 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlOutputReport.kt +++ b/detekt-report-xml/src/main/kotlin/io/github/detekt/report/xml/XmlOutputReport.kt @@ -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 += "" lines += "" - smells.groupBy { it.location.file }.forEach { fileName, findings -> + smells.groupBy { it.location.file }.forEach { (fileName, findings) -> lines += "" findings.forEach { lines += arrayOf( diff --git a/detekt-report-xml/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport b/detekt-report-xml/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport new file mode 100644 index 000000000..c362baa55 --- /dev/null +++ b/detekt-report-xml/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport @@ -0,0 +1 @@ +io.github.detekt.report.xml.XmlOutputReport diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlOutputFormatSpec.kt b/detekt-report-xml/src/test/kotlin/io/github/detekt/report/xml/XmlOutputFormatSpec.kt similarity index 98% rename from detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlOutputFormatSpec.kt rename to detekt-report-xml/src/test/kotlin/io/github/detekt/report/xml/XmlOutputFormatSpec.kt index e94e9cf28..034f145ed 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/out/XmlOutputFormatSpec.kt +++ b/detekt-report-xml/src/test/kotlin/io/github/detekt/report/xml/XmlOutputFormatSpec.kt @@ -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 diff --git a/detekt-test/src/main/kotlin/io/gitlab/arturbosch/detekt/test/TestFactory.kt b/detekt-test/src/main/kotlin/io/gitlab/arturbosch/detekt/test/TestFactory.kt new file mode 100644 index 000000000..bb68ce17b --- /dev/null +++ b/detekt-test/src/main/kotlin/io/gitlab/arturbosch/detekt/test/TestFactory.kt @@ -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 = 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 +) diff --git a/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/index.md b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/index.md index 45e47816c..8c1200e7d 100644 --- a/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/index.md +++ b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/index.md @@ -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) | diff --git a/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-detekt.md b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-detekt.md new file mode 100644 index 000000000..4db489df9 --- /dev/null +++ b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-detekt.md @@ -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. + diff --git a/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-java.md b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-java.md new file mode 100644 index 000000000..de3d65e5f --- /dev/null +++ b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-java.md @@ -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. + diff --git a/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-o-s.md b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-o-s.md new file mode 100644 index 000000000..8e0686e88 --- /dev/null +++ b/docs/pages/kdoc/detekt-api/io.gitlab.arturbosch.detekt.api.internal/which-o-s.md @@ -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. + diff --git a/settings.gradle.kts b/settings.gradle.kts index c0f49897b..9f3a61b03 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -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",