From 717f8504702890acadc82be6bc3e493db74a0213 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 30 Mar 2015 18:01:51 +0300 Subject: [PATCH] Setup spacing rules for primary ctor's parts --- .../idea/formatter/kotlinSpacingRules.kt | 11 ++++++-- .../formatter/PrimaryConstructor.after.kt | 28 +++++++++++++++++++ idea/testData/formatter/PrimaryConstructor.kt | 27 ++++++++++++++++++ .../changeSignature/ConstructorAfter.kt | 2 +- .../GenericConstructorAfter.kt | 2 +- .../formatter/JetFormatterTestGenerated.java | 6 ++++ .../constructors/constructorAnnotations.kt | 2 +- .../constructors/privateConstructors.kt | 2 +- j2k/testData/fileOrElement/enum/colorEnum.kt | 2 +- .../fieldsWithPrimaryPrivateConstructor.kt | 2 +- .../enum/primaryPrivateConstructor.kt | 2 +- 11 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 idea/testData/formatter/PrimaryConstructor.after.kt create mode 100644 idea/testData/formatter/PrimaryConstructor.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt b/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt index 5aa0da6e5d0..5f0fdd64e3b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -145,6 +145,15 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { // before LPAR in constructor(): this() {} after(CONSTRUCTOR_DELEGATION_REFERENCE).spacing(0, 0, 0, false, 0) + // class A() - no space before LPAR of PRIMARY_CONSTRUCTOR + // class A private() - one space before modifier + custom { + inPosition(right = PRIMARY_CONSTRUCTOR).customRule { p, l, r -> + val spacesCount = if (r.getNode().findLeafElementAt(0)?.getElementType() != LPAR) 1 else 0 + Spacing.createSpacing(spacesCount, spacesCount, 0, true, 0) + } + } + aroundInside(DOT, DOT_QUALIFIED_EXPRESSION).spaces(0) aroundInside(SAFE_ACCESS, SAFE_ACCESS_EXPRESSION).spaces(0) @@ -183,8 +192,6 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { aroundInside(ARROW, FUNCTION_TYPE).spaceIf(jetSettings.SPACE_AROUND_FUNCTION_TYPE_ARROW) betweenInside(REFERENCE_EXPRESSION, FUNCTION_LITERAL_ARGUMENT, CALL_EXPRESSION).spaces(1) - - betweenInside(IDENTIFIER, MODIFIER_LIST, CLASS).spaces(1) } custom { diff --git a/idea/testData/formatter/PrimaryConstructor.after.kt b/idea/testData/formatter/PrimaryConstructor.after.kt new file mode 100644 index 00000000000..dae964048c0 --- /dev/null +++ b/idea/testData/formatter/PrimaryConstructor.after.kt @@ -0,0 +1,28 @@ +class A1() + +class A2 private () +class A3 private [ann] protected () +class A4 private [ann1] protected [ann2] () { + +} + +class A5 private [ann] + +() + +class A6 /* faddf */ private () + +class A7 +private +[ann] +() + +class A8 // eol comment +private +[ann] +() + +class A9 // eol comment +private // eol comment +[ann] // eol comment +() diff --git a/idea/testData/formatter/PrimaryConstructor.kt b/idea/testData/formatter/PrimaryConstructor.kt new file mode 100644 index 00000000000..803d3872b01 --- /dev/null +++ b/idea/testData/formatter/PrimaryConstructor.kt @@ -0,0 +1,27 @@ +class A1 () + +class A2 private () +class A3 private [ann] protected() +class A4 private [ann1] protected [ann2] () { + +} +class A5 private [ann] + +() + +class A6 /* faddf */ private () + +class A7 +private +[ann] +() + +class A8 // eol comment +private +[ann] +() + +class A9 // eol comment +private // eol comment +[ann] // eol comment +() diff --git a/idea/testData/refactoring/changeSignature/ConstructorAfter.kt b/idea/testData/refactoring/changeSignature/ConstructorAfter.kt index 7a7c772aaff..2ad049f63c5 100644 --- a/idea/testData/refactoring/changeSignature/ConstructorAfter.kt +++ b/idea/testData/refactoring/changeSignature/ConstructorAfter.kt @@ -1,6 +1,6 @@ open class C0(val x: Any?) {} -open class C1 (var _x1: Int = 1, _x2: Float?, val _x3: ((Int) -> Int)?) : C0(_x3){ +open class C1 (var _x1: Int = 1, _x2: Float?, val _x3: ((Int) -> Int)?) : C0(_x3){ fun bar() { val y1 = _x1; val y2 = _x2; diff --git a/idea/testData/refactoring/changeSignature/GenericConstructorAfter.kt b/idea/testData/refactoring/changeSignature/GenericConstructorAfter.kt index 5ffa0073b01..b19fe20b3d9 100644 --- a/idea/testData/refactoring/changeSignature/GenericConstructorAfter.kt +++ b/idea/testData/refactoring/changeSignature/GenericConstructorAfter.kt @@ -1,6 +1,6 @@ open class C0(val x: X) {} -open class C1 (var _x1: T? = null, _x2: Double?, val _x3: ((Int) -> Int)?) : C0<((Int) -> Int)?>(_x3){ +open class C1 (var _x1: T? = null, _x2: Double?, val _x3: ((Int) -> Int)?) : C0<((Int) -> Int)?>(_x3){ fun bar() { val y1 = _x1; val y2 = _x2; diff --git a/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java index 964a54ad4a5..300fccffbd0 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java @@ -376,6 +376,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTest(fileName); } + @TestMetadata("PrimaryConstructor.after.kt") + public void testPrimaryConstructor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/PrimaryConstructor.after.kt"); + doTest(fileName); + } + @TestMetadata("PropertyWithInference.after.kt") public void testPropertyWithInference() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/PropertyWithInference.after.kt"); diff --git a/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt b/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt index e6ac7ac7758..1983451fe15 100644 --- a/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt +++ b/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt @@ -13,4 +13,4 @@ class B [Anon5(11)] () class C [Anon5(12)] -private() \ No newline at end of file +private () \ No newline at end of file diff --git a/j2k/testData/fileOrElement/constructors/privateConstructors.kt b/j2k/testData/fileOrElement/constructors/privateConstructors.kt index 744daa7200c..4c2289de5b7 100644 --- a/j2k/testData/fileOrElement/constructors/privateConstructors.kt +++ b/j2k/testData/fileOrElement/constructors/privateConstructors.kt @@ -1,4 +1,4 @@ -class C private(arg1: Int, arg2: Int, arg3: Int = 0) { +class C private (arg1: Int, arg2: Int, arg3: Int = 0) { public constructor(arg1: Int) : this(arg1, 0, 0) { } diff --git a/j2k/testData/fileOrElement/enum/colorEnum.kt b/j2k/testData/fileOrElement/enum/colorEnum.kt index 00dfc632fc1..bccd12d395e 100644 --- a/j2k/testData/fileOrElement/enum/colorEnum.kt +++ b/j2k/testData/fileOrElement/enum/colorEnum.kt @@ -1,6 +1,6 @@ package demo -enum class MyEnum private(public val color: Int) { +enum class MyEnum private (public val color: Int) { RED : MyEnum(10) BLUE : MyEnum(20) } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt b/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt index d57aa80dad1..8cad55bdcad 100644 --- a/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt +++ b/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt @@ -1,4 +1,4 @@ -enum class Color private(public val code: Int) { +enum class Color private (public val code: Int) { WHITE : Color(21) BLACK : Color(22) RED : Color(23) diff --git a/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt b/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt index 59d0da30bdb..25f6da27e22 100644 --- a/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt +++ b/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt @@ -1,3 +1,3 @@ package demo -enum class Color private(public val code: Int) \ No newline at end of file +enum class Color private (public val code: Int) \ No newline at end of file