From ae1138c4ba8eed2451923311ececbe3589ab2d48 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 12 Mar 2012 17:43:29 +0400 Subject: [PATCH] Activate "around operators" space properties. Remove other from settings --- .../jet/plugin/formatter/JetBlock.java | 7 ++ .../formatter/JetCodeStyleSettings.java | 2 + .../formatter/JetFormattingModelBuilder.java | 19 ++- .../JetLanguageCodeStyleSettingsProvider.java | 109 +++++++++--------- .../formatter/AddSpacesAroundOperations.kt | 39 +++++++ .../AddSpacesAroundOperations_after.kt | 39 +++++++ .../formatter/RemoveSpacesAroundOperations.kt | 39 +++++++ .../RemoveSpacesAroundOperations_after.kt | 39 +++++++ .../jet/formatter/JetFormatterTest.java | 30 +++++ 9 files changed, 266 insertions(+), 57 deletions(-) create mode 100644 idea/testData/formatter/AddSpacesAroundOperations.kt create mode 100644 idea/testData/formatter/AddSpacesAroundOperations_after.kt create mode 100644 idea/testData/formatter/RemoveSpacesAroundOperations.kt create mode 100644 idea/testData/formatter/RemoveSpacesAroundOperations_after.kt diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/JetBlock.java b/idea/src/org/jetbrains/jet/plugin/formatter/JetBlock.java index e9dbe9f4932..73d586970d6 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/JetBlock.java +++ b/idea/src/org/jetbrains/jet/plugin/formatter/JetBlock.java @@ -101,6 +101,13 @@ public class JetBlock extends AbstractBlock { Indent childIndent = Indent.getNoneIndent(); Alignment childAlignment = null; + if (child.getElementType() == JetNodeTypes.OPERATION_REFERENCE) { + ASTNode operationNode = child.getFirstChildNode(); + if (operationNode != null) { + return new JetBlock(operationNode, childAlignment, childIndent, wrap, mySettings, mySpacingBuilder); + } + } + ASTNode childParent = child.getTreeParent(); if (CODE_BLOCKS.contains(myNode.getElementType())) { diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/JetCodeStyleSettings.java b/idea/src/org/jetbrains/jet/plugin/formatter/JetCodeStyleSettings.java index 237517c76e7..e0a767b1bf3 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/JetCodeStyleSettings.java +++ b/idea/src/org/jetbrains/jet/plugin/formatter/JetCodeStyleSettings.java @@ -23,6 +23,8 @@ import com.intellij.psi.codeStyle.CustomCodeStyleSettings; public class JetCodeStyleSettings extends CustomCodeStyleSettings { + public boolean SPACE_AROUND_RANGE = false; + public boolean SPACE_BEFORE_TYPE_COLON = true; public boolean SPACE_AFTER_TYPE_COLON = true; diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/JetFormattingModelBuilder.java b/idea/src/org/jetbrains/jet/plugin/formatter/JetFormattingModelBuilder.java index 194f6050b62..56c322b61b9 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/JetFormattingModelBuilder.java +++ b/idea/src/org/jetbrains/jet/plugin/formatter/JetFormattingModelBuilder.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import static org.jetbrains.jet.JetNodeTypes.*; @@ -46,7 +47,6 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder { JetCodeStyleSettings jetSettings = settings.getCustomSettings(JetCodeStyleSettings.class); return new SpacingBuilder(settings) - // ============ Line breaks ============== .after(NAMESPACE_HEADER).blankLines(1) @@ -65,10 +65,19 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder { .beforeInside(RBRACE, CLASS_BODY).lineBreakInCode() .beforeInside(RBRACE, BLOCK).lineBreakInCode() - // =============== Spacing ================ + // =============== Spacing ================ .before(COMMA).spaceIf(settings.SPACE_BEFORE_COMMA) .after(COMMA).spaceIf(settings.SPACE_AFTER_COMMA) - .around(EQ).spaceIf(settings.SPACE_AROUND_ASSIGNMENT_OPERATORS) + + .around(TokenSet.create(EQ, MULTEQ, DIVEQ, PLUSEQ, MINUSEQ, PERCEQ)).spaceIf(settings.SPACE_AROUND_ASSIGNMENT_OPERATORS) + .around(TokenSet.create(ANDAND, OROR)).spaceIf(settings.SPACE_AROUND_LOGICAL_OPERATORS) + .around(TokenSet.create(EQEQ, EXCLEQ, EQEQEQ, EXCLEQEQEQ)).spaceIf(settings.SPACE_AROUND_EQUALITY_OPERATORS) + .aroundInside(TokenSet.create(LT, GT, LTEQ, GTEQ), BINARY_EXPRESSION).spaceIf(settings.SPACE_AROUND_RELATIONAL_OPERATORS) + .around(TokenSet.create(PLUS, MINUS)).spaceIf(settings.SPACE_AROUND_ADDITIVE_OPERATORS) + .around(TokenSet.create(MUL, DIV, PERC)).spaceIf(settings.SPACE_AROUND_MULTIPLICATIVE_OPERATORS) + .around(TokenSet.create(PLUSPLUS, MINUSMINUS, MINUS, PLUS, EXCL)).spaceIf(settings.SPACE_AROUND_UNARY_OPERATOR) + .around(RANGE).spaceIf(jetSettings.SPACE_AROUND_RANGE) + .beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE) // TODO: Ask for better API @@ -81,7 +90,9 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder { .beforeInside(COLON, TYPE_PARAMETER).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON) .afterInside(COLON, TYPE_PARAMETER).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON) .beforeInside(COLON, VALUE_PARAMETER).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON) - .afterInside(COLON, VALUE_PARAMETER).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON); + .afterInside(COLON, VALUE_PARAMETER).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON) + + ; } @Override diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/JetLanguageCodeStyleSettingsProvider.java b/idea/src/org/jetbrains/jet/plugin/formatter/JetLanguageCodeStyleSettingsProvider.java index 2268b36c92a..f7573a43e71 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/JetLanguageCodeStyleSettingsProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/formatter/JetLanguageCodeStyleSettingsProvider.java @@ -59,67 +59,70 @@ public class JetLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSetti "SPACE_AROUND_LOGICAL_OPERATORS", "SPACE_AROUND_EQUALITY_OPERATORS", "SPACE_AROUND_RELATIONAL_OPERATORS", - "SPACE_AROUND_BITWISE_OPERATORS", + // "SPACE_AROUND_BITWISE_OPERATORS", "SPACE_AROUND_ADDITIVE_OPERATORS", "SPACE_AROUND_MULTIPLICATIVE_OPERATORS", - "SPACE_AROUND_SHIFT_OPERATORS", + // "SPACE_AROUND_SHIFT_OPERATORS", "SPACE_AROUND_UNARY_OPERATOR", "SPACE_AFTER_COMMA", - "SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS", - "SPACE_BEFORE_COMMA", - "SPACE_AFTER_SEMICOLON", - "SPACE_BEFORE_SEMICOLON", - "SPACE_WITHIN_PARENTHESES", - "SPACE_WITHIN_METHOD_CALL_PARENTHESES", - "SPACE_WITHIN_EMPTY_METHOD_CALL_PARENTHESES", - "SPACE_WITHIN_METHOD_PARENTHESES", - "SPACE_WITHIN_EMPTY_METHOD_PARENTHESES", - "SPACE_WITHIN_IF_PARENTHESES", - "SPACE_WITHIN_WHILE_PARENTHESES", - "SPACE_WITHIN_FOR_PARENTHESES", - "SPACE_WITHIN_TRY_PARENTHESES", - "SPACE_WITHIN_CATCH_PARENTHESES", - "SPACE_WITHIN_SWITCH_PARENTHESES", + // "SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS", + "SPACE_BEFORE_COMMA" + // "SPACE_AFTER_SEMICOLON", + // "SPACE_BEFORE_SEMICOLON", + // "SPACE_WITHIN_PARENTHESES", + // "SPACE_WITHIN_METHOD_CALL_PARENTHESES", + // "SPACE_WITHIN_EMPTY_METHOD_CALL_PARENTHESES", + // "SPACE_WITHIN_METHOD_PARENTHESES", + // "SPACE_WITHIN_EMPTY_METHOD_PARENTHESES", + // "SPACE_WITHIN_IF_PARENTHESES", + // "SPACE_WITHIN_WHILE_PARENTHESES", + // "SPACE_WITHIN_FOR_PARENTHESES", + // "SPACE_WITHIN_TRY_PARENTHESES", + // "SPACE_WITHIN_CATCH_PARENTHESES", + // "SPACE_WITHIN_SWITCH_PARENTHESES", // "SPACE_WITHIN_SYNCHRONIZED_PARENTHESES", - "SPACE_WITHIN_CAST_PARENTHESES", - "SPACE_WITHIN_BRACKETS", - "SPACE_WITHIN_BRACES", + // "SPACE_WITHIN_CAST_PARENTHESES", + // "SPACE_WITHIN_BRACKETS", + // "SPACE_WITHIN_BRACES", // "SPACE_WITHIN_ARRAY_INITIALIZER_BRACES", - "SPACE_AFTER_TYPE_CAST", - "SPACE_BEFORE_METHOD_CALL_PARENTHESES", - "SPACE_BEFORE_METHOD_PARENTHESES", - "SPACE_BEFORE_IF_PARENTHESES", - "SPACE_BEFORE_WHILE_PARENTHESES", - "SPACE_BEFORE_FOR_PARENTHESES", - "SPACE_BEFORE_TRY_PARENTHESES", - "SPACE_BEFORE_CATCH_PARENTHESES", - "SPACE_BEFORE_SWITCH_PARENTHESES", - "SPACE_BEFORE_SYNCHRONIZED_PARENTHESES", - "SPACE_BEFORE_CLASS_LBRACE", - "SPACE_BEFORE_METHOD_LBRACE", - "SPACE_BEFORE_IF_LBRACE", - "SPACE_BEFORE_ELSE_LBRACE", - "SPACE_BEFORE_WHILE_LBRACE", - "SPACE_BEFORE_FOR_LBRACE", - "SPACE_BEFORE_DO_LBRACE", - "SPACE_BEFORE_SWITCH_LBRACE", - "SPACE_BEFORE_TRY_LBRACE", - "SPACE_BEFORE_CATCH_LBRACE", - "SPACE_BEFORE_FINALLY_LBRACE", - "SPACE_BEFORE_SYNCHRONIZED_LBRACE", - "SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE", - "SPACE_BEFORE_ANNOTATION_ARRAY_INITIALIZER_LBRACE", - "SPACE_BEFORE_ELSE_KEYWORD", - "SPACE_BEFORE_WHILE_KEYWORD", - "SPACE_BEFORE_CATCH_KEYWORD", - "SPACE_BEFORE_FINALLY_KEYWORD", - "SPACE_BEFORE_QUEST", - "SPACE_AFTER_QUEST", - "SPACE_BEFORE_COLON", - "SPACE_AFTER_COLON", - "SPACE_BEFORE_TYPE_PARAMETER_LIST" + // "SPACE_AFTER_TYPE_CAST", + // "SPACE_BEFORE_METHOD_CALL_PARENTHESES", + // "SPACE_BEFORE_METHOD_PARENTHESES", + // "SPACE_BEFORE_IF_PARENTHESES", + // "SPACE_BEFORE_WHILE_PARENTHESES", + // "SPACE_BEFORE_FOR_PARENTHESES", + // "SPACE_BEFORE_TRY_PARENTHESES", + // "SPACE_BEFORE_CATCH_PARENTHESES", + // "SPACE_BEFORE_SWITCH_PARENTHESES", + // "SPACE_BEFORE_SYNCHRONIZED_PARENTHESES", + // "SPACE_BEFORE_CLASS_LBRACE", + // "SPACE_BEFORE_METHOD_LBRACE", + // "SPACE_BEFORE_IF_LBRACE", + // "SPACE_BEFORE_ELSE_LBRACE", + // "SPACE_BEFORE_WHILE_LBRACE", + // "SPACE_BEFORE_FOR_LBRACE", + // "SPACE_BEFORE_DO_LBRACE", + // "SPACE_BEFORE_SWITCH_LBRACE", + // "SPACE_BEFORE_TRY_LBRACE", + // "SPACE_BEFORE_CATCH_LBRACE", + // "SPACE_BEFORE_FINALLY_LBRACE", + // "SPACE_BEFORE_SYNCHRONIZED_LBRACE", + // "SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE", + // "SPACE_BEFORE_ANNOTATION_ARRAY_INITIALIZER_LBRACE", + // "SPACE_BEFORE_ELSE_KEYWORD", + // "SPACE_BEFORE_WHILE_KEYWORD", + // "SPACE_BEFORE_CATCH_KEYWORD", + // "SPACE_BEFORE_FINALLY_KEYWORD", + // "SPACE_BEFORE_QUEST", + // "SPACE_AFTER_QUEST", + // "SPACE_BEFORE_COLON", + // "SPACE_AFTER_COLON", + // "SPACE_BEFORE_TYPE_PARAMETER_LIST" ); + consumer.showCustomOption(JetCodeStyleSettings.class, "SPACE_AROUND_RANGE", "Around range (..)", + CodeStyleSettingsCustomizable.SPACES_AROUND_OPERATORS); + consumer.showCustomOption(JetCodeStyleSettings.class, "SPACE_AFTER_TYPE_COLON", "Space after colon, before declarations' type", CodeStyleSettingsCustomizable.SPACES_OTHER); diff --git a/idea/testData/formatter/AddSpacesAroundOperations.kt b/idea/testData/formatter/AddSpacesAroundOperations.kt new file mode 100644 index 00000000000..df1e093c0fc --- /dev/null +++ b/idea/testData/formatter/AddSpacesAroundOperations.kt @@ -0,0 +1,39 @@ +class Some { + fun some() { + var int : Int=0 + + int=12 + int+=12 + int-=12 + int*=12 + int/=12 + int%=12 + + true&&true + true||false + + 12===3 + 12!==3 + 12==3 + 12!=3 + + 12<=3 + 12>=3 + 12<3 + 12>3 + + 12+3-12 + + 12%3*12/3 + + !true + int++ + ++int + int-- + --int + +12 + -12 + + 1..2 + } +} \ No newline at end of file diff --git a/idea/testData/formatter/AddSpacesAroundOperations_after.kt b/idea/testData/formatter/AddSpacesAroundOperations_after.kt new file mode 100644 index 00000000000..a4158240ec7 --- /dev/null +++ b/idea/testData/formatter/AddSpacesAroundOperations_after.kt @@ -0,0 +1,39 @@ +class Some { + fun some() { + var int : Int = 0 + + int = 12 + int += 12 + int -= 12 + int *= 12 + int /= 12 + int %= 12 + + true && true + true || false + + 12 === 3 + 12 !== 3 + 12 == 3 + 12 != 3 + + 12 <= 3 + 12 >= 3 + 12 < 3 + 12 > 3 + + 12 + 3 - 12 + + 12 % 3 * 12 / 3 + + ! true + int ++ + ++ int + int -- + -- int + + 12 + - 12 + + 1 .. 2 + } +} \ No newline at end of file diff --git a/idea/testData/formatter/RemoveSpacesAroundOperations.kt b/idea/testData/formatter/RemoveSpacesAroundOperations.kt new file mode 100644 index 00000000000..a4158240ec7 --- /dev/null +++ b/idea/testData/formatter/RemoveSpacesAroundOperations.kt @@ -0,0 +1,39 @@ +class Some { + fun some() { + var int : Int = 0 + + int = 12 + int += 12 + int -= 12 + int *= 12 + int /= 12 + int %= 12 + + true && true + true || false + + 12 === 3 + 12 !== 3 + 12 == 3 + 12 != 3 + + 12 <= 3 + 12 >= 3 + 12 < 3 + 12 > 3 + + 12 + 3 - 12 + + 12 % 3 * 12 / 3 + + ! true + int ++ + ++ int + int -- + -- int + + 12 + - 12 + + 1 .. 2 + } +} \ No newline at end of file diff --git a/idea/testData/formatter/RemoveSpacesAroundOperations_after.kt b/idea/testData/formatter/RemoveSpacesAroundOperations_after.kt new file mode 100644 index 00000000000..df1e093c0fc --- /dev/null +++ b/idea/testData/formatter/RemoveSpacesAroundOperations_after.kt @@ -0,0 +1,39 @@ +class Some { + fun some() { + var int : Int=0 + + int=12 + int+=12 + int-=12 + int*=12 + int/=12 + int%=12 + + true&&true + true||false + + 12===3 + 12!==3 + 12==3 + 12!=3 + + 12<=3 + 12>=3 + 12<3 + 12>3 + + 12+3-12 + + 12%3*12/3 + + !true + int++ + ++int + int-- + --int + +12 + -12 + + 1..2 + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTest.java b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTest.java index 9467b58278e..4af6021b330 100644 --- a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTest.java +++ b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTest.java @@ -24,6 +24,21 @@ import org.jetbrains.jet.plugin.formatter.JetCodeStyleSettings; * Based on com.intellij.psi.formatter.java.JavaFormatterTest */ public class JetFormatterTest extends AbstractJetFormatterTest { + public void testAddSpacesAroundOperations() throws Exception { + getSettings().SPACE_AROUND_ASSIGNMENT_OPERATORS = true; + getSettings().SPACE_AROUND_LOGICAL_OPERATORS = true; + getSettings().SPACE_AROUND_EQUALITY_OPERATORS = true; + getSettings().SPACE_AROUND_RELATIONAL_OPERATORS = true; + getSettings().SPACE_AROUND_ADDITIVE_OPERATORS = true; + getSettings().SPACE_AROUND_MULTIPLICATIVE_OPERATORS = true; + getSettings().SPACE_AROUND_UNARY_OPERATOR = true; + getJetSettings().SPACE_AROUND_RANGE = true; + + doTest(); + + getSettings().clearCodeStyleSettings(); + } + public void testBlockFor() throws Exception { doTest(); } @@ -54,6 +69,21 @@ public class JetFormatterTest extends AbstractJetFormatterTest { doTest(); } + public void testRemoveSpacesAroundOperations() throws Exception { + getSettings().SPACE_AROUND_ASSIGNMENT_OPERATORS = false; + getSettings().SPACE_AROUND_LOGICAL_OPERATORS = false; + getSettings().SPACE_AROUND_EQUALITY_OPERATORS = false; + getSettings().SPACE_AROUND_RELATIONAL_OPERATORS = false; + getSettings().SPACE_AROUND_ADDITIVE_OPERATORS = false; + getSettings().SPACE_AROUND_MULTIPLICATIVE_OPERATORS = false; + getSettings().SPACE_AROUND_UNARY_OPERATOR = false; + getJetSettings().SPACE_AROUND_RANGE = false; + + doTest(); + + getSettings().clearCodeStyleSettings(); + } + public void testSpaceAroundTypeColon() throws Exception { getJetSettings().SPACE_AFTER_TYPE_COLON = false; getJetSettings().SPACE_BEFORE_TYPE_COLON = true;