aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelloRanger <jacob@jabramson.com>2018-04-09 00:08:23 -0700
committerJelloRanger <jacob@jabramson.com>2018-04-09 00:08:23 -0700
commit9a2191c6e798785d22494b7525ea0b4589d0f0e3 (patch)
tree46550702966e99bdbf409d4afb751cce1be4e232
parentfd2bc0e87c34bc51090885d90e645f7d565a704f (diff)
downloadktlint-9a2191c6e798785d22494b7525ea0b4589d0f0e3.tar.gz
Fix ModifierRule autoFormat by replacing children elements
- The assumption that whitespace always separates modifiers isn't true since annotations can be on separate lines. - Added test case to catch previous error
-rw-r--r--ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRule.kt9
-rw-r--r--ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRuleTest.kt38
2 files changed, 33 insertions, 14 deletions
diff --git a/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRule.kt b/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRule.kt
index ba07b253..25c5d035 100644
--- a/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRule.kt
+++ b/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRule.kt
@@ -2,7 +2,6 @@ package com.github.shyiko.ktlint.ruleset.standard
import com.github.shyiko.ktlint.core.Rule
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
-import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl
import org.jetbrains.kotlin.com.intellij.psi.tree.TokenSet
import org.jetbrains.kotlin.lexer.KtTokens.ABSTRACT_KEYWORD
import org.jetbrains.kotlin.lexer.KtTokens.ACTUAL_KEYWORD
@@ -72,12 +71,8 @@ class ModifierOrderRule : Rule("modifier-order") {
sorted.map { it.text }.joinToString(" ")
}\")", true)
if (autoCorrect) {
- node.removeRange(node.firstChildNode, node.lastChildNode.treeNext)
- modifierArr.forEachIndexed { i, _ ->
- node.addChild(sorted[i], null)
- if (i != sorted.size - 1) {
- node.addChild(PsiWhiteSpaceImpl(" "), null)
- }
+ modifierArr.forEachIndexed { i, n ->
+ node.replaceChild(n, sorted[i].clone() as ASTNode)
}
}
}
diff --git a/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRuleTest.kt b/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRuleTest.kt
index 1e99ae93..6f1724c9 100644
--- a/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRuleTest.kt
+++ b/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/ModifierOrderRuleTest.kt
@@ -27,8 +27,14 @@ class ModifierOrderRuleTest {
= if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
override @Annotation fun getSomething() = ""
override @Annotation suspend public @Woohoo(data = "woohoo") fun doSomething() = ""
- @AnnotationAboveLine
- fun returnsSomething() = ""
+ @A
+ @B(v = [
+ "foo",
+ "baz",
+ "bar"
+ ])
+ @C
+ suspend public fun returnsSomething() = ""
companion object {
const internal val V = ""
@@ -46,7 +52,13 @@ class ModifierOrderRuleTest {
LintError(11, 5, "modifier-order", "Incorrect modifier order (should be \"override tailrec\")"),
LintError(13, 5, "modifier-order", "Incorrect modifier order (should be \"@Annotation override\")"),
LintError(14, 5, "modifier-order", "Incorrect modifier order (should be \"@Annotation @Woohoo(data = \"woohoo\") public override suspend\")"),
- LintError(19, 8, "modifier-order", "Incorrect modifier order (should be \"internal const\")")
+ LintError(15, 5, "modifier-order", """Incorrect modifier order (should be "@A @B(v = [
+ | "foo",
+ | "baz",
+ | "bar"
+ | ]) @C public suspend")
+ """.trimMargin()),
+ LintError(25, 8, "modifier-order", "Incorrect modifier order (should be \"internal const\")")
))
}
@@ -68,8 +80,14 @@ class ModifierOrderRuleTest {
= if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
override @Annotation fun getSomething() = ""
suspend @Annotation override public @Woohoo(data = "woohoo") fun doSomething() = ""
- @AnnotationAboveLine
- fun returnsSomething() = ""
+ @A
+ @B(v = [
+ "foo",
+ "baz",
+ "bar"
+ ])
+ @C
+ suspend public fun returnsSomething() = ""
companion object {
const internal val V = ""
@@ -92,8 +110,14 @@ class ModifierOrderRuleTest {
= if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
@Annotation override fun getSomething() = ""
@Annotation @Woohoo(data = "woohoo") public override suspend fun doSomething() = ""
- @AnnotationAboveLine
- fun returnsSomething() = ""
+ @A
+ @B(v = [
+ "foo",
+ "baz",
+ "bar"
+ ])
+ @C
+ public suspend fun returnsSomething() = ""
companion object {
internal const val V = ""