formatter: some fixes for indentation between paren open and paren close, if they span multiple lines
diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
index a1bc2b0..38f429f 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -818,6 +818,16 @@
}
break;
}
+ case ASTokenTypes.TOKEN_PAREN_CLOSE: {
+ if (!blockStack.isEmpty()) {
+ BlockStackItem item = blockStack.get(blockStack.size() - 1);
+ if (item.token.getType() == ASTokenTypes.TOKEN_PAREN_OPEN) {
+ indent = decreaseIndent(indent);
+ blockStack.remove(item);
+ }
+ }
+ break;
+ }
case ASTokenTypes.TOKEN_KEYWORD_AS:
case ASTokenTypes.TOKEN_KEYWORD_IS:
case ASTokenTypes.TOKEN_KEYWORD_IN:
@@ -1072,6 +1082,38 @@
indent = increaseIndent(indent);
blockStack.add(new BlockStackItem(token));
break;
+ case ASTokenTypes.TOKEN_PAREN_OPEN: {
+ indent = increaseIndent(indent);
+ blockStack.add(new BlockStackItem(token));
+ if (inControlFlowStatement) {
+ controlFlowParenStack++;
+ }
+ break;
+ }
+ case ASTokenTypes.TOKEN_PAREN_CLOSE: {
+ if (inControlFlowStatement) {
+ controlFlowParenStack--;
+ if (controlFlowParenStack <= 0) {
+ inControlFlowStatement = false;
+ controlFlowParenStack = 0;
+ blockOpenPending = true;
+ if (nextToken != null && nextToken.getType() == ASTokenTypes.TOKEN_SEMICOLON) {
+ blockStack.remove(blockStack.size() - 1);
+ if (!skipWhitespaceBeforeSemicolon) {
+ numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+ }
+ } else if (nextToken != null && nextToken.getType() != ASTokenTypes.TOKEN_BLOCK_OPEN
+ && nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
+ && !skipWhitespaceBeforeSemicolon) {
+ indent = increaseIndent(indent);
+ BlockStackItem item = blockStack.get(blockStack.size() - 1);
+ item.braces = false;
+ numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+ }
+ }
+ }
+ break;
+ }
case ASTokenTypes.TOKEN_OPERATOR_INCREMENT:
case ASTokenTypes.TOKEN_OPERATOR_DECREMENT: {
if (!inControlFlowStatement && prevToken != null
@@ -1211,43 +1253,6 @@
}
break;
}
- case ASTokenTypes.TOKEN_PAREN_OPEN: {
- blockStack.add(new BlockStackItem(token));
- if (inControlFlowStatement) {
- controlFlowParenStack++;
- }
- break;
- }
- case ASTokenTypes.TOKEN_PAREN_CLOSE: {
- if (!blockStack.isEmpty()) {
- BlockStackItem item = blockStack.get(blockStack.size() - 1);
- if (item.token.getType() == ASTokenTypes.TOKEN_PAREN_OPEN) {
- blockStack.remove(item);
- }
- }
- if (inControlFlowStatement) {
- controlFlowParenStack--;
- if (controlFlowParenStack <= 0) {
- inControlFlowStatement = false;
- controlFlowParenStack = 0;
- blockOpenPending = true;
- if (nextToken != null && nextToken.getType() == ASTokenTypes.TOKEN_SEMICOLON) {
- blockStack.remove(blockStack.size() - 1);
- if (!skipWhitespaceBeforeSemicolon) {
- numRequiredNewLines = Math.max(numRequiredNewLines, 1);
- }
- } else if (nextToken != null && nextToken.getType() != ASTokenTypes.TOKEN_BLOCK_OPEN
- && nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
- && !skipWhitespaceBeforeSemicolon) {
- indent = increaseIndent(indent);
- BlockStackItem item = blockStack.get(blockStack.size() - 1);
- item.braces = false;
- numRequiredNewLines = Math.max(numRequiredNewLines, 1);
- }
- }
- }
- break;
- }
case ASTokenTypes.TOKEN_KEYWORD_CASE: {
if (!skipWhitespaceBeforeSemicolon) {
requiredSpace = true;
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java
index 0331109..b473097 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestFunctionDeclaration.java
@@ -212,7 +212,7 @@
assertEquals(
// @formatter:off
"function myFunction(p1:String,\n" +
- "\tp2:Number):void\n" +
+ "\t\tp2:Number):void\n" +
"{\n" +
"\tstatement;\n" +
"\tstatement;\n" +
@@ -289,9 +289,9 @@
assertEquals(
// @formatter:off
"(function myFunction(...rest)\n" +
- "{\n" +
- "\tstatement;\n" +
- "});",
+ "\t{\n" +
+ "\t\tstatement;\n" +
+ "\t});",
// @formatter:on
result);
}
@@ -314,9 +314,9 @@
assertEquals(
// @formatter:off
"identifier(function myFunction(...rest)\n" +
- "{\n" +
- "\tstatement;\n" +
- "}, 123.4);",
+ "\t{\n" +
+ "\t\tstatement;\n" +
+ "\t}, 123.4);",
// @formatter:on
result);
}
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
index d3ad0ba..8c704b5 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
@@ -440,4 +440,29 @@
// @formatter:on
result);
}
+
+ @Test
+ public void testConditionsOnMultipleLines() {
+ FORMATTER formatter = new FORMATTER();
+ formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
+ formatter.placeOpenBraceOnNewLine = false;
+ formatter.insertSpaces = false;
+ String result = formatter.formatActionScriptText(
+ // @formatter:off
+ "if (condition1 &&\n" +
+ "\tcondition2\n" +
+ ") {\n" +
+ "}",
+ // @formatter:on
+ problems
+ );
+ assertEquals(
+ // @formatter:off
+ "if (condition1 &&\n" +
+ "\t\tcondition2\n" +
+ "\t) {\n" +
+ "}",
+ // @formatter:on
+ result);
+ }
}