Skip to content

Commit

Permalink
Create DetailedFindingsReport ConsoleReport format
Browse files Browse the repository at this point in the history
  • Loading branch information
gfreivasc committed Jan 7, 2022
1 parent 0669888 commit 1b5f523
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 2 deletions.
Expand Up @@ -19,7 +19,10 @@ internal fun defaultReportMapping(reportId: String) = when (reportId) {
else -> reportId
}

internal fun printFindings(findings: Map<String, List<Finding>>): String {
internal fun printFindings(
findings: Map<String, List<Finding>>,
formatting: Finding.() -> String = Finding::compact
): String {
return buildString {
val debtList = mutableListOf<Debt>()
findings.forEach { (key, issues) ->
Expand All @@ -30,7 +33,7 @@ internal fun printFindings(findings: Map<String, List<Finding>>): String {
append("$key - $debt debt\n")
issues.forEach {
append("\t")
append(it.compact().yellow())
append(formatting(it).yellow())
append("\n")
}
}
Expand Down
@@ -0,0 +1,22 @@
package io.gitlab.arturbosch.detekt.core.reporting.console

import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId
import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell
import io.gitlab.arturbosch.detekt.core.reporting.printFindings

/**
* Displays findings laid out similar to regular FindingsReport, but also
* includes the description for the rule found for clarity.
*/
class DetailedFindingsReport : AbstractFindingsReport() {

override fun render(findings: Map<RuleSetId, List<Finding>>): String = printFindings(findings) {
when (this) {
is ThresholdedCodeSmell -> "$id - $metric - ${detailedReport()}"
else -> "$id - ${detailedReport()}"
}
}

private fun Finding.detailedReport() = "[${messageOrDescription()}] at ${location.compact()}"
}
@@ -1,4 +1,5 @@
io.gitlab.arturbosch.detekt.core.reporting.console.ComplexityReport
io.gitlab.arturbosch.detekt.core.reporting.console.DetailedFindingsReport
io.gitlab.arturbosch.detekt.core.reporting.console.FindingsReport
io.gitlab.arturbosch.detekt.core.reporting.console.FileBasedFindingsReport
io.gitlab.arturbosch.detekt.core.reporting.console.LiteFindingsReport
Expand Down
1 change: 1 addition & 0 deletions detekt-core/src/main/resources/default-detekt-config.yml
Expand Up @@ -39,6 +39,7 @@ console-reports:
- 'FindingsReport'
- 'FileBasedFindingsReport'
# - 'LiteFindingsReport'
- 'DetailedFindingsReport'

output-reports:
active: true
Expand Down
@@ -0,0 +1,74 @@
package io.gitlab.arturbosch.detekt.core.reporting.console

import io.github.detekt.test.utils.readResourceContent
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.core.reporting.AutoCorrectableIssueAssert
import io.gitlab.arturbosch.detekt.core.reporting.decolorized
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

class DetailedFindingsReportSpec : Spek({

val subject by memoized { createFindingsReport() }

describe("findings report") {

context("reports the debt per rule set and the overall debt") {
val expectedContent by memoized {
readResourceContent("/reporting/detailed-findings-report.txt")
}
val detektion by memoized {
object : TestDetektion() {
override val findings: Map<String, List<Finding>> = mapOf(
"Ruleset1" to listOf(createFinding(), createFinding()),
"EmptyRuleset" to emptyList(),
"Ruleset2" to listOf(createFinding())
)
}
}

var output: String? = null

beforeEachTest {
output = subject.render(detektion)?.decolorized()
}

it("has the reference content") {
assertThat(output).isEqualTo(expectedContent)
}

it("does contain the rule set id of rule sets with findings") {
assertThat(output).contains("TestSmell")
}
}

it("reports no findings") {
val detektion = TestDetektion()
assertThat(subject.render(detektion)).isNull()
}

it("reports no findings with rule set containing no smells") {
val detektion = object : TestDetektion() {
override val findings: Map<String, List<Finding>> = mapOf(
"Ruleset" to emptyList()
)
}
assertThat(subject.render(detektion)).isNull()
}

it("should not add auto corrected issues to report") {
val report = DetailedFindingsReport()
AutoCorrectableIssueAssert.isReportNull(report)
}
}
})

private fun createFindingsReport(): DetailedFindingsReport {
val report = DetailedFindingsReport()
report.init(Config.empty)
return report
}
@@ -0,0 +1,7 @@
Ruleset1 - 10min debt
TestSmell - [TestMessage] at TestFile.kt:1:1
TestSmell - [TestMessage] at TestFile.kt:1:1
Ruleset2 - 5min debt
TestSmell - [TestMessage] at TestFile.kt:1:1

Overall debt: 15min
Expand Up @@ -118,6 +118,7 @@ object ConfigPrinter : DocumentationPrinter<List<RuleSetPage>> {
- 'FindingsReport'
- 'FileBasedFindingsReport'
# - 'LiteFindingsReport'
- 'DetailedFindingsReport'
""".trimIndent()

private fun defaultOutputReportsConfiguration(): String = """
Expand Down

0 comments on commit 1b5f523

Please sign in to comment.