Skip to content

Commit

Permalink
Update ktlint to v0.48.0 (#5625)
Browse files Browse the repository at this point in the history
* Update ktlint to v0.48.0

* Update imports for ktlint 0.48.0

* Update finding locations for ktlint 0.48.0

* Disable ktlint's NoSemicolons rule

This can be enabled again when this defect is fixed:
pinterest/ktlint#1733

* Fix new indentation issues raised by ktlint 0.48.0

* Add ContextReceiverMapping rule

* Enable ContextReceiverMapping rule on detekt codebase

* Fix deprecation warnings
  • Loading branch information
3flex committed Dec 17, 2022
1 parent fd9e52c commit 774468c
Show file tree
Hide file tree
Showing 24 changed files with 115 additions and 68 deletions.
4 changes: 4 additions & 0 deletions config/detekt/detekt.yml
Expand Up @@ -69,6 +69,8 @@ formatting:
active: true
android: false
autoCorrect: true
ContextReceiverMapping:
active: true
Filename:
active: false
FunctionReturnTypeSpacing:
Expand All @@ -77,6 +79,8 @@ formatting:
active: true
MaximumLineLength:
active: false
NoSemicolons:
active: false # https://github.com/pinterest/ktlint/issues/1733
NullableTypeSpacing:
active: true
ParameterListSpacing:
Expand Down
@@ -1,10 +1,9 @@
package io.gitlab.arturbosch.detekt.formatting

import com.pinterest.ktlint.core.KtLint
import com.pinterest.ktlint.core.Rule.VisitorModifier.RunAsLateAsPossible
import com.pinterest.ktlint.core.api.DefaultEditorConfigProperties.codeStyleSetProperty
import com.pinterest.ktlint.core.api.EditorConfigProperties
import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.core.api.editorconfig.CODE_STYLE_PROPERTY
import com.pinterest.ktlint.core.api.editorconfig.EditorConfigProperty
import io.github.detekt.psi.fileName
import io.github.detekt.psi.toFilePath
import io.gitlab.arturbosch.detekt.api.CodeSmell
Expand Down Expand Up @@ -78,21 +77,20 @@ abstract class FormattingRule(config: Config) : Rule(config) {
this.root = root
positionByOffset = KtLintLineColCalculator
.calculateLineColByOffset(KtLintLineColCalculator.normalizeText(root.text))
root.node.putUserData(KtLint.FILE_PATH_USER_DATA_KEY, root.name)

wrapping.beforeFirstNode(computeEditorConfigProperties())
root.node.visitASTNodes()
wrapping.afterLastNode()
}

open fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String>? = null
open fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String>? = null

private fun computeEditorConfigProperties(): EditorConfigProperties {
val usesEditorConfigProperties = overrideEditorConfigProperties()?.toMutableMap()
?: mutableMapOf()

if (isAndroid) {
usesEditorConfigProperties[codeStyleSetProperty] = "android"
usesEditorConfigProperties[CODE_STYLE_PROPERTY] = "android"
}

return buildMap {
Expand Down
Expand Up @@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.formatting.wrappers.BlockCommentInitialStarAl
import io.gitlab.arturbosch.detekt.formatting.wrappers.ChainWrapping
import io.gitlab.arturbosch.detekt.formatting.wrappers.CommentSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.CommentWrapping
import io.gitlab.arturbosch.detekt.formatting.wrappers.ContextReceiverMapping
import io.gitlab.arturbosch.detekt.formatting.wrappers.DiscouragedCommentLocation
import io.gitlab.arturbosch.detekt.formatting.wrappers.EnumEntryNameCase
import io.gitlab.arturbosch.detekt.formatting.wrappers.Filename
Expand Down Expand Up @@ -124,6 +125,7 @@ class KtLintMultiRule(config: Config = Config.empty) :
// Wrappers for ktlint-ruleset-experimental rules. Disabled by default.
BlockCommentInitialStarAlignment(config),
CommentWrapping(config),
ContextReceiverMapping(config),
DiscouragedCommentLocation(config),
FunctionReturnTypeSpacing(config),
FunKeywordSpacing(config),
Expand Down
@@ -1,7 +1,8 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.core.api.editorconfig.MAX_LINE_LENGTH_PROPERTY
import com.pinterest.ktlint.ruleset.standard.ArgumentListWrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -27,9 +28,9 @@ class ArgumentListWrapping(config: Config) : FormattingRule(config) {
@Configuration("maximum line length")
private val maxLineLength by configWithAndroidVariants(120, 100)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
DefaultEditorConfigProperties.indentSizeProperty to indentSize.toString(),
DefaultEditorConfigProperties.maxLineLengthProperty to maxLineLength.toString()
INDENT_SIZE_PROPERTY to indentSize.toString(),
MAX_LINE_LENGTH_PROPERTY to maxLineLength.toString()
)
}
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.ruleset.experimental.CommentWrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -21,8 +21,8 @@ class CommentWrapping(config: Config) : FormattingRule(config) {
@Configuration("indentation size")
private val indentSize by config(4)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
DefaultEditorConfigProperties.indentSizeProperty to indentSize.toString(),
INDENT_SIZE_PROPERTY to indentSize.toString(),
)
}
@@ -0,0 +1,34 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.core.api.editorconfig.MAX_LINE_LENGTH_PROPERTY
import com.pinterest.ktlint.ruleset.experimental.ContextReceiverWrappingRule
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/#content-receiver-wrapping) for documentation.
*/
@AutoCorrectable(since = "1.23.0")
class ContextReceiverMapping(config: Config) : FormattingRule(config) {

override val wrapping = ContextReceiverWrappingRule()
override val issue = issueFor("Reports mis-indented code")

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

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

override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
MAX_LINE_LENGTH_PROPERTY to maxLineLength.toString(),
INDENT_SIZE_PROPERTY to indentSize.toString(),
)
}
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INSERT_FINAL_NEWLINE_PROPERTY
import com.pinterest.ktlint.ruleset.standard.FinalNewlineRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -26,6 +26,6 @@ class FinalNewline(config: Config) : FormattingRule(config) {
@Configuration("report absence or presence of a newline")
private val insertFinalNewLine by config(true)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
mapOf(DefaultEditorConfigProperties.insertNewLineProperty to insertFinalNewLine.toString())
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(INSERT_FINAL_NEWLINE_PROPERTY to insertFinalNewLine.toString())
}
@@ -1,7 +1,8 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.core.api.editorconfig.MAX_LINE_LENGTH_PROPERTY
import com.pinterest.ktlint.ruleset.experimental.FunctionSignatureRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand Down Expand Up @@ -32,12 +33,12 @@ class FunctionSignature(config: Config) : FormattingRule(config) {
@Configuration("indentation size")
private val indentSize by config(4)

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

import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.ruleset.standard.ImportOrderingRule
import com.pinterest.ktlint.ruleset.standard.ImportOrderingRule.Companion.IJ_KOTLIN_IMPORTS_LAYOUT_PROPERTY
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.configWithAndroidVariants
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
Expand All @@ -24,8 +25,8 @@ class ImportOrdering(config: Config) : FormattingRule(config) {
@Configuration("the import ordering layout")
private val layout: String by configWithAndroidVariants(IDEA_PATTERN, ASCII_PATTERN)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
mapOf(ImportOrderingRule.ideaImportsLayoutProperty to layout)
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(IJ_KOTLIN_IMPORTS_LAYOUT_PROPERTY to layout)

companion object {
const val ASCII_PATTERN = "*"
Expand Down
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.ruleset.standard.IndentationRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -28,8 +28,8 @@ class Indentation(config: Config) : FormattingRule(config) {
@Suppress("UnusedPrivateMember")
private val continuationIndentSize by config(4)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
DefaultEditorConfigProperties.indentSizeProperty to indentSize.toString(),
INDENT_SIZE_PROPERTY to indentSize.toString(),
)
}
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.ruleset.experimental.KdocWrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -21,8 +21,8 @@ class KdocWrapping(config: Config) : FormattingRule(config) {
@Configuration("indentation size")
private val indentSize by config(4)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
DefaultEditorConfigProperties.indentSizeProperty to indentSize.toString(),
INDENT_SIZE_PROPERTY to indentSize.toString(),
)
}
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.MAX_LINE_LENGTH_PROPERTY
import com.pinterest.ktlint.ruleset.standard.MaxLineLengthRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand Down Expand Up @@ -32,9 +32,9 @@ class MaximumLineLength(config: Config) : FormattingRule(config) {
@Configuration("ignore back ticked identifier")
private val ignoreBackTickedIdentifier by config(false)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
MaxLineLengthRule.ignoreBackTickedIdentifierProperty to ignoreBackTickedIdentifier.toString(),
DefaultEditorConfigProperties.maxLineLengthProperty to maxLineLength.toString(),
MaxLineLengthRule.IGNORE_BACKTICKED_IDENTIFIER_PROPERTY to ignoreBackTickedIdentifier.toString(),
MAX_LINE_LENGTH_PROPERTY to maxLineLength.toString(),
)
}
@@ -1,6 +1,6 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.ruleset.standard.NoWildcardImportsRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -20,9 +20,9 @@ class NoWildcardImports(config: Config) : FormattingRule(config) {
@Configuration("Defines allowed wildcard imports")
private val packagesToUseImportOnDemandProperty by config(ALLOWED_WILDCARD_IMPORTS)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
NoWildcardImportsRule.packagesToUseImportOnDemandProperty to packagesToUseImportOnDemandProperty
NoWildcardImportsRule.IJ_KOTLIN_PACKAGES_TO_USE_IMPORT_ON_DEMAND to packagesToUseImportOnDemandProperty
)

