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 89893ab38c74e9e489bbbdf1796d23c7acd076fe Author: Josh Tynjala <[email protected]> AuthorDate: Thu Sep 9 14:46:28 2021 -0700 formatter: better formatting for object literal inside a ternary statement --- .../org/apache/royale/formatter/FORMATTER.java | 22 +++++++++++++--------- .../royale/formatter/TestTernaryStatement.java | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 9 deletions(-) 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 7959d31..73463fc 100644 --- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java +++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java @@ -484,8 +484,13 @@ class FORMATTER { blockOpenPending = prevTokenNotComment == null || prevTokenNotComment.getType() == ASTokenTypes.TOKEN_SEMICOLON || prevTokenNotComment.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN - || prevTokenNotComment.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE - || prevTokenNotComment.getType() == ASTokenTypes.TOKEN_COLON; + || prevTokenNotComment.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE; + if (!blockOpenPending && prevTokenNotComment.getType() == ASTokenTypes.TOKEN_COLON + && !blockStack.isEmpty()) { + IASToken blockToken = blockStack.get(blockStack.size() - 1).token; + blockOpenPending = blockToken.getType() == ASTokenTypes.TOKEN_KEYWORD_DEFAULT + || blockToken.getType() == ASTokenTypes.TOKEN_KEYWORD_CASE; + } if (blockOpenPending) { blockStack.add(new BlockStackItem(token)); } @@ -719,9 +724,8 @@ class FORMATTER { && prevStackItem.blockDepth <= 0) { blockStack.remove(blockStack.size() - 1); if (prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_CLASS - && prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_INTERFACE - && prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_FUNCTION) - { + && prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_INTERFACE + && prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_FUNCTION) { indent = decreaseIndent(indent); } } @@ -763,11 +767,11 @@ class FORMATTER { if (item.blockDepth <= 0) { blockStack.remove(blockStack.size() - 1); } + if (!(item instanceof ObjectLiteralBlockStackItem) + && (nextToken == null || nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON)) { + numRequiredNewLines = Math.max(numRequiredNewLines, 1); + } } - if (nextToken == null || nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON) { - numRequiredNewLines = Math.max(numRequiredNewLines, 1); - } - break; } case ASTokenTypes.TOKEN_OPERATOR_INCREMENT: diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java index cd6ef98..3432198 100644 --- a/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java +++ b/formatter/src/test/java/org/apache/royale/formatter/TestTernaryStatement.java @@ -61,4 +61,22 @@ public class TestTernaryStatement extends BaseFormatterTests { // @formatter:on result); } + @Test + public void testObjectLiterals() { + FORMATTER formatter = new FORMATTER(); + formatter.insertSpaceAfterKeywordsInControlFlowStatements = true; + formatter.placeOpenBraceOnNewLine = true; + formatter.insertSpaces = false; + String result = formatter.formatText( + // @formatter:off + "condition ? {} : {};", + // @formatter:on + problems + ); + assertEquals( + // @formatter:off + "condition ? {} : {};", + // @formatter:on + result); + } }
