From 17699f7f0ec448019fc17df45e7b90767899c58d Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 24 Apr 2014 17:45:23 +0400 Subject: [PATCH] Fix 'Formatter doesn't remove redundant spaces between modifiers, name, and opening brace' #KT-3370 Fixed --- .../plugin/formatter/kotlinSpacingRules.kt | 25 ++++++ .../formatter/SpacesInDeclarations.after.kt | 79 ++++++++++++++++++ .../formatter/SpacesInDeclarations.kt | 83 +++++++++++++++++++ .../formatter/JetFormatterTestGenerated.java | 9 +- 4 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 idea/testData/formatter/SpacesInDeclarations.after.kt create mode 100644 idea/testData/formatter/SpacesInDeclarations.kt diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt b/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt index 6b315b066c5..a32d616a498 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt +++ b/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt @@ -28,6 +28,8 @@ import com.intellij.lang.ASTNode import com.intellij.formatting.ASTBlock import org.jetbrains.jet.plugin.formatter.KotlinSpacingBuilder.CustomSpacingBuilder +val MODIFIERS_LIST_ENTRIES = TokenSet.orSet(TokenSet.create(ANNOTATION_ENTRY, ANNOTATION), MODIFIER_KEYWORDS) + fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { val jetSettings = settings.getCustomSettings(javaClass())!! val jetCommonSettings = settings.getCommonSettings(JetLanguage.INSTANCE)!! @@ -58,6 +60,29 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { around(ELVIS).spaces(1) around(RANGE).spaceIf(jetSettings.SPACE_AROUND_RANGE) + after(MODIFIER_LIST).spaces(1) + + beforeInside(IDENTIFIER, CLASS).spaces(1) + beforeInside(OBJECT_DECLARATION_NAME, OBJECT_DECLARATION).spaces(1) + + betweenInside(VAL_KEYWORD, IDENTIFIER, PROPERTY).spaces(1) + betweenInside(VAR_KEYWORD, IDENTIFIER, PROPERTY).spaces(1) + betweenInside(VAL_KEYWORD, TYPE_REFERENCE, PROPERTY).spaces(1) + betweenInside(VAR_KEYWORD, TYPE_REFERENCE, PROPERTY).spaces(1) + betweenInside(TYPE_REFERENCE, DOT, PROPERTY).spacing(0, 0, 0, false, 0) + betweenInside(DOT, IDENTIFIER, PROPERTY).spacing(0, 0, 0, false, 0) + + betweenInside(FUN_KEYWORD, IDENTIFIER, FUN).spaces(1) + betweenInside(FUN_KEYWORD, TYPE_REFERENCE, FUN).spaces(1) + betweenInside(TYPE_REFERENCE, DOT, FUN).spacing(0, 0, 0, false, 0) + betweenInside(DOT, IDENTIFIER, FUN).spacing(0, 0, 0, false, 0) + afterInside(IDENTIFIER, FUN).spacing(0, 0, 0, false, 0) + + between(MODIFIERS_LIST_ENTRIES, MODIFIERS_LIST_ENTRIES).spaces(1) + + after(LBRACKET).spaces(0) + before(RBRACKET).spaces(0) + afterInside(LPAR, VALUE_PARAMETER_LIST).spaces(0) beforeInside(RPAR, VALUE_PARAMETER_LIST).spaces(0) afterInside(LT, TYPE_PARAMETER_LIST).spaces(0) diff --git a/idea/testData/formatter/SpacesInDeclarations.after.kt b/idea/testData/formatter/SpacesInDeclarations.after.kt new file mode 100644 index 00000000000..22425aff0e2 --- /dev/null +++ b/idea/testData/formatter/SpacesInDeclarations.after.kt @@ -0,0 +1,79 @@ +public data open class FooClass1 { + +} + +public open +data class FooClass2 + +//----------------------- + +public fun fooFun1() { +} + +public +fun fooFun2() { +} + +//----------------------- +public fun Int.extFun1() { +} + +public +fun Int.extFun2() { +} +//----------------------- +val fooVal1 = 1 + +val fooVal2 = 1 +//----------------------- +var fooVar1 = 1 + +var fooVar2 = 2 +//----------------------- +private val Int.extVal1 = 122 + +private +val + Int.extVal: Int = 1 +//----------------------- +public var Int.extVar1: Int = 122 + +public +var + Int.extVar: Int = 1 +//----------------------- +annotation class A1 +annotation class A2 + +private [A1 A2 A1] A1 A2 [A1 A2 A2] [A1] val fooProp1 = 1 + +private [ + + +A1 + + +A2 A1] A1 A2 [A1 +A2 + + +A2 + +] [A1] val fooProp1 = 1 + +private A1 + +A2 val + fooProp2 = 1 + + +//----------------------- + +public object FooObject1 { + +} + +public +object FooObject2 { + +} \ No newline at end of file diff --git a/idea/testData/formatter/SpacesInDeclarations.kt b/idea/testData/formatter/SpacesInDeclarations.kt new file mode 100644 index 00000000000..962b105f08a --- /dev/null +++ b/idea/testData/formatter/SpacesInDeclarations.kt @@ -0,0 +1,83 @@ +public data open class FooClass1 { + +} + +public open + data class FooClass2 + +//----------------------- + +public fun fooFun1 () {} + +public +fun fooFun2 () {} + +//----------------------- +public fun Int . extFun1 () {} + +public +fun Int + . + extFun2 () {} +//----------------------- + val fooVal1 = 1 + +val fooVal2 = 1 +//----------------------- + var fooVar1 = 1 + +var fooVar2 = 2 +//----------------------- +private val Int . extVal1 = 122 + +private +val + Int + . + extVal : Int = 1 +//----------------------- +public var Int . extVar1:Int = 122 + +public +var + Int + . + extVar : Int = 1 +//----------------------- +annotation class A1 +annotation class A2 + +private [ A1 A2 A1 ] A1 A2 [ A1 A2 A2 ] [A1] val fooProp1 = 1 + +private [ + + +A1 + + +A2 A1 ] A1 A2 [A1 +A2 + + + + +A2 + +] [A1] val fooProp1 = 1 + +private A1 + +A2 val + fooProp2 = 1 + + +//----------------------- + +public object FooObject1 { + +} + +public +object FooObject2 { + +} \ 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 d67fb4a13a5..2be4c631daa 100644 --- a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java @@ -269,6 +269,11 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTest("idea/testData/formatter/SpacesAroundUnaryOperations.after.kt"); } + @TestMetadata("SpacesInDeclarations.after.kt") + public void testSpacesInDeclarations() throws Exception { + doTest("idea/testData/formatter/SpacesInDeclarations.after.kt"); + } + @TestMetadata("TryCatchLineBreak.after.kt") public void testTryCatchLineBreak() throws Exception { doTest("idea/testData/formatter/TryCatchLineBreak.after.kt"); @@ -322,7 +327,9 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { @TestMetadata("idea/testData/formatter/modifierList") public static class ModifierList extends AbstractJetFormatterTest { public void testAllFilesPresentInModifierList() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/formatter/modifierList"), Pattern.compile("^([^\\.]+)\\.after\\.kt.*$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", + new File("idea/testData/formatter/modifierList"), + Pattern.compile("^([^\\.]+)\\.after\\.kt.*$"), true); } @TestMetadata("funAnnotationBeforeAnnotation.after.kt")