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);
+       }
 }

Reply via email to