Skip to content

Commit

Permalink
Add missing ktlint rule wrappers (#5256)
Browse files Browse the repository at this point in the history
* Refactor formatting ruleset lists

This reflects current status at 0.46.1 for standard vs experimental rules

* Sort experimental rules

* Add FunctionReturnTypeSpacing rule

* Add FunctionSignature rule

* Add FunctionStartOfBodySpacing rule

* Add NullableTypeSpacing rule

* Add ParameterListSpacing rule

* Add SpacingBetweenFunctionNameAndOpeningParenthesis rule

* Add TypeParameterListSpacing rule
  • Loading branch information
3flex committed Sep 2, 2022
1 parent cb3bf43 commit 1122d5d
Show file tree
Hide file tree
Showing 10 changed files with 210 additions and 14 deletions.
12 changes: 12 additions & 0 deletions config/detekt/detekt.yml
Expand Up @@ -71,8 +71,20 @@ formatting:
autoCorrect: true
Filename:
active: false
FunctionReturnTypeSpacing:
active: true
FunctionStartOfBodySpacing:
active: true
MaximumLineLength:
active: false
NullableTypeSpacing:
active: true
ParameterListSpacing:
active: true
SpacingBetweenFunctionNameAndOpeningParenthesis:
active: true
TypeParameterListSpacing:
active: true

naming:
ClassNaming:
Expand Down
Expand Up @@ -14,6 +14,9 @@ import io.gitlab.arturbosch.detekt.formatting.wrappers.EnumEntryNameCase
import io.gitlab.arturbosch.detekt.formatting.wrappers.Filename
import io.gitlab.arturbosch.detekt.formatting.wrappers.FinalNewline
import io.gitlab.arturbosch.detekt.formatting.wrappers.FunKeywordSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.FunctionReturnTypeSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.FunctionSignature
import io.gitlab.arturbosch.detekt.formatting.wrappers.FunctionStartOfBodySpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.FunctionTypeReferenceSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.ImportOrdering
import io.gitlab.arturbosch.detekt.formatting.wrappers.Indentation
Expand All @@ -35,7 +38,9 @@ import io.gitlab.arturbosch.detekt.formatting.wrappers.NoTrailingSpaces
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoUnitReturn
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoUnusedImports
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoWildcardImports
import io.gitlab.arturbosch.detekt.formatting.wrappers.NullableTypeSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.PackageName
import io.gitlab.arturbosch.detekt.formatting.wrappers.ParameterListSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.ParameterListWrapping
import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingAroundAngleBrackets
import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingAroundColon
Expand All @@ -50,9 +55,11 @@ import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingAroundRangeOperato
import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingAroundUnaryOperator
import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingBetweenDeclarationsWithAnnotations
import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingBetweenDeclarationsWithComments
import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingBetweenFunctionNameAndOpeningParenthesis
import io.gitlab.arturbosch.detekt.formatting.wrappers.StringTemplate
import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingComma
import io.gitlab.arturbosch.detekt.formatting.wrappers.TypeArgumentListSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.TypeParameterListSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.UnnecessaryParenthesesBeforeTrailingLambda
import io.gitlab.arturbosch.detekt.formatting.wrappers.Wrapping
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
Expand All @@ -70,18 +77,24 @@ class KtLintMultiRule(config: Config = Config.empty) :

override val rules: List<Rule> = listOf(
// Wrappers for ktlint-ruleset-standard rules. Enabled by default.
AnnotationOnSeparateLine(config),
AnnotationSpacing(config),
ArgumentListWrapping(config),
ChainWrapping(config),
CommentSpacing(config),
EnumEntryNameCase(config),
Filename(config),
FinalNewline(config),
ImportOrdering(config),
Indentation(config),
MaximumLineLength(config),
ModifierOrdering(config),
MultiLineIfElse(config),
NoBlankLineBeforeRbrace(config),
NoBlankLinesInChainedMethodCalls(config),
NoConsecutiveBlankLines(config),
NoEmptyClassBody(config),
NoEmptyFirstLineInMethodBlock(config),
NoLineBreakAfterElse(config),
NoLineBreakBeforeAssignment(config),
NoMultipleSpaces(config),
Expand All @@ -90,40 +103,41 @@ class KtLintMultiRule(config: Config = Config.empty) :
NoUnitReturn(config),
NoUnusedImports(config),
NoWildcardImports(config),
PackageName(config),
ParameterListWrapping(config),
SpacingAroundAngleBrackets(config),
SpacingAroundColon(config),
SpacingAroundComma(config),
SpacingAroundCurly(config),
SpacingAroundDot(config),
SpacingAroundDoubleColon(config),
SpacingAroundKeyword(config),
SpacingAroundOperators(config),
SpacingAroundParens(config),
SpacingAroundRangeOperator(config),
SpacingAroundUnaryOperator(config),
SpacingBetweenDeclarationsWithAnnotations(config),
SpacingBetweenDeclarationsWithComments(config),
StringTemplate(config),
TrailingComma(config), // in standard ruleset but not enabled by default
Wrapping(config),

// Wrappers for ktlint-ruleset-experimental rules. Disabled by default.
AnnotationOnSeparateLine(config),
AnnotationSpacing(config),
ArgumentListWrapping(config),
BlockCommentInitialStarAlignment(config),
CommentWrapping(config),
DiscouragedCommentLocation(config),
EnumEntryNameCase(config),
FunctionTypeReferenceSpacing(config),
FunctionReturnTypeSpacing(config),
FunKeywordSpacing(config),
FunctionSignature(config),
FunctionStartOfBodySpacing(config),
FunctionTypeReferenceSpacing(config),
KdocWrapping(config),
ModifierListSpacing(config),
MultiLineIfElse(config),
NoEmptyFirstLineInMethodBlock(config),
PackageName(config),
SpacingAroundAngleBrackets(config),
SpacingAroundDoubleColon(config),
SpacingAroundUnaryOperator(config),
SpacingBetweenDeclarationsWithAnnotations(config),
SpacingBetweenDeclarationsWithComments(config),
TrailingComma(config),
NullableTypeSpacing(config),
ParameterListSpacing(config),
SpacingBetweenFunctionNameAndOpeningParenthesis(config),
TypeArgumentListSpacing(config),
TypeParameterListSpacing(config),
UnnecessaryParenthesesBeforeTrailingLambda(config),
)

Expand Down
@@ -0,0 +1,17 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.experimental.FunctionReturnTypeSpacingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#function-return-type-spacing) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class FunctionReturnTypeSpacing(config: Config) : FormattingRule(config) {

override val wrapping = FunctionReturnTypeSpacingRule()
override val issue = issueFor("Checks the spacing between colon and return type.")
}
@@ -0,0 +1,43 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.core.api.DefaultEditorConfigProperties
import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.ruleset.experimental.FunctionSignatureRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
import io.gitlab.arturbosch.detekt.api.configWithAndroidVariants
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.api.internal.Configuration
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#function-signature) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class FunctionSignature(config: Config) : FormattingRule(config) {

