From 5e7ba7d031aec47ee54f8f23a171c211a7e51475 Mon Sep 17 00:00:00 2001 From: Dominic Zirbel Date: Thu, 30 Jun 2022 13:02:51 -0700 Subject: [PATCH] #5014 Fix MaxChainedCallsOnSameLine false positives Fix issues where MaxChainedCallsOnSameLine would report long import and package directives, where a warning certainly isn't necessary. --- .../rules/style/MaxChainedCallsOnSameLine.kt | 7 ++++++- .../style/MaxChainedCallsOnSameLineSpec.kt | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt index f9680a0fc0a..e47a6ea033c 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt @@ -10,6 +10,8 @@ import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.config import io.gitlab.arturbosch.detekt.api.internal.Configuration import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtImportDirective +import org.jetbrains.kotlin.psi.KtPackageDirective import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.psi.KtUnaryExpression @@ -39,10 +41,13 @@ class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { override fun visitQualifiedExpression(expression: KtQualifiedExpression) { super.visitQualifiedExpression(expression) - // skip if the parent is also a call on the same line to avoid duplicated warnings val parent = expression.parent + + // skip if the parent is also a call on the same line to avoid duplicated warnings if (parent is KtQualifiedExpression && !parent.callOnNewLine()) return + if (parent is KtImportDirective || parent is KtPackageDirective) return + val chainedCalls = expression.countChainedCalls() + 1 if (chainedCalls > maxChainedCalls) { report( diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt index 9d135a648d2..84f61f6cec7 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt @@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.rules.style import io.gitlab.arturbosch.detekt.test.TestConfig import io.gitlab.arturbosch.detekt.test.assertThat import io.gitlab.arturbosch.detekt.test.compileAndLint +import io.gitlab.arturbosch.detekt.test.lint import org.junit.jupiter.api.Test class MaxChainedCallsOnSameLineSpec { @@ -104,4 +105,20 @@ class MaxChainedCallsOnSameLineSpec { assertThat(rule.compileAndLint(code)).hasSize(1) } + + @Test + fun `does not report long imports`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "import a.b.c.d.e" + + assertThat(rule.lint(code)).isEmpty() + } + + @Test + fun `does not report long package declarations`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "package a.b.c.d.e" + + assertThat(rule.lint(code)).isEmpty() + } }