Skip to content

Commit 0eabab5

Browse files
committed
Fixed TrailingCommaRule
### What's done: - add checking children to support case with comma before comment - reused ASTFactory It's part of #1737
1 parent dd5542b commit 0eabab5

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

diktat-rules/src/main/kotlin/com/saveourtool/diktat/ruleset/rules/chapter3/TrailingCommaRule.kt

+10-6
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import org.jetbrains.kotlin.KtNodeTypes.WHEN_CONDITION_EXPRESSION
2828
import org.jetbrains.kotlin.KtNodeTypes.WHEN_CONDITION_IN_RANGE
2929
import org.jetbrains.kotlin.KtNodeTypes.WHEN_CONDITION_IS_PATTERN
3030
import org.jetbrains.kotlin.KtNodeTypes.WHEN_ENTRY
31+
import org.jetbrains.kotlin.com.intellij.lang.ASTFactory
3132
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
32-
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafPsiElement
3333
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens.KDOC
3434
import org.jetbrains.kotlin.lexer.KtTokens.BLOCK_COMMENT
3535
import org.jetbrains.kotlin.lexer.KtTokens.COMMA
@@ -101,9 +101,13 @@ class TrailingCommaRule(configRules: List<RulesConfig>) : DiktatRule(
101101
}
102102

103103
private fun ASTNode.checkTrailingComma(config: Boolean) {
104-
val shouldFix = this.siblings(true).toList().run {
105-
!this.map { it.elementType }.contains(COMMA) && this.any { it.isWhiteSpaceWithNewline() || it.isPartOfComment() }
106-
}
104+
val noCommaInSiblings = siblings(true).toList()
105+
.let { siblings ->
106+
siblings.none { it.elementType == COMMA } && siblings.any { it.isWhiteSpaceWithNewline() || it.isPartOfComment() }
107+
}
108+
val noCommaInChildren = children().none { it.elementType == COMMA }
109+
val shouldFix = noCommaInSiblings && noCommaInChildren
110+
107111
if (shouldFix && config) {
108112
// we should write type of node in warning, to make it easier for user to find the parameter
109113
TRAILING_COMMA.warnAndFix(configRules, emitWarn, isFixMode, "after ${this.elementType}: ${this.text}", this.startOffset, this) {
@@ -116,9 +120,9 @@ class TrailingCommaRule(configRules: List<RulesConfig>) : DiktatRule(
116120
val comments = listOf(EOL_COMMENT, BLOCK_COMMENT, KDOC)
117121
val firstCommentNodeOrNull = if (this.elementType == VALUE_PARAMETER) this.children().firstOrNull { it.elementType in comments } else null
118122
firstCommentNodeOrNull?.let {
119-
this.addChild(LeafPsiElement(COMMA, ","), firstCommentNodeOrNull)
123+
this.addChild(ASTFactory.leaf(COMMA, ","), it)
120124
}
121-
?: parent.addChild(LeafPsiElement(COMMA, ","), this.treeNext)
125+
?: parent.addChild(ASTFactory.leaf(COMMA, ","), this.treeNext)
122126
}
123127
}
124128
}

diktat-rules/src/test/kotlin/com/saveourtool/diktat/ruleset/chapter3/TrailingCommaFixTest.kt

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class TrailingCommaFixTest : FixTestBase("test/paragraph3/trailing_comma", ::Tra
3030

3131
@Test
3232
@Tag(WarningNames.TRAILING_COMMA)
33-
@Disabled("https://github.com/saveourtool/diktat/issues/1737")
3433
fun `should add all trailing comma`() {
3534
fixAndCompare("TrailingCommaExpected.kt", "TrailingCommaTest.kt", config)
3635
}

0 commit comments

Comments
 (0)