This is an automated email from the ASF dual-hosted git repository. joshtynjala pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit 30d25247448daadcd337fc32e7fd5c1a04c5e407 Author: Josh Tynjala <joshtynj...@apache.org> AuthorDate: Wed May 18 09:51:03 2022 -0700 formatter: some fixes for indentation between paren open and paren close, if they span multiple lines --- .../org/apache/royale/formatter/FORMATTER.java | 79 ++++++++++++---------- .../royale/formatter/TestFunctionDeclaration.java | 14 ++-- .../apache/royale/formatter/TestIfStatement.java | 25 +++++++ 3 files changed, 74 insertions(+), 44 deletions(-) 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 a1bc2b024..38f429fe7 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 @@ public class FORMATTER { } 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 @@ public class FORMATTER { 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 @@ public class FORMATTER { } 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 033110935..b473097a4 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 @@ public class TestFunctionDeclaration extends BaseFormatterTests { 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 @@ public class TestFunctionDeclaration extends BaseFormatterTests { assertEquals( // @formatter:off "(function myFunction(...rest)\n" + - "{\n" + - "\tstatement;\n" + - "});", + "\t{\n" + + "\t\tstatement;\n" + + "\t});", // @formatter:on result); } @@ -314,9 +314,9 @@ public class TestFunctionDeclaration extends BaseFormatterTests { 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 d3ad0ba4d..8c704b5e7 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 @@ public class TestIfStatement extends BaseFormatterTests { // @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); + } }