formatter: better formatting for object literal inside a ternary statement
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 @@
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 @@
&& 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 @@
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 @@
// @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);
+ }
}