From 5d1b55bd5c55241760fc28d32fedc24bd7688552 Mon Sep 17 00:00:00 2001 From: sanggggg Date: Sun, 23 Oct 2022 00:31:22 +0900 Subject: [PATCH 1/3] fix: lambda parameter naming false positive --- .../rules/naming/LambdaParameterNaming.kt | 12 +++++++++--- .../rules/naming/LambdaParameterNamingSpec.kt | 17 +++++++++++++++++ 2 files changed, 26 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..6b8efb9d185 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,21 @@ 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(val _invalid: String) = Unit + """.trimIndent() + assertThat(LambdaParameterNaming().compileAndLint(code)) + .isEmpty() + } } From fdf31a864c1f28e2d4a829eb0493da181fafa965 Mon Sep 17 00:00:00 2001 From: sanggggg Date: Sun, 23 Oct 2022 00:34:06 +0900 Subject: [PATCH 2/3] fix: detekt correct --- .../arturbosch/detekt/rules/naming/LambdaParameterNamingSpec.kt | 1 + 1 file changed, 1 insertion(+) 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 6b8efb9d185..adec8a3597d 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,6 +122,7 @@ class LambdaParameterNamingSpec { assertThat(LambdaParameterNaming().compileAndLint(code)) .isEmpty() } + @Test fun `Doesn't report invalid class constructor parameters`() { val code = """ From 37c5c4ce2f834a830ff8ecf35eca3327919b3421 Mon Sep 17 00:00:00 2001 From: sanggggg Date: Sun, 23 Oct 2022 01:25:06 +0900 Subject: [PATCH 3/3] fix: test snippet compile error --- .../arturbosch/detekt/rules/naming/LambdaParameterNamingSpec.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 adec8a3597d..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 @@ -135,7 +135,7 @@ class LambdaParameterNamingSpec { @Test fun `Doesn't report invalid function parameters`() { val code = """ - fun f(val _invalid: String) = Unit + fun f(_invalid: String) = Unit """.trimIndent() assertThat(LambdaParameterNaming().compileAndLint(code)) .isEmpty()