You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2025/01/09 20:47:25 UTC

(royale-compiler) 02/09: formatter: fix extra space before comma if comment appears in array or object literal

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 <jo...@apache.org>
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);
+	}
 }