From cd710e4719fe5cb0ada96cf2a0f936a3df81f6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp=20=28TWiStErRob=29?= Date: Sun, 3 Dec 2023 10:25:44 +0000 Subject: [PATCH 1/4] Add test for current behavior and shorten message --- .../detekt/rules/bugs/UnnamedParameterUse.kt | 4 ++-- .../rules/bugs/UnnamedParameterUseSpec.kt | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt index e1c6540bcda..07b4affd9a6 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt @@ -75,6 +75,7 @@ import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf */ @RequiresTypeResolution class UnnamedParameterUse(config: Config = Config.empty) : Rule(config) { + override val issue = Issue( javaClass.simpleName, "Passing no named parameters can cause issue when parameters order change", @@ -125,8 +126,7 @@ class UnnamedParameterUse(config: Config = Config.empty) : Rule(config) { CodeSmell( issue, Entity.from(expression), - "$expression uses unnamed parameters. Consider using named parameters as they make usage " + - "of function more safe" + "Consider using named parameters in ${expression} as they make usage of function more safe." ) ) } diff --git a/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt b/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt index ea590386da8..1968cb5b7dc 100644 --- a/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt +++ b/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt @@ -89,6 +89,23 @@ class UnnamedParameterUseSpec(private val env: KotlinCoreEnvironment) { ).hasSize(1) } + @Test + fun `report uses the function name as location and message`() { + val code = """ + fun f(enabled: Boolean, shouldLog: Boolean) { + if (shouldLog) println(enabled) + } + + fun test() { + f(false, true) + } + """.trimIndent() + assertThat(subject.compileAndLintWithContext(env, code)) + .hasTextLocations(102 to 116) + .singleElement() + .hasMessage("Consider using named parameters in CALL_EXPRESSION as they make usage of function more safe.") + } + @Test fun `does not report two unnamed param when both are same`() { val code = """ From 5999a2148ee7a461cb52ffe98d0fc7f2e8993499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp=20=28TWiStErRob=29?= Date: Sun, 3 Dec 2023 10:29:53 +0000 Subject: [PATCH 2/4] Focus on the function call for reporting --- .../gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt | 2 +- .../arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt index 07b4affd9a6..5bccb87407c 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt @@ -125,7 +125,7 @@ class UnnamedParameterUse(config: Config = Config.empty) : Rule(config) { report( CodeSmell( issue, - Entity.from(expression), + Entity.from(expression.calleeExpression ?: expression), "Consider using named parameters in ${expression} as they make usage of function more safe." ) ) diff --git a/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt b/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt index 1968cb5b7dc..fa0221f7473 100644 --- a/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt +++ b/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt @@ -101,7 +101,7 @@ class UnnamedParameterUseSpec(private val env: KotlinCoreEnvironment) { } """.trimIndent() assertThat(subject.compileAndLintWithContext(env, code)) - .hasTextLocations(102 to 116) + .hasTextLocations(102 to 103) .singleElement() .hasMessage("Consider using named parameters in CALL_EXPRESSION as they make usage of function more safe.") } From 5c5ae314ca9b15fcf14f157619a768a38db128bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp=20=28TWiStErRob=29?= Date: Sun, 3 Dec 2023 10:32:40 +0000 Subject: [PATCH 3/4] Report the function name in the message rather than CALL_EXPRESSION + grammar --- .../gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt | 2 +- .../arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt index 5bccb87407c..78bad6a1705 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt @@ -126,7 +126,7 @@ class UnnamedParameterUse(config: Config = Config.empty) : Rule(config) { CodeSmell( issue, Entity.from(expression.calleeExpression ?: expression), - "Consider using named parameters in ${expression} as they make usage of function more safe." + "Consider using named parameters in ${expression.calleeExpression?.text} as they make usage of the function more safe." ) ) } diff --git a/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt b/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt index fa0221f7473..c205f050cfa 100644 --- a/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt +++ b/detekt-rules-errorprone/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUseSpec.kt @@ -103,7 +103,7 @@ class UnnamedParameterUseSpec(private val env: KotlinCoreEnvironment) { assertThat(subject.compileAndLintWithContext(env, code)) .hasTextLocations(102 to 103) .singleElement() - .hasMessage("Consider using named parameters in CALL_EXPRESSION as they make usage of function more safe.") + .hasMessage("Consider using named parameters in f as they make usage of the function more safe.") } @Test From 7957c4aa8a3c6de2711621507a78fefd2f141400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3bert=20Papp=20=28TWiStErRob=29?= Date: Sun, 3 Dec 2023 10:33:12 +0000 Subject: [PATCH 4/4] Always report something --- .../arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt index 78bad6a1705..80a92af9e86 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnamedParameterUse.kt @@ -122,11 +122,12 @@ class UnnamedParameterUse(config: Config = Config.empty) : Rule(config) { } if (namedArgumentList.any { it.first.not() }) { + val target = expression.calleeExpression ?: expression report( CodeSmell( issue, - Entity.from(expression.calleeExpression ?: expression), - "Consider using named parameters in ${expression.calleeExpression?.text} as they make usage of the function more safe." + Entity.from(target), + "Consider using named parameters in ${target.text} as they make usage of the function more safe." ) ) }