diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/KotlinSpacingBuilder.kt b/idea/src/org/jetbrains/jet/plugin/formatter/KotlinSpacingBuilder.kt index 1294f507f50..90b38135a47 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/KotlinSpacingBuilder.kt +++ b/idea/src/org/jetbrains/jet/plugin/formatter/KotlinSpacingBuilder.kt @@ -133,10 +133,6 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { between(FUN, FUN).blankLines(1) between(FUN, PROPERTY).blankLines(1) - afterInside(LBRACE, BLOCK).lineBreakInCode() - beforeInside(RBRACE, CLASS_BODY).lineBreakInCode() - beforeInside(RBRACE, BLOCK).lineBreakInCode() - // =============== Spacing ================ before(COMMA).spaceIf(jetCommonSettings.SPACE_BEFORE_COMMA) after(COMMA).spaceIf(jetCommonSettings.SPACE_AFTER_COMMA) @@ -198,12 +194,11 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { betweenInside(REFERENCE_EXPRESSION, FUNCTION_LITERAL_EXPRESSION, CALL_EXPRESSION).spaces(1) beforeInside(ELSE_KEYWORD, IF).spaces(1) - - between(RPAR, BODY).spaces(1) } custom { - val lbraceRuleForControlStructure: (ASTBlock, ASTBlock, ASTBlock) -> Spacing? = { - parent, left, right -> + + val leftBraceRule = { + (parent: ASTBlock, left: ASTBlock, right: ASTBlock) -> val blockOrExpression = right.getNode()!!.getFirstChildNode() val noBlockSpacing = Spacing.createSpacing(1, 1, 0, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE) if (blockOrExpression != null && blockOrExpression.getElementType() == BLOCK) { @@ -221,9 +216,10 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { } else noBlockSpacing } - inPosition(parent = IF, right = THEN).customRule(lbraceRuleForControlStructure) - inPosition(parent = IF, right = ELSE).customRule(lbraceRuleForControlStructure) + inPosition(parent = IF, right = THEN).customRule(leftBraceRule) + inPosition(parent = IF, right = ELSE).customRule(leftBraceRule) + inPosition(parent = WHILE, right = BODY).customRule(leftBraceRule) val spacesInSimpleFunction = if (jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD) 1 else 0 inPosition(parent = FUNCTION_LITERAL, @@ -258,6 +254,12 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { Spacing.createSpacing(numSpaces, numSpaces, 0, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE) } } + + simple { + afterInside(LBRACE, BLOCK).lineBreakInCode() + beforeInside(RBRACE, CLASS_BODY).lineBreakInCode() + beforeInside(RBRACE, BLOCK).lineBreakInCode() + between(RPAR, BODY).spaces(1) + } } } - diff --git a/idea/testData/formatter/WhileLineBreak.after.inv.kt b/idea/testData/formatter/WhileLineBreak.after.inv.kt new file mode 100644 index 00000000000..ca8311dc86f --- /dev/null +++ b/idea/testData/formatter/WhileLineBreak.after.inv.kt @@ -0,0 +1,22 @@ +fun main(args: Array) { + while (true) { + } + + while (true) { + } + + while (true) { + + } + + while (true) //blabla + { + } + + + while (true) //blabla + { + } +} + +// SET_TRUE: LBRACE_ON_NEXT_LINE \ No newline at end of file diff --git a/idea/testData/formatter/WhileLineBreak.after.kt b/idea/testData/formatter/WhileLineBreak.after.kt new file mode 100644 index 00000000000..49f0b47a3a0 --- /dev/null +++ b/idea/testData/formatter/WhileLineBreak.after.kt @@ -0,0 +1,25 @@ +fun main(args: Array) { + while (true) + { + } + + while (true) + { + } + + while (true) + { + + } + + while (true) //blabla + { + } + + + while (true) //blabla + { + } +} + +// SET_TRUE: LBRACE_ON_NEXT_LINE \ No newline at end of file diff --git a/idea/testData/formatter/WhileLineBreak.kt b/idea/testData/formatter/WhileLineBreak.kt new file mode 100644 index 00000000000..12ee26b44fd --- /dev/null +++ b/idea/testData/formatter/WhileLineBreak.kt @@ -0,0 +1,26 @@ +fun main(args: Array) { + while (true) + { + } + + while (true) + + { + } + + while (true) { + + } + + while (true) //blabla + + { + } + + + while (true) //blabla + { + } +} + +// SET_TRUE: LBRACE_ON_NEXT_LINE \ No newline at end of file diff --git a/idea/testData/formatter/WhileSpacing.after.kt b/idea/testData/formatter/WhileSpacing.after.kt index c63fa078509..44b98d46f0f 100644 --- a/idea/testData/formatter/WhileSpacing.after.kt +++ b/idea/testData/formatter/WhileSpacing.after.kt @@ -12,11 +12,9 @@ fun test() { while (true) { } - while (true) - { + while (true) { } - while (true) - { + while (true) { } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java index d4c0926e660..10a2359f320 100644 --- a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java @@ -234,6 +234,11 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTest("idea/testData/formatter/WhenLinesBeforeLbrace.after.kt"); } + @TestMetadata("WhileLineBreak.after.kt") + public void testWhileLineBreak() throws Exception { + doTest("idea/testData/formatter/WhileLineBreak.after.kt"); + } + @TestMetadata("WhileSpacing.after.kt") public void testWhileSpacing() throws Exception { doTest("idea/testData/formatter/WhileSpacing.after.kt"); @@ -402,6 +407,11 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTestInverted("idea/testData/formatter/WhenArrow.after.inv.kt"); } + @TestMetadata("WhileLineBreak.after.inv.kt") + public void testWhileLineBreak() throws Exception { + doTestInverted("idea/testData/formatter/WhileLineBreak.after.inv.kt"); + } + public static Test innerSuite() { TestSuite suite = new TestSuite("FormatterInverted"); suite.addTestSuite(FormatterInverted.class);