From 45b3b529991ad523f9f568e51455166868a9e224 Mon Sep 17 00:00:00 2001 From: aktsay6 Date: Tue, 24 Nov 2020 13:09:36 +0300 Subject: [PATCH 1/4] bugfix/indentation-of-comments(#553) ### What's done: * Fixed bugs --- .../org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt | 4 +++- .../test/smoke/src/main/kotlin/Example4Expected.kt | 8 ++++++++ .../resources/test/smoke/src/main/kotlin/Example4Test.kt | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt index 1f4859c707..f252cce167 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt @@ -4,12 +4,14 @@ import com.pinterest.ktlint.core.ast.ElementType.ARROW import com.pinterest.ktlint.core.ast.ElementType.AS_KEYWORD import com.pinterest.ktlint.core.ast.ElementType.AS_SAFE import com.pinterest.ktlint.core.ast.ElementType.BINARY_EXPRESSION +import com.pinterest.ktlint.core.ast.ElementType.BLOCK_COMMENT import com.pinterest.ktlint.core.ast.ElementType.BODY import com.pinterest.ktlint.core.ast.ElementType.CALL_EXPRESSION import com.pinterest.ktlint.core.ast.ElementType.COLON import com.pinterest.ktlint.core.ast.ElementType.DOT import com.pinterest.ktlint.core.ast.ElementType.ELSE import com.pinterest.ktlint.core.ast.ElementType.ELVIS +import com.pinterest.ktlint.core.ast.ElementType.EOL_COMMENT import com.pinterest.ktlint.core.ast.ElementType.EQ import com.pinterest.ktlint.core.ast.ElementType.IS_EXPRESSION import com.pinterest.ktlint.core.ast.ElementType.KDOC_END @@ -180,7 +182,7 @@ internal class DotCallChecker(config: IndentationConfig) : CustomIndentationChec nextNode.isDotBeforeCallOrReference() || nextNode.elementType == OPERATION_REFERENCE && nextNode.firstChildNode.elementType.let { it == ELVIS || it == IS_EXPRESSION || it == AS_KEYWORD || it == AS_SAFE - } + } || nextNode.elementType == EOL_COMMENT || nextNode.elementType == BLOCK_COMMENT } ?.let { // we need to get indent before the first expression in calls chain diff --git a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Expected.kt b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Expected.kt index cab9a2e5d2..88d0e2e229 100644 --- a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Expected.kt +++ b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Expected.kt @@ -22,5 +22,13 @@ fun `method name incorrect, part 4`() { } """.trimIndent() lintMethod(code, LintError(2, 7, ruleId, "${FUNCTION_NAME_INCORRECT_CASE.warnText()} methODTREE", true)) + + foo + // we are calling bar + .bar() + + bar + /* This is a block comment */ + .foo() } diff --git a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Test.kt b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Test.kt index 4ccb47ed9b..0b4819e80b 100644 --- a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Test.kt +++ b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example4Test.kt @@ -21,5 +21,13 @@ fun `method name incorrect, part 4`() { } """.trimIndent() lintMethod(code, LintError(2, 7, ruleId, "${FUNCTION_NAME_INCORRECT_CASE.warnText()} methODTREE", true)) + + foo + // we are calling bar + .bar() + + bar + /* This is a block comment */ + .foo() } From 13b3dc0fa5b6abde93a2ef01f9336490c05537d4 Mon Sep 17 00:00:00 2001 From: aktsay6 Date: Tue, 24 Nov 2020 13:17:51 +0300 Subject: [PATCH 2/4] bugfix/indentation-of-comments(#553) ### What's done: * Fixed bugs --- .../kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt index f252cce167..897b305b3a 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt @@ -176,6 +176,7 @@ internal class DotCallChecker(config: IndentationConfig) : CustomIndentationChec private fun ASTNode.isDotBeforeCallOrReference() = elementType.let { it == DOT || it == SAFE_ACCESS } && treeNext.elementType.let { it == CALL_EXPRESSION || it == REFERENCE_EXPRESSION } + @Suppress("ComplexMethod") override fun checkNode(whiteSpace: PsiWhiteSpace, indentError: IndentationError): CheckResult? { whiteSpace.nextSibling.node .takeIf { nextNode -> From fd427c8b3064859d2a38836d78afaf72b7c5d2fa Mon Sep 17 00:00:00 2001 From: aktsay6 Date: Tue, 24 Nov 2020 13:46:36 +0300 Subject: [PATCH 3/4] bugfix/indentation-of-comments(#553) ### What's done: * Fixed bugs --- .../diktat/ruleset/utils/indentation/Checkers.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt index 897b305b3a..afa310f819 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt @@ -176,6 +176,17 @@ internal class DotCallChecker(config: IndentationConfig) : CustomIndentationChec private fun ASTNode.isDotBeforeCallOrReference() = elementType.let { it == DOT || it == SAFE_ACCESS } && treeNext.elementType.let { it == CALL_EXPRESSION || it == REFERENCE_EXPRESSION } + private fun ASTNode.isCommentBeforeDot() : Boolean { + if (elementType == EOL_COMMENT || elementType == BLOCK_COMMENT) { + var nextNode = treeNext + while (nextNode != null && (nextNode.elementType == WHITE_SPACE || nextNode.elementType == EOL_COMMENT)) { + nextNode = nextNode.treeNext + } + return nextNode.elementType == DOT + } + return false + } + @Suppress("ComplexMethod") override fun checkNode(whiteSpace: PsiWhiteSpace, indentError: IndentationError): CheckResult? { whiteSpace.nextSibling.node @@ -183,7 +194,7 @@ internal class DotCallChecker(config: IndentationConfig) : CustomIndentationChec nextNode.isDotBeforeCallOrReference() || nextNode.elementType == OPERATION_REFERENCE && nextNode.firstChildNode.elementType.let { it == ELVIS || it == IS_EXPRESSION || it == AS_KEYWORD || it == AS_SAFE - } || nextNode.elementType == EOL_COMMENT || nextNode.elementType == BLOCK_COMMENT + } || nextNode.isCommentBeforeDot() } ?.let { // we need to get indent before the first expression in calls chain From 3b13bb32b1178713fd9f082cbacdedb5d64e361e Mon Sep 17 00:00:00 2001 From: soWhoAmI Date: Mon, 30 Nov 2020 12:47:02 +0300 Subject: [PATCH 4/4] bugfix/indentation-of-comments(#553) ### What's done: * Fixed bugs --- .../org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt index afa310f819..04edf11d74 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/indentation/Checkers.kt @@ -182,7 +182,7 @@ internal class DotCallChecker(config: IndentationConfig) : CustomIndentationChec while (nextNode != null && (nextNode.elementType == WHITE_SPACE || nextNode.elementType == EOL_COMMENT)) { nextNode = nextNode.treeNext } - return nextNode.elementType == DOT + return nextNode.isDotBeforeCallOrReference() } return false }