companion object {
Expand Down
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.MAX_LINE_LENGTH_PROPERTY
import com.pinterest.ktlint.ruleset.standard.ParameterListWrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand Down Expand Up @@ -29,8 +29,8 @@ class ParameterListWrapping(config: Config) : FormattingRule(config) {
@Suppress("UnusedPrivateMember")
private val indentSize by config(4)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
DefaultEditorConfigProperties.maxLineLengthProperty to maxLineLength.toString()
MAX_LINE_LENGTH_PROPERTY to maxLineLength.toString()
)
}
@@ -1,6 +1,6 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.ruleset.standard.TrailingCommaOnCallSiteRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.configWithAndroidVariants
Expand Down Expand Up @@ -30,8 +30,8 @@ class TrailingCommaOnCallSite(config: Config) : FormattingRule(config) {
defaultAndroidValue = false,
)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
TrailingCommaOnCallSiteRule.allowTrailingCommaOnCallSiteProperty to useTrailingCommaOnCallSite.toString(),
TrailingCommaOnCallSiteRule.TRAILING_COMMA_ON_CALL_SITE_PROPERTY to useTrailingCommaOnCallSite.toString(),
)
}
@@ -1,6 +1,6 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.ruleset.standard.TrailingCommaOnDeclarationSiteRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.configWithAndroidVariants
Expand Down Expand Up @@ -30,9 +30,9 @@ class TrailingCommaOnDeclarationSite(config: Config) : FormattingRule(config) {
defaultAndroidValue = false,
)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
TrailingCommaOnDeclarationSiteRule.allowTrailingCommaProperty to
TrailingCommaOnDeclarationSiteRule.TRAILING_COMMA_ON_DECLARATION_SITE_PROPERTY to
useTrailingCommaOnDeclarationSite.toString(),
)
}
@@ -1,7 +1,7 @@
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.core.api.editorconfig.EditorConfigProperty
import com.pinterest.ktlint.core.api.editorconfig.INDENT_SIZE_PROPERTY
import com.pinterest.ktlint.ruleset.standard.WrappingRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.config
Expand All @@ -23,8 +23,8 @@ class Wrapping(config: Config) : FormattingRule(config) {
@Configuration("indentation size")
private val indentSize by config(4)

override fun overrideEditorConfigProperties(): Map<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
override fun overrideEditorConfigProperties(): Map<EditorConfigProperty<*>, String> =
mapOf(
DefaultEditorConfigProperties.indentSizeProperty to indentSize.toString(),
INDENT_SIZE_PROPERTY to indentSize.toString(),
)
}
5 changes: 5 additions & 0 deletions detekt-formatting/src/main/resources/config/config.yml
Expand Up @@ -26,6 +26,11 @@ formatting:
active: false
autoCorrect: true
indentSize: 4
ContextReceiverMapping:
active: false
autoCorrect: true
maxLineLength: 120
indentSize: 4
DiscouragedCommentLocation:
active: false
autoCorrect: true
Expand Down

0 comments on commit 774468c

Please sign in to comment.