aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanley Shyiko <stanley.shyiko@gmail.com>2018-03-20 17:37:47 -0700
committerStanley Shyiko <stanley.shyiko@gmail.com>2018-03-20 17:37:47 -0700
commitf2747f3cb4d9c0c778ee0d54a0ed26122f2cb512 (patch)
tree0550981181ce027a91a67efe542eee7b83a2ed67
parent8c06614b032c4ff17b897052b9a3b622153f2d9e (diff)
downloadktlint-f2747f3cb4d9c0c778ee0d54a0ed26122f2cb512.tar.gz
Relaxed no-line-break-after-else rule to allow multi-line if/else without curly braces
-rw-r--r--CHANGELOG.md3
-rw-r--r--ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRule.kt13
-rw-r--r--ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRuleTest.kt4
3 files changed, 11 insertions, 9 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df6ac345..8174116f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,7 +13,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- `+`, `-`, `*`, `/`, `%`, `&&`, `||` wrapping ([#168](https://github.com/shyiko/ktlint/issues/168)).
### Changed
-- `comma-spacing` rule to be more strict ([#173](https://github.com/shyiko/ktlint/issues/173)).
+- `comma-spacing` rule to be more strict ([#173](https://github.com/shyiko/ktlint/issues/173)).
+- `no-line-break-after-else` rule to allow multi-line `if/else` without curly braces.
## [0.19.0] - 2018-03-04
diff --git a/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRule.kt b/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRule.kt
index 52667915..d28ba5eb 100644
--- a/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRule.kt
+++ b/ktlint-ruleset-standard/src/main/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRule.kt
@@ -4,6 +4,7 @@ import com.github.shyiko.ktlint.core.Rule
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
import org.jetbrains.kotlin.com.intellij.psi.PsiWhiteSpace
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafPsiElement
+import org.jetbrains.kotlin.com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.lexer.KtTokens
class NoLineBreakAfterElseRule : Rule("no-line-break-after-else") {
@@ -14,11 +15,13 @@ class NoLineBreakAfterElseRule : Rule("no-line-break-after-else") {
emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit
) {
if (node is PsiWhiteSpace &&
- node.textContains('\n') &&
- node.prevSibling?.node?.elementType == KtTokens.ELSE_KEYWORD) {
- emit(node.startOffset + 1, "Unexpected line break after \"else\"", true)
- if (autoCorrect) {
- (node as LeafPsiElement).rawReplaceWithText(" ")
+ node.textContains('\n')) {
+ if (PsiTreeUtil.prevLeaf(node, true)?.node?.elementType == KtTokens.ELSE_KEYWORD &&
+ PsiTreeUtil.nextLeaf(node, true)?.node?.elementType.let { it == KtTokens.IF_KEYWORD || it == KtTokens.LBRACE }) {
+ emit(node.startOffset + 1, "Unexpected line break after \"else\"", true)
+ if (autoCorrect) {
+ (node as LeafPsiElement).rawReplaceWithText(" ")
+ }
}
}
}
diff --git a/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRuleTest.kt b/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRuleTest.kt
index 1e1ef73b..8b645ecf 100644
--- a/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRuleTest.kt
+++ b/ktlint-ruleset-standard/src/test/kotlin/com/github/shyiko/ktlint/ruleset/standard/NoLineBreakAfterElseRuleTest.kt
@@ -111,9 +111,7 @@ class NoLineBreakAfterElseRuleTest {
doAnotherThing()
}
""".trimIndent()
- )).isEqualTo(listOf(
- LintError(5, 1, "no-line-break-after-else", "Unexpected line break after \"else\"")
- ))
+ )).isEmpty()
}
@Test