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 2021/09/09 22:12:56 UTC

[royale-compiler] 02/03: formatter: better formatting for object literal inside a ternary statement

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