Skip to content

Commit

Permalink
Use the new configure config for formatting (#4352)
Browse files Browse the repository at this point in the history
* Improve

* Don't include formatting config inside default-detekt-config.yml

* Extract code from ConfigPrinter

* Create config file for detekt-formatting
  • Loading branch information
BraisGabin committed Jan 25, 2022
1 parent 4a0076f commit c536107
Show file tree
Hide file tree
Showing 8 changed files with 208 additions and 192 deletions.
1 change: 0 additions & 1 deletion detekt-core/build.gradle.kts
Expand Up @@ -16,7 +16,6 @@ dependencies {
implementation(projects.detektUtils)

testRuntimeOnly(projects.detektRules)
testRuntimeOnly(projects.detektFormatting)
testImplementation(projects.detektTest)
testImplementation(testFixtures(projects.detektApi))
testImplementation(libs.mockk)
Expand Down
140 changes: 0 additions & 140 deletions detekt-core/src/main/resources/default-detekt-config.yml
Expand Up @@ -276,146 +276,6 @@ exceptions:
- 'RuntimeException'
- 'Throwable'

formatting:
active: true
android: false
autoCorrect: true
AnnotationOnSeparateLine:
active: false
autoCorrect: true
AnnotationSpacing:
active: false
autoCorrect: true
ArgumentListWrapping:
active: false
autoCorrect: true
indentSize: 4
maxLineLength: 120
ChainWrapping:
active: true
autoCorrect: true
CommentSpacing:
active: true
autoCorrect: true
EnumEntryNameCase:
active: false
autoCorrect: true
Filename:
active: true
FinalNewline:
active: true
autoCorrect: true
insertFinalNewLine: true
ImportOrdering:
active: true
autoCorrect: true
layout: '*,java.**,javax.**,kotlin.**,^'
Indentation:
active: true
autoCorrect: true
indentSize: 4
continuationIndentSize: 4
MaximumLineLength:
active: true
maxLineLength: 120
ignoreBackTickedIdentifier: false
ModifierOrdering:
active: true
autoCorrect: true
MultiLineIfElse:
active: false
autoCorrect: true
NoBlankLineBeforeRbrace:
active: true
autoCorrect: true
NoConsecutiveBlankLines:
active: true
autoCorrect: true
NoEmptyClassBody:
active: true
autoCorrect: true
NoEmptyFirstLineInMethodBlock:
active: false
autoCorrect: true
NoLineBreakAfterElse:
active: true
autoCorrect: true
NoLineBreakBeforeAssignment:
active: true
autoCorrect: true
NoMultipleSpaces:
active: true
autoCorrect: true
NoSemicolons:
active: true
autoCorrect: true
NoTrailingSpaces:
active: true
autoCorrect: true
NoUnitReturn:
active: true
autoCorrect: true
NoUnusedImports:
active: true
autoCorrect: true
NoWildcardImports:
active: true
PackageName:
active: false
autoCorrect: true
ParameterListWrapping:
active: true
autoCorrect: true
indentSize: 4
maxLineLength: 120
SpacingAroundAngleBrackets:
active: false
autoCorrect: true
SpacingAroundColon:
active: true
autoCorrect: true
SpacingAroundComma:
active: true
autoCorrect: true
SpacingAroundCurly:
active: true
autoCorrect: true
SpacingAroundDot:
active: true
autoCorrect: true
SpacingAroundDoubleColon:
active: false
autoCorrect: true
SpacingAroundKeyword:
active: true
autoCorrect: true
SpacingAroundOperators:
active: true
autoCorrect: true
SpacingAroundParens:
active: true
autoCorrect: true
SpacingAroundRangeOperator:
active: true
autoCorrect: true
SpacingAroundUnaryOperator:
active: false
autoCorrect: true
SpacingBetweenDeclarationsWithAnnotations:
active: false
autoCorrect: true
SpacingBetweenDeclarationsWithComments:
active: false
autoCorrect: true
StringTemplate:
active: true
autoCorrect: true
TrailingComma:
active: false
autoCorrect: true
allowTrailingComma: false
allowTrailingCommaOnCallSite: false

naming:
active: true
BooleanPropertyNaming:
Expand Down
139 changes: 139 additions & 0 deletions detekt-formatting/src/main/resources/config/config.yml
@@ -0,0 +1,139 @@
formatting:
active: true
android: false
autoCorrect: true
AnnotationOnSeparateLine:
active: false
autoCorrect: true
AnnotationSpacing:
active: false
autoCorrect: true
ArgumentListWrapping:
active: false
autoCorrect: true
indentSize: 4
maxLineLength: 120
ChainWrapping:
active: true
autoCorrect: true
CommentSpacing:
active: true
autoCorrect: true
EnumEntryNameCase:
active: false
autoCorrect: true
Filename:
active: true
FinalNewline:
active: true
autoCorrect: true
insertFinalNewLine: true
ImportOrdering:
active: true
autoCorrect: true
layout: '*,java.**,javax.**,kotlin.**,^'
Indentation:
active: true
autoCorrect: true
indentSize: 4
continuationIndentSize: 4
MaximumLineLength:
active: true
maxLineLength: 120
ignoreBackTickedIdentifier: false
ModifierOrdering:
active: true
autoCorrect: true
MultiLineIfElse:
active: false
autoCorrect: true
NoBlankLineBeforeRbrace:
active: true
autoCorrect: true
NoConsecutiveBlankLines:
active: true
autoCorrect: true
NoEmptyClassBody:
active: true
autoCorrect: true
NoEmptyFirstLineInMethodBlock:
active: false
autoCorrect: true
NoLineBreakAfterElse:
active: true
autoCorrect: true
NoLineBreakBeforeAssignment:
active: true
autoCorrect: true
NoMultipleSpaces:
active: true
autoCorrect: true
NoSemicolons:
active: true
autoCorrect: true
NoTrailingSpaces:
active: true
autoCorrect: true
NoUnitReturn:
active: true
autoCorrect: true
NoUnusedImports:
active: true
autoCorrect: true
NoWildcardImports:
active: true
PackageName:
active: false
autoCorrect: true
ParameterListWrapping:
active: true
autoCorrect: true
indentSize: 4
maxLineLength: 120
SpacingAroundAngleBrackets:
active: false
autoCorrect: true
SpacingAroundColon:
active: true
autoCorrect: true
SpacingAroundComma:
active: true
autoCorrect: true
SpacingAroundCurly:
active: true
autoCorrect: true
SpacingAroundDot:
active: true
autoCorrect: true
SpacingAroundDoubleColon:
active: false
autoCorrect: true
SpacingAroundKeyword:
active: true
autoCorrect: true
SpacingAroundOperators:
active: true
autoCorrect: true
SpacingAroundParens:
active: true
autoCorrect: true
SpacingAroundRangeOperator:
active: true
autoCorrect: true
SpacingAroundUnaryOperator:
active: false
autoCorrect: true
SpacingBetweenDeclarationsWithAnnotations:
active: false
autoCorrect: true
SpacingBetweenDeclarationsWithComments:
active: false
autoCorrect: true
StringTemplate:
active: true
autoCorrect: true
TrailingComma:
active: false
autoCorrect: true
allowTrailingComma: false
allowTrailingCommaOnCallSite: false
2 changes: 1 addition & 1 deletion detekt-generator/build.gradle.kts
Expand Up @@ -56,7 +56,7 @@ val generateDocumentation by tasks.registering(JavaExec::class) {
mainClass.set("io.gitlab.arturbosch.detekt.generator.Main")
args = listOf(
"--input",
ruleModules.joinToString(",") + "," + "${rootProject.rootDir}/detekt-formatting/src/main/kotlin",
ruleModules.plus("${rootProject.rootDir}/detekt-formatting/src/main/kotlin").joinToString(","),
"--documentation",
documentationDir,
"--config",
Expand Down
Expand Up @@ -4,9 +4,12 @@ import io.gitlab.arturbosch.detekt.generator.collection.RuleSetPage
import io.gitlab.arturbosch.detekt.generator.out.MarkdownWriter
import io.gitlab.arturbosch.detekt.generator.out.PropertiesWriter
import io.gitlab.arturbosch.detekt.generator.out.YamlWriter
import io.gitlab.arturbosch.detekt.generator.out.yaml
import io.gitlab.arturbosch.detekt.generator.printer.DeprecatedPrinter
import io.gitlab.arturbosch.detekt.generator.printer.RuleSetPagePrinter
import io.gitlab.arturbosch.detekt.generator.printer.defaultconfig.ConfigPrinter
import io.gitlab.arturbosch.detekt.generator.printer.defaultconfig.printRuleSetPage
import java.nio.file.Paths

class DetektPrinter(private val arguments: GeneratorArgs) {

Expand All @@ -20,8 +23,17 @@ class DetektPrinter(private val arguments: GeneratorArgs) {
jekyllHeader(it.ruleSet.name) + "\n" + RuleSetPagePrinter.print(it)
}
}
yamlWriter.write(arguments.configPath, "default-detekt-config") { ConfigPrinter.print(pages) }
propertiesWriter.write(arguments.configPath, "deprecation") { DeprecatedPrinter.print(pages) }
yamlWriter.write(arguments.configPath, "default-detekt-config") {
ConfigPrinter.print(pages.filterNot { it.ruleSet.name == "formatting" })
}
propertiesWriter.write(arguments.configPath, "deprecation") {
DeprecatedPrinter.print(pages.filterNot { it.ruleSet.name == "formatting" })
}
yamlWriter.write(Paths.get("../detekt-formatting/src/main/resources/config"), "config") {
yaml {
printRuleSetPage(pages.first { it.ruleSet.name == "formatting" })
}
}
}

private fun jekyllHeader(ruleSet: String): String {
Expand Down
@@ -1,14 +1,6 @@
package io.gitlab.arturbosch.detekt.generator.printer.defaultconfig

import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.generator.collection.Configuration
import io.gitlab.arturbosch.detekt.generator.collection.Rule
import io.gitlab.arturbosch.detekt.generator.collection.RuleSetPage
import io.gitlab.arturbosch.detekt.generator.collection.RuleSetProvider
import io.gitlab.arturbosch.detekt.generator.out.YamlNode
import io.gitlab.arturbosch.detekt.generator.out.keyValue
import io.gitlab.arturbosch.detekt.generator.out.list
import io.gitlab.arturbosch.detekt.generator.out.node
import io.gitlab.arturbosch.detekt.generator.out.yaml
import io.gitlab.arturbosch.detekt.generator.printer.DocumentationPrinter

Expand All @@ -28,45 +20,7 @@ object ConfigPrinter : DocumentationPrinter<List<RuleSetPage>> {
emptyLine()

item.sortedBy { it.ruleSet.name }
.forEach { printRuleSet(it.ruleSet, it.rules) }
}
}

@Suppress("ComplexMethod") // preserving the declarative structure while building the dsl
private fun YamlNode.printRuleSet(ruleSet: RuleSetProvider, rules: List<Rule>) {
node(ruleSet.name) {
keyValue { Config.ACTIVE_KEY to "${ruleSet.defaultActivationStatus.active}" }
val ruleSetExclusion = exclusions.singleOrNull { ruleSet.name in it.ruleSets }
if (ruleSetExclusion != null) {
keyValue { Config.EXCLUDES_KEY to ruleSetExclusion.pattern }
}

ruleSet.configuration.forEach { printConfiguration(it) }

rules.forEach { rule ->
node(rule.name) {
keyValue { Config.ACTIVE_KEY to "${rule.defaultActivationStatus.active}" }
if (rule.autoCorrect) {
keyValue { Config.AUTO_CORRECT_KEY to "true" }
}
val ruleExclusion = exclusions.singleOrNull { it.isExcluded(rule) }
if (ruleExclusion != null) {
keyValue { Config.EXCLUDES_KEY to ruleExclusion.pattern }
}
rule.configuration.forEach { printConfiguration(it) }
}
}
emptyLine()
}
}

private fun YamlNode.printConfiguration(configuration: Configuration) {
if (configuration.isDeprecated()) return

if (configuration.isDefaultValueNonEmptyList()) {
list(configuration.name, configuration.getDefaultValueAsList())
} else {
keyValue { configuration.name to configuration.defaultValue.getQuotedIfNecessary() }
.forEach { printRuleSetPage(it) }
}
}

Expand Down

0 comments on commit c536107

Please sign in to comment.