From 3b406e28d4b168df37d11d9f6b12af21c2fabde2 Mon Sep 17 00:00:00 2001 From: sanggggg <37951125+sanggggg@users.noreply.github.com> Date: Sun, 23 Oct 2022 18:19:07 +0900 Subject: [PATCH] Fix LambdaParameterNaming rule false positive (#5465) * fix: lambda parameter naming false positive * fix: detekt correct * fix: test snippet compile error --- .../rules/naming/LambdaParameterNaming.kt | 12 +++++++++--- .../rules/naming/LambdaParameterNamingSpec.kt | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNaming.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNaming.kt index 015a0c89b84..030dca6c7ec 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNaming.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNaming.kt @@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Rule 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.KtLambdaExpression import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtParameter @@ -27,9 +28,10 @@ class LambdaParameterNaming(config: Config = Config.empty) : Rule(config) { @Configuration("naming pattern") private val parameterPattern: Regex by config("[a-z][A-Za-z0-9]*|_", String::toRegex) - override fun visitParameter(parameter: KtParameter) { - val parameters: List = parameter.destructuringDeclaration?.entries ?: listOf(parameter) - parameters + override fun visitLambdaExpression(lambdaExpression: KtLambdaExpression) { + super.visitLambdaExpression(lambdaExpression) + lambdaExpression.valueParameters + .flatMap { it.getNamedDeclarations() } .mapNotNull { it.nameIdentifier } .forEach { val identifier = it.text @@ -44,4 +46,8 @@ class LambdaParameterNaming(config: Config = Config.empty) : Rule(config) { } } } + + private fun KtParameter.getNamedDeclarations(): List { + return this.destructuringDeclaration?.entries ?: listOf(this) + } } diff --git a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNamingSpec.kt b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNamingSpec.kt index 10ff869bcdf..1d54770f8e0 100644 --- a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNamingSpec.kt +++ b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/LambdaParameterNamingSpec.kt @@ -122,4 +122,22 @@ class LambdaParameterNamingSpec { assertThat(LambdaParameterNaming().compileAndLint(code)) .isEmpty() } + + @Test + fun `Doesn't report invalid class constructor parameters`() { + val code = """ + data class C(val _invalid: String) + """.trimIndent() + assertThat(LambdaParameterNaming().compileAndLint(code)) + .isEmpty() + } + + @Test + fun `Doesn't report invalid function parameters`() { + val code = """ + fun f(_invalid: String) = Unit + """.trimIndent() + assertThat(LambdaParameterNaming().compileAndLint(code)) + .isEmpty() + } }