From 706d8cd598bc01e8d5966962ae4429c0e02d09b8 Mon Sep 17 00:00:00 2001 From: Peter Trifanov Date: Thu, 9 Jun 2022 16:43:52 +0300 Subject: [PATCH] Bugfix: Checking white space before opening brace that starts a line ### What's done: * Fixed logic * Added test --- .../ruleset/rules/chapter3/files/WhiteSpaceRule.kt | 9 ++++++--- .../chapter3/spaces/WhiteSpaceRuleWarnTest.kt | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/WhiteSpaceRule.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/WhiteSpaceRule.kt index facdea3418..690b8010e0 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/WhiteSpaceRule.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/WhiteSpaceRule.kt @@ -210,7 +210,7 @@ class WhiteSpaceRule(configRules: List) : DiktatRule( .parent({ it.elementType == VALUE_ARGUMENT }) .let { it?.prevSibling { prevNode -> prevNode.elementType == COMMA } == null } - // If it is lambda, then we don't force it to be on newline or same line + // Handling this case: `foo({ it.bar() }, 2, 3)` if (numWhiteSpace != 0 && isFirstArgument) { WRONG_WHITESPACE.warnAndFix(configRules, emitWarn, isFixMode, "there should be no whitespace before '{' of lambda" + " inside argument list", node.startOffset, node) { @@ -218,8 +218,11 @@ class WhiteSpaceRule(configRules: List) : DiktatRule( } } } else if (prevNode.elementType !in keywordsWithSpaceAfter && numWhiteSpace != 1) { - WRONG_WHITESPACE.warnAndFix(configRules, emitWarn, isFixMode, "there should be a whitespace before '{'", node.startOffset, node) { - prevNode.leaveSingleWhiteSpace() + val hasOnlyWhiteSpaceBefore = whitespaceOrPrevNode.elementType == WHITE_SPACE && whitespaceOrPrevNode.textContains('\n') + if (!hasOnlyWhiteSpaceBefore) { + WRONG_WHITESPACE.warnAndFix(configRules, emitWarn, isFixMode, "there should be a whitespace before '{'", node.startOffset, node) { + prevNode.leaveSingleWhiteSpace() + } } } } diff --git a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/WhiteSpaceRuleWarnTest.kt b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/WhiteSpaceRuleWarnTest.kt index a2a120d045..12868c668d 100644 --- a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/WhiteSpaceRuleWarnTest.kt +++ b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/WhiteSpaceRuleWarnTest.kt @@ -670,4 +670,18 @@ class WhiteSpaceRuleWarnTest : LintTestBase(::WhiteSpaceRule) { """.trimMargin() ) } + + @Test + @Tag(WarningNames.WRONG_WHITESPACE) + fun `should not trigger in braces on the beginning of the line`() { + lintMethod( + """ + |val onClick: () -> Unit = remember { + | { + | /* do stuff */ + | } + |} + """.trimMargin() + ) + } }