override val wrapping = FunctionSignatureRule()
override val issue = issueFor("Format signature to be single when possible, multiple lines otherwise.")

@Configuration("parameter count means multiline threshold")
private val forceMultilineWhenParameterCountGreaterOrEqualThan by config(2_147_483_647)

@Configuration("indentation size")
private val functionBodyExpressionWrapping by config("default")

@Configuration("maximum line length")
private val maxLineLength by configWithAndroidVariants(120, 100)

@Configuration("indentation size")
private val indentSize by config(4)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
mapOf(
FunctionSignatureRule.forceMultilineWhenParameterCountGreaterOrEqualThanProperty to
forceMultilineWhenParameterCountGreaterOrEqualThan.toString(),
FunctionSignatureRule.functionBodyExpressionWrappingProperty to functionBodyExpressionWrapping,
DefaultEditorConfigProperties.maxLineLengthProperty to maxLineLength.toString(),
DefaultEditorConfigProperties.indentSizeProperty to indentSize.toString(),
)
}
@@ -0,0 +1,17 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.experimental.FunctionStartOfBodySpacingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#function-start-of-body-spacing) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class FunctionStartOfBodySpacing(config: Config) : FormattingRule(config) {

override val wrapping = FunctionStartOfBodySpacingRule()
override val issue = issueFor("Check for consistent spacing before start of function body.")
}
@@ -0,0 +1,17 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.experimental.NullableTypeSpacingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#nullable-type-spacing) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class NullableTypeSpacing(config: Config) : FormattingRule(config) {

