From 4fd8d3b48007fb2cbd938a53f687c67361da65c7 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 20 Aug 2018 10:53:20 +0300 Subject: [PATCH] Add formatting rule "new line between { and when entry" --- .../jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt | 4 ++++ .../kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt | 5 ----- idea/testData/formatter/WhenBraceAndEntry.after.kt | 5 +++++ idea/testData/formatter/WhenBraceAndEntry.kt | 4 ++++ .../jetbrains/kotlin/formatter/FormatterTestGenerated.java | 5 +++++ 5 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 idea/testData/formatter/WhenBraceAndEntry.after.kt create mode 100644 idea/testData/formatter/WhenBraceAndEntry.kt diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt index ef7bf823702..3ac59e6ed1b 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -469,6 +469,10 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing spacingForLeftBrace(block = parent.requireNode(), blockType = WHEN) } + inPosition(left = LBRACE, right = WHEN_ENTRY).customRule { _, _, _ -> + createSpacing(0, minLineFeeds = 1) + } + val spacesInSimpleFunction = if (kotlinCustomSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD) 1 else 0 inPosition(parent = FUNCTION_LITERAL, left = LBRACE, diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt index 6161bc2bb8f..b5751b5757d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.idea.intentions.ImportAllMembersIntention -import org.jetbrains.kotlin.idea.refactoring.isMultiLine import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe @@ -80,10 +79,6 @@ class AddWhenRemainingBranchesFix( val elseBranch = element.entries.find { it.isElse } val psiFactory = KtPsiFactory(element) - if (missingCases.isNotEmpty() && !element.isMultiLine()) { - element.addBefore(psiFactory.createNewLine(), whenCloseBrace) - } - for (case in missingCases) { val branchConditionText = when (case) { UnknownMissingCase, NullMissingCase, is BooleanMissingCase -> diff --git a/idea/testData/formatter/WhenBraceAndEntry.after.kt b/idea/testData/formatter/WhenBraceAndEntry.after.kt new file mode 100644 index 00000000000..2707dd1d1d7 --- /dev/null +++ b/idea/testData/formatter/WhenBraceAndEntry.after.kt @@ -0,0 +1,5 @@ +fun foo(x: Int) = when (x) { + 1 -> 2 + 3 -> 4 + else -> 6 +} \ No newline at end of file diff --git a/idea/testData/formatter/WhenBraceAndEntry.kt b/idea/testData/formatter/WhenBraceAndEntry.kt new file mode 100644 index 00000000000..c556680f31d --- /dev/null +++ b/idea/testData/formatter/WhenBraceAndEntry.kt @@ -0,0 +1,4 @@ +fun foo(x: Int) = when(x) { 1 -> 2 + 3 -> 4 + else -> 6 +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java index bc9a05841f3..bba60930cc3 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java @@ -746,6 +746,11 @@ public class FormatterTestGenerated extends AbstractFormatterTest { runTest("idea/testData/formatter/WhenBlockBlankLines.after.kt"); } + @TestMetadata("WhenBraceAndEntry.after.kt") + public void testWhenBraceAndEntry() throws Exception { + runTest("idea/testData/formatter/WhenBraceAndEntry.after.kt"); + } + @TestMetadata("WhenComment.after.kt") public void testWhenComment() throws Exception { runTest("idea/testData/formatter/WhenComment.after.kt");