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 5f7e57ad86142895c35e4a8da46b60bd78eb9290 Author: Josh Tynjala <[email protected]> AuthorDate: Mon Nov 22 14:15:03 2021 -0800 formatter: chained variable declarations --- .../java/org/apache/royale/formatter/FORMATTER.java | 17 +++++++++++++++++ .../royale/formatter/TestVariableDeclaration.java | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) 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 1f4d27a..857c6fc 100644 --- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java +++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java @@ -661,6 +661,7 @@ public class FORMATTER { boolean indentedStatement = false; boolean caseOrDefaultBlockOpenPending = false; boolean skipFormatting = false; + int varOrConstChainLevel = -1; List<BlockStackItem> blockStack = new ArrayList<BlockStackItem>(); int controlFlowParenStack = 0; int ternaryStack = 0; @@ -927,6 +928,7 @@ public class FORMATTER { indent = decreaseIndent(indent); } inVarOrConstDeclaration = false; + varOrConstChainLevel = -1; break; } case ASTokenTypes.TOKEN_ASDOC_COMMENT: { @@ -1099,6 +1101,7 @@ public class FORMATTER { case ASTokenTypes.TOKEN_KEYWORD_CONST: { inVarOrConstDeclaration = true; requiredSpace = true; + varOrConstChainLevel = blockStack.size(); break; } case ASTokenTypes.TOKEN_KEYWORD_CATCH: @@ -1185,6 +1188,9 @@ public class FORMATTER { if (inControlFlowStatement) { controlFlowParenStack++; } + else { + blockStack.add(new BlockStackItem(token)); + } break; } case ASTokenTypes.TOKEN_PAREN_CLOSE: { @@ -1209,6 +1215,14 @@ public class FORMATTER { } } } + else { + if (!blockStack.isEmpty()) { + BlockStackItem item = blockStack.get(blockStack.size() - 1); + if (item.token.getType() == ASTokenTypes.TOKEN_PAREN_OPEN) { + blockStack.remove(item); + } + } + } break; } case ASTokenTypes.TOKEN_KEYWORD_CASE: { @@ -1310,6 +1324,9 @@ public class FORMATTER { break; } case ASTokenTypes.TOKEN_COMMA: { + if (varOrConstChainLevel == blockStack.size()) { + inVarOrConstDeclaration = true; + } if (insertSpaceAfterCommaDelimiter && !skipWhitespaceBeforeSemicolon) { requiredSpace = true; } diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java index 4959baa..37b2a9c 100644 --- a/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java +++ b/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java @@ -119,4 +119,23 @@ public class TestVariableDeclaration extends BaseFormatterTests { // @formatter:on result); } + + @Test + public void testChained() { + FORMATTER formatter = new FORMATTER(); + formatter.insertSpaceAfterKeywordsInControlFlowStatements = true; + formatter.placeOpenBraceOnNewLine = true; + formatter.insertSpaces = false; + String result = formatter.formatActionScriptText( + // @formatter:off + "var myVar:Number = what(hi, 2), myVar2:Number = 456.7;", + // @formatter:on + problems + ); + assertEquals( + // @formatter:off + "var myVar:Number = what(hi, 2), myVar2:Number = 456.7;", + // @formatter:on + result); + } }