override val wrapping = NullableTypeSpacingRule()
override val issue = issueFor("Ensure no spaces in nullable type.")
}
@@ -0,0 +1,17 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.experimental.ParameterListSpacingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#parameter-list-spacing) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class ParameterListSpacing(config: Config) : FormattingRule(config) {

override val wrapping = ParameterListSpacingRule()
override val issue = issueFor("Ensure consistent spacing inside the parameter list.")
}
@@ -0,0 +1,17 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.experimental.SpacingBetweenFunctionNameAndOpeningParenthesisRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#spacing-between-function-name-and-opening-parenthesis) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class SpacingBetweenFunctionNameAndOpeningParenthesis(config: Config) : FormattingRule(config) {

override val wrapping = SpacingBetweenFunctionNameAndOpeningParenthesisRule()
override val issue = issueFor("Ensure consistent spacing between function name and opening parenthesis.")
}
@@ -0,0 +1,17 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.experimental.TypeParameterListSpacingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint docs](https://pinterest.github.io/ktlint/rules/experimental/#type-parameter-list-spacing) for
* documentation.
*/
@AutoCorrectable(since = "1.22.0")
class TypeParameterListSpacing(config: Config) : FormattingRule(config) {

override val wrapping = TypeParameterListSpacingRule()
override val issue = issueFor("Check spacing after a type parameter list in function and class declarations.")
}
25 changes: 25 additions & 0 deletions detekt-formatting/src/main/resources/config/config.yml
Expand Up @@ -41,6 +41,19 @@ formatting:
FunKeywordSpacing:
active: false
autoCorrect: true
FunctionReturnTypeSpacing:
active: false
autoCorrect: true
FunctionSignature:
active: false
autoCorrect: true
forceMultilineWhenParameterCountGreaterOrEqualThan: 2147483647
functionBodyExpressionWrapping: 'default'
maxLineLength: 120
indentSize: 4
FunctionStartOfBodySpacing:
active: false
autoCorrect: true
FunctionTypeReferenceSpacing:
active: false
autoCorrect: true
Expand Down Expand Up @@ -108,9 +121,15 @@ formatting:
NoWildcardImports:
active: true
packagesToUseImportOnDemandProperty: 'java.util.*,kotlinx.android.synthetic.**'
NullableTypeSpacing:
active: false
autoCorrect: true
PackageName:
active: true
autoCorrect: true
ParameterListSpacing:
active: false
autoCorrect: true
ParameterListWrapping:
active: true
autoCorrect: true
Expand Down Expand Up @@ -154,6 +173,9 @@ formatting:
SpacingBetweenDeclarationsWithComments:
active: true
autoCorrect: true
SpacingBetweenFunctionNameAndOpeningParenthesis:
active: false
autoCorrect: true
StringTemplate:
active: true
autoCorrect: true
Expand All @@ -165,6 +187,9 @@ formatting:
TypeArgumentListSpacing:
active: false
autoCorrect: true
TypeParameterListSpacing:
active: false
autoCorrect: true
UnnecessaryParenthesesBeforeTrailingLambda:
active: false
autoCorrect: true
Expand Down

0 comments on commit 1122d5d

Please sign in to comment.