diff options
Diffstat (limited to 'ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoTrailingSpacesRule.kt')
-rw-r--r-- | ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoTrailingSpacesRule.kt | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoTrailingSpacesRule.kt b/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoTrailingSpacesRule.kt index fa3e492f..a7e03c88 100644 --- a/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoTrailingSpacesRule.kt +++ b/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoTrailingSpacesRule.kt @@ -8,33 +8,41 @@ import org.jetbrains.kotlin.com.intellij.psi.util.PsiTreeUtil class NoTrailingSpacesRule : Rule("no-trailing-spaces") { - override fun visit(node: ASTNode, autoCorrect: Boolean, - emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit) { + override fun visit( + node: ASTNode, + autoCorrect: Boolean, + emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit + ) { if (node is PsiWhiteSpace) { val lines = node.getText().split("\n") if (lines.size > 1) { - checkForTrailingSpaces(lines.head(), node.startOffset, emit) - if (autoCorrect) { - (node as LeafPsiElement).replaceWithText("\n".repeat(lines.size - 1) + lines.last()) + val violated = checkForTrailingSpaces(lines.head(), node.startOffset, emit) + if (violated && autoCorrect) { + (node as LeafPsiElement).rawReplaceWithText("\n".repeat(lines.size - 1) + lines.last()) } - } else - if (PsiTreeUtil.nextLeaf(node) == null /* eof */) { - checkForTrailingSpaces(lines, node.startOffset, emit) - if (autoCorrect) { - (node as LeafPsiElement).replaceWithText("\n".repeat(lines.size - 1)) + } else if (PsiTreeUtil.nextLeaf(node) == null /* eof */) { + val violated = checkForTrailingSpaces(lines, node.startOffset, emit) + if (violated && autoCorrect) { + (node as LeafPsiElement).rawReplaceWithText("\n".repeat(lines.size - 1)) } } } } - private fun checkForTrailingSpaces(lines: List<String>, offset: Int, - emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit) { + private fun checkForTrailingSpaces( + lines: List<String>, + offset: Int, + emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit + ): Boolean { + var violated = false var violationOffset = offset - return lines.forEach { line -> + lines.forEach { line -> if (!line.isEmpty()) { emit(violationOffset, "Trailing space(s)", true) + violated = true } violationOffset += line.length + 1 } + return violated } } |