diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt index c728968f63c0..88313110fd2c 100644 --- a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt +++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/hints/KtParameterHintsProvider.kt @@ -99,10 +99,15 @@ class KtParameterHintsProvider : AbstractKtInlayHintsProvider() { val argument = arguments[index] val symbolName = symbol.name val name: Name = symbolName + // do not put inlay hints for a named argument if (argument.isNamed()) { + // it is possible to place named argument in a wrong position when there is some default value + // after which you have to name rest arguments and no reason to proceed further if (argument.getArgumentName()?.asName != name) break continue } + // avoid cases like "`value:` value" + if (argument.text == name.asString()) continue name.takeUnless(Name::isSpecial)?.asString()?.let { stringName -> sink.addPresentation(InlineInlayPosition(argument.startOffset, true), hasBackground = true) { diff --git a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt index 7f116a13a262..b782685b3b8c 100644 --- a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt +++ b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.k2.kt @@ -1,6 +1,17 @@ -fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") { - -} +fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") {} +fun simpleFun1(name: String){} +fun simpleFun2(name: String){} +fun simpleFun2(name: String, value: Int){} val f = foo(/*<# [namedParameters.kt:8]index|: #>*/0, lastName = "Johnson") -val f2 = foo(/*<# [namedParameters.kt:8]index|: #>*/0, firstName = "Joe", /*<# [namedParameters.kt:48]lastName|: #>*/"Johnson") \ No newline at end of file +val f2 = foo(/*<# [namedParameters.kt:8]index|: #>*/0, firstName = "Joe", /*<# [namedParameters.kt:48]lastName|: #>*/"Johnson") +fun m() { + val name = "name" + val n = "name" + simpleFun0() + simpleFun1(/*<# [namedParameters.kt:94]name|: #>*/"name") + simpleFun1(name) + simpleFun1(/*<# [namedParameters.kt:94]name|: #>*/n) + simpleFun2(name) + simpleFun2(/*<# [namedParameters.kt:125]name|: #>*/n) +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt index 6498953995e5..7ec8488e7049 100644 --- a/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt +++ b/plugins/kotlin/idea/tests/testData/codeInsight/hints/arguments/namedParameters.kt @@ -1,6 +1,17 @@ -fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") { - -} +fun foo(index: Int, firstName: String = "John", lastName: String = "Smith") {} +fun simpleFun1(name: String){} +fun simpleFun2(name: String){} +fun simpleFun2(name: String, value: Int){} val f = foo(0, lastName = "Johnson") -val f2 = foo(0, firstName = "Joe", "Johnson") \ No newline at end of file +val f2 = foo(0, firstName = "Joe", "Johnson") +fun m() { + val name = "name" + val n = "name" + simpleFun0() + simpleFun1("name") + simpleFun1(name) + simpleFun1(n) + simpleFun2(name) + simpleFun2(n) +} \ No newline at end of file