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