Skip to content

Commit

Permalink
Fix LambdaParameterNaming rule false positive (#5465)
Browse files Browse the repository at this point in the history
* fix: lambda parameter naming false positive

* fix: detekt correct

* fix: test snippet compile error
  • Loading branch information
sanggggg committed Oct 23, 2022
1 parent abd58d2 commit 3b406e2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
Expand Up @@ -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

Expand All @@ -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<KtNamedDeclaration> = 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
Expand All @@ -44,4 +46,8 @@ class LambdaParameterNaming(config: Config = Config.empty) : Rule(config) {
}
}
}

private fun KtParameter.getNamedDeclarations(): List<KtNamedDeclaration> {
return this.destructuringDeclaration?.entries ?: listOf(this)
}
}
Expand Up @@ -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()
}
}

0 comments on commit 3b406e2

Please sign in to comment.