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 5a5604901222e422825af759f73e1bb9b51d10b7
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Jan 8 09:15:36 2025 -0800

    formatter: fix extra space before comma if comment appears in array or 
object literal
---
 .../apache/royale/formatter/ASTokenFormatter.java  | 43 +++++++++++-----------
 .../apache/royale/formatter/TestArrayLiteral.java  | 40 ++++++++++++++++++++
 .../apache/royale/formatter/TestObjectLiteral.java | 40 ++++++++++++++++++++
 3 files changed, 102 insertions(+), 21 deletions(-)

diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java 
b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
index 360622daa..04406839e 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -291,8 +291,9 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                        nextToken = getNextTokenByOffset(tokens, i, 1, true, 
false);
                        nextTokenNotComment = getNextTokenByOffset(tokens, i, 
1, true, true);
 
-                       boolean skipWhitespaceBeforeSemicolon = nextToken == 
null
-                                       || nextToken.getType() == 
ASTokenTypes.TOKEN_SEMICOLON;
+                       boolean skipWhitespaceBeforeSemicolonOrComma = 
nextToken == null
+                                       || nextToken.getType() == 
ASTokenTypes.TOKEN_SEMICOLON
+                                       || nextToken.getType() == 
ASTokenTypes.TOKEN_COMMA;
 
                        // characters that must appear before the token
                        if (token instanceof MetaDataPayloadToken) {
@@ -471,7 +472,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                boolean isAnyType = 
checkTokenBeforeAnyType(prevTokenNotComment);
                                                boolean isAnyVectorType = 
checkTokensForAnyVectorType(prevTokenNotComment, nextTokenNotComment);
                                                if (!isAnyType && 
!isAnyVectorType && settings.insertSpaceBeforeAndAfterBinaryOperators
-                                                               && 
!skipWhitespaceBeforeSemicolon) {
+                                                               && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -761,11 +762,11 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                                
blockOpenPending = true;
                                                                if (nextToken 
!= null && nextToken.getType() == ASTokenTypes.TOKEN_SEMICOLON) {
                                                                        
blockStack.remove(blockStack.size() - 1);
-                                                                       if 
(!skipWhitespaceBeforeSemicolon) {
+                                                                       if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                                                
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
                                                                        }
                                                                } else if 
(nextTokenNotComment != null && nextTokenNotComment.getType() != 
ASTokenTypes.TOKEN_BLOCK_OPEN
-                                                                               
&& !skipWhitespaceBeforeSemicolon) {
+                                                                               
&& !skipWhitespaceBeforeSemicolonOrComma) {
                                                                        indent 
= increaseIndent(indent);
                                                                        
BlockStackItem stackItem = blockStack.get(blockStack.size() - 1);
                                                                        
stackItem.braces = false;
@@ -793,7 +794,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        case 
ASTokenTypes.TOKEN_KEYWORD_CONTINUE:
                                        case ASTokenTypes.TOKEN_KEYWORD_BREAK:
                                        case ASTokenTypes.TOKEN_KEYWORD_RETURN: 
{
-                                               if 
(!skipWhitespaceBeforeSemicolon) {
+                                               if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -843,7 +844,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                stackItem.controlFlow = true;
                                                blockStack.add(stackItem);
                                                if 
(settings.insertSpaceAfterKeywordsInControlFlowStatements
-                                                               && 
!skipWhitespaceBeforeSemicolon) {
+                                                               && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -852,7 +853,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                inControlFlowStatement = true;
                                                blockStack.add(new 
SwitchBlockStackItem(token));
                                                if 
(settings.insertSpaceAfterKeywordsInControlFlowStatements
-                                                               && 
!skipWhitespaceBeforeSemicolon) {
+                                                               && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -860,7 +861,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        case ASTokenTypes.TOKEN_KEYWORD_TRY:
                                        case 
ASTokenTypes.TOKEN_KEYWORD_FINALLY: {
                                                blockStack.add(new 
BlockStackItem(token));
-                                               if 
(!skipWhitespaceBeforeSemicolon) {
+                                               if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                blockOpenPending = true;
@@ -877,12 +878,12 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                        blockOpenPending = true;
                                                        if (nextToken != null 
&& nextToken.getType() == ASTokenTypes.TOKEN_SEMICOLON) {
                                                                
blockStack.remove(blockStack.size() - 1);
-                                                               if 
(!skipWhitespaceBeforeSemicolon) {
+                                                               if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                                        
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
                                                                }
                                                        } else if (nextToken != 
null && nextToken.getType() != ASTokenTypes.TOKEN_BLOCK_OPEN
                                                                        && 
nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
-                                                                       && 
!skipWhitespaceBeforeSemicolon) {
+                                                                       && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                                indent = 
increaseIndent(indent);
                                                                
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
                                                                
stackItem.braces = false;
@@ -895,12 +896,12 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                blockOpenPending = true;
                                                if (nextToken != null && 
nextToken.getType() == ASTokenTypes.TOKEN_SEMICOLON) {
                                                        
blockStack.remove(blockStack.size() - 1);
-                                                       if 
(!skipWhitespaceBeforeSemicolon) {
+                                                       if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                                
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
                                                        }
                                                } else if (nextToken != null && 
nextToken.getType() != ASTokenTypes.TOKEN_BLOCK_OPEN
                                                                && 
nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
-                                                               && 
!skipWhitespaceBeforeSemicolon) {
+                                                               && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        indent = 
increaseIndent(indent);
                                                        numRequiredNewLines = 
Math.max(numRequiredNewLines, 1);
                                                }
@@ -945,13 +946,13 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                break;
                                        }
                                        case ASTokenTypes.TOKEN_KEYWORD_CASE: {
-                                               if 
(!skipWhitespaceBeforeSemicolon) {
+                                               if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
                                        }
                                        case 
ASTokenTypes.TOKEN_KEYWORD_DEFAULT: {
-                                               if (!inCaseOrDefaultClause && 
!skipWhitespaceBeforeSemicolon) {
+                                               if (!inCaseOrDefaultClause && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -982,7 +983,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        case ASTokenTypes.TOKEN_MODIFIER_STATIC:
                                        case 
ASTokenTypes.TOKEN_MODIFIER_VIRTUAL:
                                        case 
ASTokenTypes.TOKEN_NAMESPACE_ANNOTATION: {
-                                               if 
(!skipWhitespaceBeforeSemicolon) {
+                                               if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -1021,7 +1022,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        case 
ASTokenTypes.TOKEN_OPERATOR_BITWISE_XOR_ASSIGNMENT:
                                        case 
ASTokenTypes.TOKEN_OPERATOR_LOGICAL_AND_ASSIGNMENT:
                                        case 
ASTokenTypes.TOKEN_OPERATOR_LOGICAL_OR_ASSIGNMENT: {
-                                               if 
(settings.insertSpaceBeforeAndAfterBinaryOperators && 
!skipWhitespaceBeforeSemicolon) {
+                                               if 
(settings.insertSpaceBeforeAndAfterBinaryOperators && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -1030,7 +1031,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                boolean isAnyType = 
checkTokenBeforeAnyType(prevTokenNotComment);
                                                boolean isAnyVectorType = 
checkTokensForAnyVectorType(prevTokenNotComment, nextTokenNotComment);
                                                if (!isAnyType && 
!isAnyVectorType && settings.insertSpaceBeforeAndAfterBinaryOperators
-                                                               && 
!skipWhitespaceBeforeSemicolon) {
+                                                               && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -1039,7 +1040,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        case ASTokenTypes.TOKEN_OPERATOR_MINUS: 
{
                                                boolean isUnary = 
checkTokenBeforePossibleUnaryOperator(prevTokenNotComment);
                                                if (!isUnary && 
settings.insertSpaceBeforeAndAfterBinaryOperators
-                                                               && 
!skipWhitespaceBeforeSemicolon) {
+                                                               && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -1048,7 +1049,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                if (varOrConstChainLevel == 
blockStack.size()) {
                                                        inVarOrConstDeclaration 
= true;
                                                }
-                                               if 
(settings.insertSpaceAfterCommaDelimiter && !skipWhitespaceBeforeSemicolon) {
+                                               if 
(settings.insertSpaceAfterCommaDelimiter && 
!skipWhitespaceBeforeSemicolonOrComma) {
                                                        requiredSpace = true;
                                                }
                                                break;
@@ -1068,7 +1069,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        }
                                        case ASTokenTypes.TOKEN_ASDOC_COMMENT:
                                        case 
ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT: {
-                                               if 
(!skipWhitespaceBeforeSemicolon) {
+                                               if 
(!skipWhitespaceBeforeSemicolonOrComma) {
                                                        if (nextTokenOrExtra != 
null && nextTokenOrExtra.getType() == TOKEN_TYPE_EXTRA) {
                                                                
numRequiredNewLines = Math.max(0, countNewLinesInExtra(nextTokenOrExtra));
                                                        }
diff --git 
a/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java 
b/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java
index a78d51eaa..d5e22984c 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestArrayLiteral.java
@@ -283,4 +283,44 @@ public class TestArrayLiteral extends BaseFormatterTests {
                                // @formatter:on
                                result);
        }
+
+       @Test
+       public void testWithCommentBeforeInitializer() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "var array:Array=/* comment */[123.4, 567.8, 901.2];",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "var array:Array = /* comment */ [123.4, 567.8, 
901.2];",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testWithCommentInsideInitializer() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "var array:Array = [123.4/* comment */,567.8,/* another 
*/901.2];",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "var array:Array = [123.4 /* comment */, 567.8, 
/* another */ 901.2];",
+                               // @formatter:on
+                               result);
+       }
 }
\ No newline at end of file
diff --git 
a/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java 
b/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java
index 5e59cd8d9..b31149d93 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestObjectLiteral.java
@@ -235,4 +235,44 @@ public class TestObjectLiteral extends BaseFormatterTests {
                                // @formatter:on
                                result);
        }
+
+       @Test
+       public void testWithCommentBeforeInitializer() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "var obj:Object=/* comment */{one: 123.4, two: \"hello 
world\"};",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "var obj:Object = /* comment */ {one: 123.4, 
two: \"hello world\"};",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testWithCommentInsideInitializer() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceBeforeAndAfterBinaryOperators = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "var obj:Object = {one: 123.4/* comment */,/* another 
*/two: \"hello world\"};",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "var obj:Object = {one: 123.4 /* comment */, /* 
another */ two: \"hello world\"};",
+                               // @formatter:on
+                               result);
+       }
 }

Reply via email to