formatter: chained variable declarations
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 @@
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 @@
indent = decreaseIndent(indent);
}
inVarOrConstDeclaration = false;
+ varOrConstChainLevel = -1;
break;
}
case ASTokenTypes.TOKEN_ASDOC_COMMENT: {
@@ -1099,6 +1101,7 @@
case ASTokenTypes.TOKEN_KEYWORD_CONST: {
inVarOrConstDeclaration = true;
requiredSpace = true;
+ varOrConstChainLevel = blockStack.size();
break;
}
case ASTokenTypes.TOKEN_KEYWORD_CATCH:
@@ -1185,6 +1188,9 @@
if (inControlFlowStatement) {
controlFlowParenStack++;
}
+ else {
+ blockStack.add(new BlockStackItem(token));
+ }
break;
}
case ASTokenTypes.TOKEN_PAREN_CLOSE: {
@@ -1209,6 +1215,14 @@
}
}
}
+ 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 @@
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 @@
// @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);
+ }
}