Skip to content

Commit

Permalink
Merge c565616 into cbdb460
Browse files Browse the repository at this point in the history
  • Loading branch information
chao2zhang committed Sep 17, 2021
2 parents cbdb460 + c565616 commit cc13bf6
Show file tree
Hide file tree
Showing 11 changed files with 119 additions and 45 deletions.
Expand Up @@ -10,7 +10,6 @@ import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId
import java.util.HashMap

internal fun defaultReportMapping(reportId: String) = when (reportId) {
TxtOutputReport::class.java.simpleName -> "txt"
Expand All @@ -20,8 +19,8 @@ internal fun defaultReportMapping(reportId: String) = when (reportId) {
else -> reportId
}

internal fun printFindings(findings: Map<String, List<Finding>>): String? {
return with(StringBuilder()) {
internal fun printFindings(findings: Map<String, List<Finding>>): String {
return buildString {
val debtList = mutableListOf<Debt>()
findings.forEach { (key, issues) ->
val debt = issues
Expand Down
@@ -0,0 +1,30 @@
package io.gitlab.arturbosch.detekt.core.reporting.console

import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.ConsoleReport
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId
import io.gitlab.arturbosch.detekt.api.SingleAssign
import io.gitlab.arturbosch.detekt.core.reporting.filterEmptyIssues

abstract class AbstractFindingsReport : ConsoleReport() {

private var config: Config by SingleAssign()

override val priority: Int = 40

override fun init(config: Config) {
this.config = config
}

override fun render(detektion: Detektion): String? {
val findings = detektion.filterEmptyIssues(config)
if (findings.isEmpty()) {
return null
}
return render(findings)
}

abstract fun render(findings: Map<RuleSetId, List<Finding>>): String
}
@@ -1,32 +1,16 @@
package io.gitlab.arturbosch.detekt.core.reporting.console

import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.ConsoleReport
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.SingleAssign
import io.gitlab.arturbosch.detekt.core.reporting.filterEmptyIssues
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId
import io.gitlab.arturbosch.detekt.core.reporting.printFindings

/**
* Contains all rule violations grouped by file location.
* See: https://detekt.github.io/detekt/configurations.html#console-reports
*/
class FileBasedFindingsReport : ConsoleReport() {

private var config: Config by SingleAssign()

override val priority: Int = 40

override fun init(config: Config) {
this.config = config
}

override fun render(detektion: Detektion): String? {
val findings = detektion.filterEmptyIssues(config)
if (findings.isEmpty()) {
return null
}
class FileBasedFindingsReport : AbstractFindingsReport() {

override fun render(findings: Map<RuleSetId, List<Finding>>): String {
val findingsPerFile = findings.values
.flatten()
.groupBy { it.entity.location.filePath.absolutePath.toString() }
Expand Down
@@ -1,32 +1,14 @@
package io.gitlab.arturbosch.detekt.core.reporting.console

import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.ConsoleReport
import io.gitlab.arturbosch.detekt.api.Detektion
import io.gitlab.arturbosch.detekt.api.SingleAssign
import io.gitlab.arturbosch.detekt.core.reporting.filterEmptyIssues
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId
import io.gitlab.arturbosch.detekt.core.reporting.printFindings

/**
* Contains all rule violations in a list format grouped by ruleset.
* See: https://detekt.github.io/detekt/configurations.html#console-reports
*/
class FindingsReport : ConsoleReport() {
class FindingsReport : AbstractFindingsReport() {

private var config: Config by SingleAssign()

override val priority: Int = 40

override fun init(config: Config) {
this.config = config
}

override fun render(detektion: Detektion): String? {
val findings = detektion.filterEmptyIssues(config)
if (findings.isEmpty()) {
return null
}

return printFindings(findings)
}
override fun render(findings: Map<RuleSetId, List<Finding>>): String = printFindings(findings)
}
@@ -0,0 +1,20 @@
package io.gitlab.arturbosch.detekt.core.reporting.console

import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.RuleSetId

/**
* A lightweight versions of the console report, where each line contains location, messages and issue id only.
* See: https://detekt.github.io/detekt/configurations.html#console-reports
*/
class LiteFindingsReport : AbstractFindingsReport() {

override fun render(findings: Map<RuleSetId, List<Finding>>): String {
return buildString {
findings.values.flatten().forEach { finding ->
append("${finding.location.compact()}: ${finding.messageOrDescription()} [${finding.issue.id}]")
appendLine()
}
}
}
}
@@ -1,5 +1,6 @@
io.gitlab.arturbosch.detekt.core.reporting.console.ComplexityReport
io.gitlab.arturbosch.detekt.core.reporting.console.FindingsReport
io.gitlab.arturbosch.detekt.core.reporting.console.FileBasedFindingsReport
io.gitlab.arturbosch.detekt.core.reporting.console.LiteFindingsReport
io.gitlab.arturbosch.detekt.core.reporting.console.NotificationReport
io.gitlab.arturbosch.detekt.core.reporting.console.ProjectStatisticsReport
1 change: 1 addition & 0 deletions detekt-core/src/main/resources/default-detekt-config.yml
Expand Up @@ -38,6 +38,7 @@ console-reports:
- 'NotificationReport'
# - 'FindingsReport'
- 'FileBasedFindingsReport'
- 'LiteFindingsReport'

output-reports:
active: true
Expand Down
@@ -0,0 +1,53 @@
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.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 LiteFindingsReportSpec : Spek({

val subject by memoized { createFindingsReport() }

describe("findings report") {
it("reports non-empty findings") {
assertThat(
subject
.render(
TestDetektion(
createFinding("SpacingBetweenPackageAndImports"),
createFinding("UnnecessarySafeCall")
)
)
).isEqualTo(readResourceContent("/reporting/lite-findings-report.txt"))
}

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 = FindingsReport()
AutoCorrectableIssueAssert.isReportNull(report)
}
}
})

private fun createFindingsReport() = LiteFindingsReport().apply {
init(Config.empty)
}
@@ -0,0 +1,2 @@
TestFile.kt:1:1: TestMessage [SpacingBetweenPackageAndImports]
TestFile.kt:1:1: TestMessage [UnnecessarySafeCall]
Expand Up @@ -117,6 +117,7 @@ object ConfigPrinter : DocumentationPrinter<List<RuleSetPage>> {
- 'NotificationReport'
# - 'FindingsReport'
- 'FileBasedFindingsReport'
- 'LiteFindingsReport'
""".trimIndent()

private fun defaultOutputReportsConfiguration(): String = """
Expand Down
1 change: 1 addition & 0 deletions docs/pages/configurations.md
Expand Up @@ -98,6 +98,7 @@ console-reports:
# - 'NotificationReport'
# - 'FindingsReport'
# - 'FileBasedFindingsReport'
# - 'LiteFindingsReport'
```

**ProjectStatisticsReport** contains metrics and statistics concerning the analyzed project sorted by priority.
Expand Down

0 comments on commit cc13bf6

Please sign in to comment.