Formatter: empty lines between declarations
This commit is contained in:
@@ -80,12 +80,12 @@ class KotlinSpacingBuilder(val codeStyleSettings: CodeStyleSettings) {
|
||||
}
|
||||
}
|
||||
|
||||
fun emptyLinesIfLineBreakInLeft(emptyLines: Int) {
|
||||
fun emptyLinesIfLineBreakInLeft(emptyLines: Int, numberOfLineFeedsOtherwise: Int = 1, numSpacesOtherwise: Int = 0) {
|
||||
newRule {(parent: ASTBlock, left: ASTBlock, right: ASTBlock) ->
|
||||
val dependentSpacingRule = DependentSpacingRule(Trigger.HAS_LINE_FEEDS).registerData(Anchor.MIN_LINE_FEEDS, emptyLines + 1)
|
||||
LineFeedDependantSpacing(
|
||||
0, 0,
|
||||
minimumLineFeeds = 1,
|
||||
numSpacesOtherwise, numSpacesOtherwise,
|
||||
minimumLineFeeds = numberOfLineFeedsOtherwise,
|
||||
keepLineBreaks = codeStyleSettings.KEEP_LINE_BREAKS,
|
||||
keepBlankLines = codeStyleSettings.KEEP_BLANK_LINES_IN_DECLARATIONS,
|
||||
dependency = left.getTextRange(), rule = dependentSpacingRule)
|
||||
|
||||
@@ -50,6 +50,8 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
|
||||
val jetCommonSettings = settings.getCommonSettings(JetLanguage.INSTANCE)!!
|
||||
|
||||
return rules(settings) {
|
||||
val DECLARATIONS = TokenSet.create(PROPERTY, FUN, CLASS, OBJECT_DECLARATION, ENUM_ENTRY)
|
||||
|
||||
custom {
|
||||
inPosition(left = CLASS, right = CLASS).emptyLinesIfLineBreakInLeft(1)
|
||||
inPosition(left = FUN, right = FUN).emptyLinesIfLineBreakInLeft(1)
|
||||
@@ -58,6 +60,9 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
|
||||
|
||||
// Case left for alternative constructors
|
||||
inPosition(left = FUN, right = CLASS).emptyLinesIfLineBreakInLeft(1)
|
||||
|
||||
inPosition(left = ENUM_ENTRY, right = ENUM_ENTRY).emptyLinesIfLineBreakInLeft(
|
||||
emptyLines = 0, numSpacesOtherwise = 1, numberOfLineFeedsOtherwise = 0)
|
||||
}
|
||||
|
||||
simple {
|
||||
@@ -69,9 +74,19 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder {
|
||||
before(DOC_COMMENT).lineBreakInCode()
|
||||
between(PROPERTY, PROPERTY).lineBreakInCode()
|
||||
|
||||
between(CLASS, FUN).blankLines(1)
|
||||
between(CLASS, PROPERTY).blankLines(1)
|
||||
between(PROPERTY, CLASS).blankLines(1)
|
||||
// CLASS - CLASS is exception
|
||||
between(CLASS, DECLARATIONS).blankLines(1)
|
||||
|
||||
// FUN - FUN, FUN - PROPERTY, FUN - CLASS are exceptions
|
||||
between(FUN, DECLARATIONS).blankLines(1)
|
||||
|
||||
// PROPERTY - PROPERTY, PROPERTY - FUN are exceptions
|
||||
between(PROPERTY, DECLARATIONS).blankLines(1)
|
||||
|
||||
between(OBJECT_DECLARATION, DECLARATIONS).blankLines(1)
|
||||
|
||||
// ENUM_ENTRY - ENUM_ENTRY is exception
|
||||
between(ENUM_ENTRY, DECLARATIONS).blankLines(1)
|
||||
|
||||
before(FUN).lineBreakInCode()
|
||||
before(PROPERTY).lineBreakInCode()
|
||||
|
||||
@@ -33,7 +33,8 @@ enum class Test : A1 {
|
||||
Test()
|
||||
|
||||
THIRD_ITEM : Test(),
|
||||
C1() FORTH_ITEM : Test()
|
||||
C1()
|
||||
FORTH_ITEM : Test()
|
||||
}
|
||||
|
||||
// SET_TRUE: ALIGN_MULTILINE_EXTENDS_LIST
|
||||
@@ -33,7 +33,8 @@ enum class Test : A1 {
|
||||
Test()
|
||||
|
||||
THIRD_ITEM : Test(),
|
||||
C1() FORTH_ITEM : Test()
|
||||
C1()
|
||||
FORTH_ITEM : Test()
|
||||
}
|
||||
|
||||
// SET_TRUE: ALIGN_MULTILINE_EXTENDS_LIST
|
||||
@@ -0,0 +1,117 @@
|
||||
object O1
|
||||
|
||||
object O2
|
||||
|
||||
// -----
|
||||
|
||||
object O3
|
||||
|
||||
fun f1() = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O4
|
||||
|
||||
val p1 = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O5
|
||||
|
||||
class C1
|
||||
|
||||
// -----
|
||||
|
||||
object O6
|
||||
|
||||
trait T1
|
||||
|
||||
// -----
|
||||
|
||||
enum class E1 {
|
||||
object O7
|
||||
|
||||
ENTRY
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
object O8 {}
|
||||
|
||||
object O9
|
||||
|
||||
// -----
|
||||
|
||||
object O10 {}
|
||||
|
||||
fun f2() = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O11 {}
|
||||
|
||||
val p2 = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O12 {}
|
||||
|
||||
class C2
|
||||
|
||||
// -----
|
||||
|
||||
object O13 {}
|
||||
|
||||
trait T2
|
||||
|
||||
// -----
|
||||
|
||||
enum class E2 {
|
||||
object O14 {}
|
||||
|
||||
ENTRY
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
object O15 {
|
||||
}
|
||||
|
||||
object O16
|
||||
|
||||
// -----
|
||||
|
||||
object O17 {
|
||||
}
|
||||
|
||||
fun f3() = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O18 {
|
||||
}
|
||||
|
||||
val p3 = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O19 {
|
||||
}
|
||||
|
||||
class C3
|
||||
|
||||
// -----
|
||||
|
||||
object O20 {
|
||||
}
|
||||
|
||||
trait T3
|
||||
|
||||
// -----
|
||||
|
||||
enum class E3 {
|
||||
object O21 {
|
||||
}
|
||||
|
||||
ENTRY
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
object O1
|
||||
object O2
|
||||
|
||||
// -----
|
||||
|
||||
object O3
|
||||
fun f1() = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O4
|
||||
val p1 = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O5
|
||||
class C1
|
||||
|
||||
// -----
|
||||
|
||||
object O6
|
||||
trait T1
|
||||
|
||||
// -----
|
||||
|
||||
enum class E1 {
|
||||
object O7
|
||||
ENTRY
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
object O8 {}
|
||||
object O9
|
||||
|
||||
// -----
|
||||
|
||||
object O10 {}
|
||||
fun f2() = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O11 {}
|
||||
val p2 = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O12 {}
|
||||
class C2
|
||||
|
||||
// -----
|
||||
|
||||
object O13 {}
|
||||
trait T2
|
||||
|
||||
// -----
|
||||
|
||||
enum class E2 {
|
||||
object O14 {}
|
||||
ENTRY
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
object O15 {
|
||||
}
|
||||
object O16
|
||||
|
||||
// -----
|
||||
|
||||
object O17 {
|
||||
}
|
||||
fun f3() = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O18 {
|
||||
}
|
||||
val p3 = 1
|
||||
|
||||
// -----
|
||||
|
||||
object O19 {
|
||||
}
|
||||
class C3
|
||||
|
||||
// -----
|
||||
|
||||
object O20 {
|
||||
}
|
||||
trait T3
|
||||
|
||||
// -----
|
||||
|
||||
enum class E3 {
|
||||
object O21 {
|
||||
}
|
||||
ENTRY
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
enum class E1 { F S T
|
||||
}
|
||||
|
||||
enum class E2 {
|
||||
F S T
|
||||
}
|
||||
|
||||
enum class E3 {
|
||||
F S T
|
||||
}
|
||||
|
||||
enum class E4 {
|
||||
F {
|
||||
}
|
||||
S T
|
||||
}
|
||||
|
||||
enum class E5 { F S {} T
|
||||
}
|
||||
|
||||
enum class E6 {
|
||||
F S T {}
|
||||
}
|
||||
|
||||
enum class E7 {
|
||||
F {
|
||||
|
||||
}
|
||||
S T
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
enum class E1 { F S T }
|
||||
|
||||
enum class E2 {
|
||||
F S T
|
||||
}
|
||||
|
||||
enum class E3 {
|
||||
F S T}
|
||||
|
||||
enum class E4 {
|
||||
F {
|
||||
}
|
||||
S T}
|
||||
|
||||
enum class E5 { F S {} T }
|
||||
|
||||
enum class E6 {
|
||||
F S T {}
|
||||
}
|
||||
|
||||
enum class E7 {
|
||||
F {
|
||||
|
||||
} S T
|
||||
}
|
||||
@@ -148,6 +148,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("EmptyLineAfterObjectDeclaration.after.kt")
|
||||
public void testEmptyLineAfterObjectDeclaration() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineAfterObjectDeclaration.after.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("EmptyLineAfterPackage.after.kt")
|
||||
public void testEmptyLineAfterPackage() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineAfterPackage.after.kt");
|
||||
@@ -172,6 +178,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("EmptyLineBetweenEnumEntries.after.kt")
|
||||
public void testEmptyLineBetweenEnumEntries() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenEnumEntries.after.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("EmptyLineBetweenFunAndProperty.after.kt")
|
||||
public void testEmptyLineBetweenFunAndProperty() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenFunAndProperty.after.kt");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
enum class E {
|
||||
I
|
||||
|
||||
private val name: String? = null
|
||||
}
|
||||
@@ -4,6 +4,7 @@ enum class Color {
|
||||
RED
|
||||
YELLOW
|
||||
BLUE
|
||||
|
||||
override fun toString(): String {
|
||||
return "COLOR"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user