From c6acc4c5bea14142bbcf0642321e9c9d082d2947 Mon Sep 17 00:00:00 2001 From: Andrius Semionovas Date: Thu, 1 Jun 2017 23:12:03 +0300 Subject: [PATCH] KT-16558 Add space before parentheses config --- .../formatter/KotlinCodeStyleSettings.java | 1 + .../idea/formatter/kotlinSpacingRules.kt | 11 ++-- ...tlinLanguageCodeStyleSettingsProvider.java | 23 ++++++- .../SpaceBeforeCatchParentheses.after.inv.kt | 9 +++ .../SpaceBeforeCatchParentheses.after.kt | 9 +++ .../formatter/SpaceBeforeCatchParentheses.kt | 9 +++ .../SpaceBeforeForParentheses.after.inv.kt | 7 +++ .../SpaceBeforeForParentheses.after.kt | 7 +++ .../formatter/SpaceBeforeForParentheses.kt | 7 +++ .../SpaceBeforeIfParentheses.after.inv.kt | 7 +++ .../SpaceBeforeIfParentheses.after.kt | 7 +++ .../formatter/SpaceBeforeIfParentheses.kt | 7 +++ .../SpaceBeforeWhenParentheses.after.inv.kt | 7 +++ .../SpaceBeforeWhenParentheses.after.kt | 7 +++ .../formatter/SpaceBeforeWhenParentheses.kt | 7 +++ .../SpaceBeforeWhileParentheses.after.inv.kt | 11 ++++ .../SpaceBeforeWhileParentheses.after.kt | 11 ++++ .../formatter/SpaceBeforeWhileParentheses.kt | 11 ++++ .../formatter/FormatterTestGenerated.java | 60 +++++++++++++++++++ 19 files changed, 211 insertions(+), 7 deletions(-) create mode 100644 idea/testData/formatter/SpaceBeforeCatchParentheses.after.inv.kt create mode 100644 idea/testData/formatter/SpaceBeforeCatchParentheses.after.kt create mode 100644 idea/testData/formatter/SpaceBeforeCatchParentheses.kt create mode 100644 idea/testData/formatter/SpaceBeforeForParentheses.after.inv.kt create mode 100644 idea/testData/formatter/SpaceBeforeForParentheses.after.kt create mode 100644 idea/testData/formatter/SpaceBeforeForParentheses.kt create mode 100644 idea/testData/formatter/SpaceBeforeIfParentheses.after.inv.kt create mode 100644 idea/testData/formatter/SpaceBeforeIfParentheses.after.kt create mode 100644 idea/testData/formatter/SpaceBeforeIfParentheses.kt create mode 100644 idea/testData/formatter/SpaceBeforeWhenParentheses.after.inv.kt create mode 100644 idea/testData/formatter/SpaceBeforeWhenParentheses.after.kt create mode 100644 idea/testData/formatter/SpaceBeforeWhenParentheses.kt create mode 100644 idea/testData/formatter/SpaceBeforeWhileParentheses.after.inv.kt create mode 100644 idea/testData/formatter/SpaceBeforeWhileParentheses.after.kt create mode 100644 idea/testData/formatter/SpaceBeforeWhileParentheses.kt diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/core/formatter/KotlinCodeStyleSettings.java b/idea/formatter/src/org/jetbrains/kotlin/idea/core/formatter/KotlinCodeStyleSettings.java index b860a279f0c..298be02f957 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/core/formatter/KotlinCodeStyleSettings.java +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/core/formatter/KotlinCodeStyleSettings.java @@ -35,6 +35,7 @@ public class KotlinCodeStyleSettings extends CustomCodeStyleSettings { public boolean SPACE_AROUND_FUNCTION_TYPE_ARROW = true; public boolean SPACE_AROUND_WHEN_ARROW = true; public boolean SPACE_BEFORE_LAMBDA_ARROW = true; + public boolean SPACE_BEFORE_WHEN_PARENTHESES = true; public boolean LBRACE_ON_NEXT_LINE = false; public int NAME_COUNT_TO_USE_STAR_IMPORT = ApplicationManager.getApplication().isUnitTestMode() ? Integer.MAX_VALUE : 5; public int NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS = ApplicationManager.getApplication().isUnitTestMode() ? Integer.MAX_VALUE : 3; 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 a3dd37b11d1..3981bedbead 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -214,11 +214,12 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing beforeInside(GT, TYPE_ARGUMENT_LIST).spaces(0) before(TYPE_ARGUMENT_LIST).spaces(0) - betweenInside(FOR_KEYWORD, LPAR, FOR).spacing(1, 1, 0, false, 0) - betweenInside(IF_KEYWORD, LPAR, IF).spacing(1, 1, 0, false, 0) - betweenInside(WHILE_KEYWORD, LPAR, WHILE).spacing(1, 1, 0, false, 0) - betweenInside(WHILE_KEYWORD, LPAR, DO_WHILE).spacing(1, 1, 0, false, 0) - betweenInside(WHEN_KEYWORD, LPAR, WHEN).spacing(1, 1, 0, false, 0) + betweenInside(FOR_KEYWORD, LPAR, FOR).lineBreakOrForceSpace(false, kotlinCommonSettings.SPACE_BEFORE_FOR_PARENTHESES) + betweenInside(IF_KEYWORD, LPAR, IF).lineBreakOrForceSpace(false, kotlinCommonSettings.SPACE_BEFORE_IF_PARENTHESES) + betweenInside(WHILE_KEYWORD, LPAR, WHILE).lineBreakOrForceSpace(false, kotlinCommonSettings.SPACE_BEFORE_WHILE_PARENTHESES) + betweenInside(WHILE_KEYWORD, LPAR, DO_WHILE).lineBreakOrForceSpace(false, kotlinCommonSettings.SPACE_BEFORE_WHILE_PARENTHESES) + betweenInside(WHEN_KEYWORD, LPAR, WHEN).lineBreakOrForceSpace(false, kotlinSettings.SPACE_BEFORE_WHEN_PARENTHESES) + betweenInside(CATCH_KEYWORD, VALUE_PARAMETER_LIST, CATCH).lineBreakOrForceSpace(false, kotlinCommonSettings.SPACE_BEFORE_CATCH_PARENTHESES) betweenInside(LPAR, VALUE_PARAMETER, FOR).spaces(0) betweenInside(LPAR, DESTRUCTURING_DECLARATION, FOR).spaces(0) diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinLanguageCodeStyleSettingsProvider.java b/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinLanguageCodeStyleSettingsProvider.java index f732005ab43..0f8beac187d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinLanguageCodeStyleSettingsProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinLanguageCodeStyleSettingsProvider.java @@ -122,6 +122,18 @@ public class KotlinLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe " else -> 0\n"+ " })\n"+ " }\n"+ + " if (true) { }\n" + + " while (true) { " + + " break" + + " }\n" + + " try {\n" + + " when (test) {\n" + + " 12 -> println(\"foo\")\n" + + " else -> println(\"bar\")\n" + + " }\n" + + " } catch (e: Exception) {\n" + + " } finally {\n" + + " }\n" + " return test\n"+ " }\n"+ " private fun foo2(): Int where T : List {\n"+ @@ -129,7 +141,6 @@ public class KotlinLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe " }\n"+ "}\n"+ "class AnotherClass : Some()\n"; - } } @@ -151,7 +162,11 @@ public class KotlinLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe "SPACE_AROUND_MULTIPLICATIVE_OPERATORS", "SPACE_AROUND_UNARY_OPERATOR", "SPACE_AFTER_COMMA", - "SPACE_BEFORE_COMMA" + "SPACE_BEFORE_COMMA", + "SPACE_BEFORE_IF_PARENTHESES", + "SPACE_BEFORE_WHILE_PARENTHESES", + "SPACE_BEFORE_FOR_PARENTHESES", + "SPACE_BEFORE_CATCH_PARENTHESES" ); consumer.showCustomOption(KotlinCodeStyleSettings.class, "SPACE_AROUND_RANGE", "Around range (..)", @@ -189,6 +204,10 @@ public class KotlinLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe "Before lambda arrow", CodeStyleSettingsCustomizable.SPACES_OTHER); + consumer.showCustomOption(KotlinCodeStyleSettings.class, "SPACE_BEFORE_WHEN_PARENTHESES", + "'when' parentheses", + CodeStyleSettingsCustomizable.SPACES_BEFORE_PARENTHESES); + break; case WRAPPING_AND_BRACES_SETTINGS: consumer.showStandardOptions( diff --git a/idea/testData/formatter/SpaceBeforeCatchParentheses.after.inv.kt b/idea/testData/formatter/SpaceBeforeCatchParentheses.after.inv.kt new file mode 100644 index 00000000000..76db43d7385 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeCatchParentheses.after.inv.kt @@ -0,0 +1,9 @@ +fun some() { + try { + + } catch (e: Exception) { + + } +} + +// SET_FALSE: SPACE_BEFORE_CATCH_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeCatchParentheses.after.kt b/idea/testData/formatter/SpaceBeforeCatchParentheses.after.kt new file mode 100644 index 00000000000..fc4fbfc4c98 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeCatchParentheses.after.kt @@ -0,0 +1,9 @@ +fun some() { + try { + + } catch(e: Exception) { + + } +} + +// SET_FALSE: SPACE_BEFORE_CATCH_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeCatchParentheses.kt b/idea/testData/formatter/SpaceBeforeCatchParentheses.kt new file mode 100644 index 00000000000..7cb17e535d5 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeCatchParentheses.kt @@ -0,0 +1,9 @@ +fun some() { + try { + + } catch (e: Exception) { + + } +} + +// SET_FALSE: SPACE_BEFORE_CATCH_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeForParentheses.after.inv.kt b/idea/testData/formatter/SpaceBeforeForParentheses.after.inv.kt new file mode 100644 index 00000000000..be3841edb54 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeForParentheses.after.inv.kt @@ -0,0 +1,7 @@ +fun some() { + for (i in 0..42) { + + } +} + +// SET_FALSE: SPACE_BEFORE_FOR_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeForParentheses.after.kt b/idea/testData/formatter/SpaceBeforeForParentheses.after.kt new file mode 100644 index 00000000000..a6cc038503a --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeForParentheses.after.kt @@ -0,0 +1,7 @@ +fun some() { + for(i in 0..42) { + + } +} + +// SET_FALSE: SPACE_BEFORE_FOR_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeForParentheses.kt b/idea/testData/formatter/SpaceBeforeForParentheses.kt new file mode 100644 index 00000000000..9f4969bc528 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeForParentheses.kt @@ -0,0 +1,7 @@ +fun some() { + for (i in 0..42) { + + } +} + +// SET_FALSE: SPACE_BEFORE_FOR_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeIfParentheses.after.inv.kt b/idea/testData/formatter/SpaceBeforeIfParentheses.after.inv.kt new file mode 100644 index 00000000000..b10571e4f5d --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeIfParentheses.after.inv.kt @@ -0,0 +1,7 @@ +fun some() { + if (true) { + + } +} + +// SET_FALSE: SPACE_BEFORE_IF_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeIfParentheses.after.kt b/idea/testData/formatter/SpaceBeforeIfParentheses.after.kt new file mode 100644 index 00000000000..29ec18eb4a6 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeIfParentheses.after.kt @@ -0,0 +1,7 @@ +fun some() { + if(true) { + + } +} + +// SET_FALSE: SPACE_BEFORE_IF_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeIfParentheses.kt b/idea/testData/formatter/SpaceBeforeIfParentheses.kt new file mode 100644 index 00000000000..64e07d90b07 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeIfParentheses.kt @@ -0,0 +1,7 @@ +fun some() { + if (true) { + + } +} + +// SET_FALSE: SPACE_BEFORE_IF_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeWhenParentheses.after.inv.kt b/idea/testData/formatter/SpaceBeforeWhenParentheses.after.inv.kt new file mode 100644 index 00000000000..4b0bf0eeb22 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeWhenParentheses.after.inv.kt @@ -0,0 +1,7 @@ +fun some() { + when (true) { + + } +} + +// SET_FALSE: SPACE_BEFORE_WHEN_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeWhenParentheses.after.kt b/idea/testData/formatter/SpaceBeforeWhenParentheses.after.kt new file mode 100644 index 00000000000..c574574fe7f --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeWhenParentheses.after.kt @@ -0,0 +1,7 @@ +fun some() { + when(true) { + + } +} + +// SET_FALSE: SPACE_BEFORE_WHEN_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeWhenParentheses.kt b/idea/testData/formatter/SpaceBeforeWhenParentheses.kt new file mode 100644 index 00000000000..03d4eb644a2 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeWhenParentheses.kt @@ -0,0 +1,7 @@ +fun some() { + when (true) { + + } +} + +// SET_FALSE: SPACE_BEFORE_WHEN_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeWhileParentheses.after.inv.kt b/idea/testData/formatter/SpaceBeforeWhileParentheses.after.inv.kt new file mode 100644 index 00000000000..cc98ab7f820 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeWhileParentheses.after.inv.kt @@ -0,0 +1,11 @@ +fun some() { + while (true) { + + } + + do { + + } while (true) +} + +// SET_FALSE: SPACE_BEFORE_WHILE_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeWhileParentheses.after.kt b/idea/testData/formatter/SpaceBeforeWhileParentheses.after.kt new file mode 100644 index 00000000000..8263ca7e621 --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeWhileParentheses.after.kt @@ -0,0 +1,11 @@ +fun some() { + while(true) { + + } + + do { + + } while(true) +} + +// SET_FALSE: SPACE_BEFORE_WHILE_PARENTHESES \ No newline at end of file diff --git a/idea/testData/formatter/SpaceBeforeWhileParentheses.kt b/idea/testData/formatter/SpaceBeforeWhileParentheses.kt new file mode 100644 index 00000000000..107ee6094ea --- /dev/null +++ b/idea/testData/formatter/SpaceBeforeWhileParentheses.kt @@ -0,0 +1,11 @@ +fun some() { + while (true) { + + } + + do { + + } while (true) +} + +// SET_FALSE: SPACE_BEFORE_WHILE_PARENTHESES \ 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 e4ca7626f7a..20e3c794212 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java @@ -596,6 +596,18 @@ public class FormatterTestGenerated extends AbstractFormatterTest { doTest(fileName); } + @TestMetadata("SpaceBeforeCatchParentheses.after.kt") + public void testSpaceBeforeCatchParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeCatchParentheses.after.kt"); + doTest(fileName); + } + + @TestMetadata("SpaceBeforeForParentheses.after.kt") + public void testSpaceBeforeForParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeForParentheses.after.kt"); + doTest(fileName); + } + @TestMetadata("SpaceBeforeFunctionLiteral.after.kt") public void testSpaceBeforeFunctionLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeFunctionLiteral.after.kt"); @@ -614,6 +626,24 @@ public class FormatterTestGenerated extends AbstractFormatterTest { doTest(fileName); } + @TestMetadata("SpaceBeforeIfParentheses.after.kt") + public void testSpaceBeforeIfParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeIfParentheses.after.kt"); + doTest(fileName); + } + + @TestMetadata("SpaceBeforeWhenParentheses.after.kt") + public void testSpaceBeforeWhenParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeWhenParentheses.after.kt"); + doTest(fileName); + } + + @TestMetadata("SpaceBeforeWhileParentheses.after.kt") + public void testSpaceBeforeWhileParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeWhileParentheses.after.kt"); + doTest(fileName); + } + @TestMetadata("SpacedInsideParans.after.kt") public void testSpacedInsideParans() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpacedInsideParans.after.kt"); @@ -1100,6 +1130,36 @@ public class FormatterTestGenerated extends AbstractFormatterTest { doTestInverted(fileName); } + @TestMetadata("SpaceBeforeCatchParentheses.after.inv.kt") + public void testSpaceBeforeCatchParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeCatchParentheses.after.inv.kt"); + doTestInverted(fileName); + } + + @TestMetadata("SpaceBeforeForParentheses.after.inv.kt") + public void testSpaceBeforeForParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeForParentheses.after.inv.kt"); + doTestInverted(fileName); + } + + @TestMetadata("SpaceBeforeIfParentheses.after.inv.kt") + public void testSpaceBeforeIfParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeIfParentheses.after.inv.kt"); + doTestInverted(fileName); + } + + @TestMetadata("SpaceBeforeWhenParentheses.after.inv.kt") + public void testSpaceBeforeWhenParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeWhenParentheses.after.inv.kt"); + doTestInverted(fileName); + } + + @TestMetadata("SpaceBeforeWhileParentheses.after.inv.kt") + public void testSpaceBeforeWhileParentheses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeWhileParentheses.after.inv.kt"); + doTestInverted(fileName); + } + @TestMetadata("SpacesAroundOperations.after.inv.kt") public void testSpacesAroundOperations() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/SpacesAroundOperations.after.inv.kt");