Skip to content

Commit

Permalink
Bump ktlint to version 0.46.1 (detekt#5044)
Browse files Browse the repository at this point in the history
* Bump ktlint to v0.46.1

* add NoBlankLinesInChainedMethodCalls.kt rule

* set ActiveByDefault to 1.22.0

* fix various detekt issues

* fix review notes

* fix AnnotationOnSeparateLine in github-milestone-report.main.kts
  • Loading branch information
kvn-stgl authored and VitalyVPinchuk committed Jul 25, 2022
1 parent 83459d0 commit b191cd1
Show file tree
Hide file tree
Showing 35 changed files with 194 additions and 79 deletions.
3 changes: 2 additions & 1 deletion code-coverage-report/build.gradle.kts
Expand Up @@ -51,7 +51,8 @@ tasks.check {
configurations.allCodeCoverageReportClassDirectories.get().attributes {
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category::class, Category.LIBRARY))
attributes.attribute(
LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements::class, LibraryElements.CLASSES)
LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
objects.named(LibraryElements::class, LibraryElements.CLASSES)
)
}

Expand Down
Expand Up @@ -14,7 +14,10 @@ import java.nio.file.Paths
/**
* Specifies a position within a source code fragment.
*/
data class Location @Deprecated("Consider relative path by passing a [FilePath]") @JvmOverloads constructor(
data class Location
@Deprecated("Consider relative path by passing a [FilePath]")
@JvmOverloads
constructor(
val source: SourceLocation,
val text: TextLocation,
@Deprecated(
Expand Down
Expand Up @@ -27,7 +27,9 @@ class AnnotationExcluderSpec(private val env: KotlinCoreEnvironment) {
""".trimIndent()
)

@ParameterizedTest(name = "Given {0} is excluded when the {1} is found then the excluder returns {2} without type solving")
@ParameterizedTest(
name = "Given {0} is excluded when the {1} is found then the excluder returns {2} without type solving"
)
@CsvFileSource(resources = ["/annotation_excluder.csv"])
fun `all cases`(exclusion: String, annotation: String, shouldExclude: Boolean) {
val (file, ktAnnotation) = createKtFile(annotation)
Expand All @@ -36,7 +38,9 @@ class AnnotationExcluderSpec(private val env: KotlinCoreEnvironment) {
assertThat(excluder.shouldExclude(listOf(ktAnnotation))).isEqualTo(shouldExclude)
}

@ParameterizedTest(name = "Given {0} is excluded when the {1} is found then the excluder returns {2} with type solving")
@ParameterizedTest(
name = "Given {0} is excluded when the {1} is found then the excluder returns {2} with type solving"
)
@CsvFileSource(resources = ["/annotation_excluder.csv"])
fun `all cases - Type Solving`(exclusion: String, annotation: String, shouldExclude: Boolean) {
val (file, ktAnnotation) = createKtFile(annotation)
Expand Down
Expand Up @@ -41,7 +41,9 @@ class PathMatchersSpec {
fun `should work as a regex path matcher when syntax not specified`() {
assertThatThrownBy { pathMatcher("regex:.*/detekt/api/.*") }
.isInstanceOf(IllegalArgumentException::class.java)
.hasMessage("Only globbing patterns are supported as they are treated os-independently by the PathMatcher api.")
.hasMessage(
"Only globbing patterns are supported as they are treated os-independently by the PathMatcher api."
)
}
}
}
Expand Up @@ -57,7 +57,9 @@ class YamlConfigSpec {
@Suppress("UNUSED_VARIABLE")
val ignored = config.valueOrDefault("style", "")
}
.withMessage("Value \"{WildcardImport={active=true}, NoElseInWhenExpression={active=true}, MagicNumber={active=true, ignoreNumbers=[-1, 0, 1, 2]}}\" set for config parameter \"style\" is not of required type String.")
.withMessage(
"Value \"{WildcardImport={active=true}, NoElseInWhenExpression={active=true}, MagicNumber={active=true, ignoreNumbers=[-1, 0, 1, 2]}}\" set for config parameter \"style\" is not of required type String."
)
}
}

Expand Down Expand Up @@ -94,7 +96,9 @@ class YamlConfigSpec {
.subConfig("Rule")
.valueOrDefault("threshold", 6)
}
.withMessage("Value \"v5.7\" set for config parameter \"RuleSet > Rule > threshold\" is not of required type Int.")
.withMessage(
"Value \"v5.7\" set for config parameter \"RuleSet > Rule > threshold\" is not of required type Int."
)
}

@Test
Expand All @@ -105,7 +109,9 @@ class YamlConfigSpec {
.subConfig("Rule")
.valueOrDefault("active", 1)
}
.withMessage("Value \"[]\" set for config parameter \"RuleSet > Rule > active\" is not of required type Int.")
.withMessage(
"Value \"[]\" set for config parameter \"RuleSet > Rule > active\" is not of required type Int."
)
}
}

Expand Down
Expand Up @@ -3,7 +3,7 @@ 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.Rule.VisitorModifier.RunOnRootNodeOnly
import com.pinterest.ktlint.core.api.FeatureInAlphaState
import com.pinterest.ktlint.core.api.DefaultEditorConfigProperties.codeStyleSetProperty
import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import io.github.detekt.psi.fileName
import io.github.detekt.psi.toFilePath
Expand All @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
/**
* Rule to detect formatting violations.
*/
@OptIn(FeatureInAlphaState::class)
abstract class FormattingRule(config: Config) : Rule(config) {

abstract val wrapping: com.pinterest.ktlint.core.Rule
Expand All @@ -53,15 +52,20 @@ abstract class FormattingRule(config: Config) : Rule(config) {

override fun visit(root: KtFile) {
this.root = root
root.node.putUserData(KtLint.ANDROID_USER_DATA_KEY, isAndroid)
positionByOffset = KtLintLineColCalculator
.calculateLineColByOffset(KtLintLineColCalculator.normalizeText(root.text))

val editorConfigProperties = overrideEditorConfigProperties()
val editorConfigProperties = overrideEditorConfigProperties()?.toMutableMap()
?: mutableMapOf()

if (!editorConfigProperties.isNullOrEmpty()) {
if (isAndroid) {
editorConfigProperties[codeStyleSetProperty] = "android"
}

if (editorConfigProperties.isNotEmpty()) {
val userData = (root.node.getUserData(KtLint.EDITOR_CONFIG_PROPERTIES_USER_DATA_KEY).orEmpty())
.toMutableMap()

editorConfigProperties.forEach { (editorConfigProperty, defaultValue) ->
userData[editorConfigProperty.type.name] = Property.builder()
.name(editorConfigProperty.type.name)
Expand All @@ -81,18 +85,6 @@ abstract class FormattingRule(config: Config) : Rule(config) {
return
}

// KtLint 0.44.0 is assuming that KtLint.EDITOR_CONFIG_USER_DATA_KEY is available on all the nodes.
// If not, it crashes with a NPE. Here we're patching their behavior.
// This block is deprecated and will be removed in KtLint 0.46. But we have to suppress the
// deprecation warning because the ci runs with -Werror.
@Suppress("DEPRECATION")
if (node.getUserData(KtLint.EDITOR_CONFIG_USER_DATA_KEY) == null) {
node.putUserData(
KtLint.EDITOR_CONFIG_USER_DATA_KEY,
com.pinterest.ktlint.core.EditorConfig.Companion.fromMap(emptyMap())
)
}

wrapping.visit(node, autoCorrect) { offset, message, _ ->
val (line, column) = positionByOffset(offset)
val location = Location(
Expand Down
Expand Up @@ -24,6 +24,7 @@ import io.gitlab.arturbosch.detekt.formatting.wrappers.ModifierListSpacing
import io.gitlab.arturbosch.detekt.formatting.wrappers.ModifierOrdering
import io.gitlab.arturbosch.detekt.formatting.wrappers.MultiLineIfElse
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoBlankLineBeforeRbrace
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoBlankLinesInChainedMethodCalls
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoConsecutiveBlankLines
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoEmptyClassBody
import io.gitlab.arturbosch.detekt.formatting.wrappers.NoEmptyFirstLineInMethodBlock
Expand Down Expand Up @@ -77,6 +78,7 @@ class KtLintMultiRule(config: Config = Config.empty) : MultiRule() {
MaximumLineLength(config),
ModifierOrdering(config),
NoBlankLineBeforeRbrace(config),
NoBlankLinesInChainedMethodCalls(config),
NoConsecutiveBlankLines(config),
NoEmptyClassBody(config),
NoLineBreakAfterElse(config),
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@AutoCorrectable(since = "1.0.0")
@ActiveByDefault(since = "1.22.0")
class AnnotationOnSeparateLine(config: Config) : FormattingRule(config) {

override val wrapping = AnnotationRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@AutoCorrectable(since = "1.0.0")
@ActiveByDefault(since = "1.22.0")
class AnnotationSpacing(config: Config) : FormattingRule(config) {

override val wrapping = AnnotationSpacingRule()
Expand Down
@@ -1,21 +1,21 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.core.api.DefaultEditorConfigProperties
import com.pinterest.ktlint.core.api.FeatureInAlphaState
import com.pinterest.ktlint.core.api.UsesEditorConfigProperties
import com.pinterest.ktlint.ruleset.experimental.ArgumentListWrappingRule
import com.pinterest.ktlint.ruleset.standard.ArgumentListWrappingRule
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.ActiveByDefault
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-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@OptIn(FeatureInAlphaState::class)
@AutoCorrectable(since = "1.0.0")
@ActiveByDefault(since = "1.22.0")
class ArgumentListWrapping(config: Config) : FormattingRule(config) {

override val wrapping = ArgumentListWrappingRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@AutoCorrectable(since = "1.4.0")
@ActiveByDefault(since = "1.22.0")
class EnumEntryNameCase(config: Config) : FormattingRule(config) {

override val wrapping = EnumEntryNameCaseRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@AutoCorrectable(since = "1.0.0")
@ActiveByDefault(since = "1.22.0")
class MultiLineIfElse(config: Config) : FormattingRule(config) {

override val wrapping = MultiLineIfElseRule()
Expand Down
@@ -0,0 +1,18 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

import com.pinterest.ktlint.ruleset.standard.NoBlankLinesInChainedMethodCallsRule
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable
import io.gitlab.arturbosch.detekt.formatting.FormattingRule

/**
* See [ktlint-website](https://ktlint.github.io) for documentation.
*/
@ActiveByDefault(since = "1.22.0")
@AutoCorrectable(since = "1.22.0")
class NoBlankLinesInChainedMethodCalls(config: Config) : FormattingRule(config) {

override val wrapping = NoBlankLinesInChainedMethodCallsRule()
override val issue = issueFor("Detects blank lines in chained method rules.")
}
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@AutoCorrectable(since = "1.4.0")
@ActiveByDefault(since = "1.22.0")
class NoEmptyFirstLineInMethodBlock(config: Config) : FormattingRule(config) {

override val wrapping = NoEmptyFirstLineInMethodBlockRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation.
*/
@AutoCorrectable(since = "1.0.0")
@ActiveByDefault(since = "1.22.0")
class PackageName(config: Config) : FormattingRule(config) {

override val wrapping = PackageNameRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation.
*/
@AutoCorrectable(since = "1.16.0")
@ActiveByDefault(since = "1.22.0")
class SpacingAroundAngleBrackets(config: Config) : FormattingRule(config) {

override val wrapping = SpacingAroundAngleBracketsRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation.
*/
@AutoCorrectable(since = "1.10.0")
@ActiveByDefault(since = "1.22.0")
class SpacingAroundDoubleColon(config: Config) : FormattingRule(config) {

override val wrapping = SpacingAroundDoubleColonRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation.
*/
@AutoCorrectable(since = "1.16.0")
@ActiveByDefault(since = "1.22.0")
class SpacingAroundUnaryOperator(config: Config) : FormattingRule(config) {

override val wrapping = SpacingAroundUnaryOperatorRule()
Expand Down
@@ -1,14 +1,16 @@
package io.gitlab.arturbosch.detekt.formatting.wrappers

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

/**
* See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation.
*/
@AutoCorrectable(since = "1.10.0")
@ActiveByDefault(since = "1.22.0")
class SpacingBetweenDeclarationsWithAnnotations(config: Config) : FormattingRule(config) {

override val wrapping = SpacingBetweenDeclarationsWithAnnotationsRule()
Expand Down

0 comments on commit b191cd1

Please sign in to comment.