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 4f1f9570daf..da2fba9d655 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -262,6 +262,8 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing between(ENUM_ENTRY, SEMICOLON).spaces(0) + between(COMMA, SEMICOLON).lineBreakInCodeIf(kotlinCustomSettings.ALLOW_TRAILING_COMMA) + beforeInside(FUN, TokenSet.create(BODY, CLASS_BODY)).lineBreakInCode() beforeInside(SECONDARY_CONSTRUCTOR, TokenSet.create(BODY, CLASS_BODY)).lineBreakInCode() beforeInside(CLASS, TokenSet.create(BODY, CLASS_BODY)).lineBreakInCode() diff --git a/idea/testData/formatter/trailingComma/enumEntry/Enum.after.inv.kt b/idea/testData/formatter/trailingComma/enumEntry/Enum.after.inv.kt new file mode 100644 index 00000000000..297c668ec17 --- /dev/null +++ b/idea/testData/formatter/trailingComma/enumEntry/Enum.after.inv.kt @@ -0,0 +1,43 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA + +enum class Enum1 { + A, B, ; +} + +enum class Enum2 { + A, B; +} + +enum class Enum3 { + A, B + ; +} + +enum class Enum4 { + A, B, +} + +enum class Enum5 { + A, B, +} + +enum class Enum6(val a: Int) { + A( + 1 + ), + B, +} + +enum class Enum7(val a: Int) { + A( + 1 + ), + B, ; +} + +enum class Enum8(val a: Int) { + A( + 1 + ), + B; +} \ No newline at end of file diff --git a/idea/testData/formatter/trailingComma/enumEntry/Enum.after.kt b/idea/testData/formatter/trailingComma/enumEntry/Enum.after.kt new file mode 100644 index 00000000000..957012fff3e --- /dev/null +++ b/idea/testData/formatter/trailingComma/enumEntry/Enum.after.kt @@ -0,0 +1,45 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA + +enum class Enum1 { + A, B, + ; +} + +enum class Enum2 { + A, B; +} + +enum class Enum3 { + A, B + ; +} + +enum class Enum4 { + A, B, +} + +enum class Enum5 { + A, B, +} + +enum class Enum6(val a: Int) { + A( + 1, + ), + B, +} + +enum class Enum7(val a: Int) { + A( + 1, + ), + B, + ; +} + +enum class Enum8(val a: Int) { + A( + 1, + ), + B; +} \ No newline at end of file diff --git a/idea/testData/formatter/trailingComma/enumEntry/Enum.kt b/idea/testData/formatter/trailingComma/enumEntry/Enum.kt new file mode 100644 index 00000000000..e7800d7f70e --- /dev/null +++ b/idea/testData/formatter/trailingComma/enumEntry/Enum.kt @@ -0,0 +1,40 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA + +enum class Enum1 { + A, B,; +} + +enum class Enum2 { + A, B; +} + +enum class Enum3 { + A, B + ; +} + +enum class Enum4 { + A, B, +} + +enum class Enum5 { + A, B, +} + +enum class Enum6(val a: Int) { + A( + 1 + ), B, +} + +enum class Enum7(val a: Int) { + A( + 1 + ), B,; +} + +enum class Enum8(val a: Int) { + A( + 1 + ), B; +} \ 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 6b06f0702be..86cf98f5fc0 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java @@ -1205,6 +1205,24 @@ public class FormatterTestGenerated extends AbstractFormatterTest { } } + @TestMetadata("idea/testData/formatter/trailingComma/enumEntry") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class EnumEntry extends AbstractFormatterTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInEnumEntry() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/formatter/trailingComma/enumEntry"), Pattern.compile("^([^\\.]+)\\.after\\.kt.*$"), null, true); + } + + @TestMetadata("Enum.after.kt") + public void testEnum() throws Exception { + runTest("idea/testData/formatter/trailingComma/enumEntry/Enum.after.kt"); + } + } + @TestMetadata("idea/testData/formatter/trailingComma/indices") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) @@ -1785,6 +1803,24 @@ public class FormatterTestGenerated extends AbstractFormatterTest { } } + @TestMetadata("idea/testData/formatter/trailingComma/enumEntry") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class EnumEntry extends AbstractFormatterTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTestInverted, this, testDataFilePath); + } + + public void testAllFilesPresentInEnumEntry() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/formatter/trailingComma/enumEntry"), Pattern.compile("^([^\\.]+)\\.after\\.inv\\.kt.*$"), null, true); + } + + @TestMetadata("Enum.after.inv.kt") + public void testEnum() throws Exception { + runTest("idea/testData/formatter/trailingComma/enumEntry/Enum.after.inv.kt"); + } + } + @TestMetadata("idea/testData/formatter/trailingComma/indices") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)