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 e1c6540bcdac..80a92af9e86f 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", @@ -121,12 +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), - "$expression uses unnamed parameters. Consider using named parameters as they make usage " + - "of function more safe" + Entity.from(target), + "Consider using named parameters in ${target.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 ea590386da8a..c205f050cfa7 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 103) + .singleElement() + .hasMessage("Consider using named parameters in f as they make usage of the function more safe.") + } + @Test fun `does not report two unnamed param when both are same`() { val code = """