From 889be479a1f649bb1a5e773d6c62b2cd97a4258c Mon Sep 17 00:00:00 2001 From: Cheshiriks Date: Wed, 26 Jan 2022 15:19:43 +0300 Subject: [PATCH] KotlinParseException on string concatenation for if expression ### What's done: * fixed if expression in rule closes #1076, #1141 --- .../ruleset/rules/chapter3/StringConcatenationRule.kt | 7 ++++++- .../string_concatenation/StringConcatenationExpected.kt | 3 ++- .../string_concatenation/StringConcatenationTest.kt | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/StringConcatenationRule.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/StringConcatenationRule.kt index 4cfb720d9e..f5dd9ec924 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/StringConcatenationRule.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/StringConcatenationRule.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.psi.KtBinaryExpression import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtConstantExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression +import org.jetbrains.kotlin.psi.KtIfExpression import org.jetbrains.kotlin.psi.KtOperationExpression import org.jetbrains.kotlin.psi.KtParenthesizedExpression import org.jetbrains.kotlin.psi.KtReferenceExpression @@ -155,7 +156,8 @@ class StringConcatenationRule(configRules: List) : DiktatRule( val rvalueTextNew = rvalueText?.trim('"') return "$lvalueText$rvalueTextNew" } else if (binaryExpressionPsi.isRvalueCallExpression() || binaryExpressionPsi.isRvalueDotQualifiedExpression() || - binaryExpressionPsi.isRvalueOperation() || binaryExpressionPsi.isRvalueSafeQualifiedExpression()) { + binaryExpressionPsi.isRvalueOperation() || binaryExpressionPsi.isRvalueSafeQualifiedExpression() || + binaryExpressionPsi.isRvalueIfExpression()) { // =========== "a " + foo() -> "a ${foo()}}" return "$lvalueText\${$rvalueText}" } else if (binaryExpressionPsi.isRvalueReferenceExpression()) { @@ -221,4 +223,7 @@ class StringConcatenationRule(configRules: List) : DiktatRule( private fun KtBinaryExpression.isRvalueSafeQualifiedExpression() = this.right is KtSafeQualifiedExpression + + private fun KtBinaryExpression.isRvalueIfExpression() = + this.right is KtIfExpression } diff --git a/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationExpected.kt b/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationExpected.kt index 80d319ae76..bd80f5e585 100644 --- a/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationExpected.kt +++ b/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationExpected.kt @@ -32,4 +32,5 @@ val myTest21 = "${x} string" val myTest22 = "string${foo()}" val myTest23 = x.toString() + foo() val myTest24 = foo() + "string" -val myTest25 = "String ${valueStr?.value}" \ No newline at end of file +val myTest25 = "String ${valueStr?.value}" +val myTest26 = "my string ${if (true) "1" else "2"}" \ No newline at end of file diff --git a/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationTest.kt b/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationTest.kt index 8c49d00fdb..3cb4bd17fe 100644 --- a/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationTest.kt +++ b/diktat-rules/src/test/resources/test/paragraph3/string_concatenation/StringConcatenationTest.kt @@ -33,3 +33,4 @@ val myTest22 = "string" + foo() val myTest23 = x.toString() + foo() val myTest24 = foo() + "string" val myTest25 = "String " + valueStr?.value +val myTest26 = "my string " + if (true) "1" else "2"