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
The following commit(s) were added to refs/heads/develop by this push:
new 991dd2a formatter: fix for deeply nested control flow statements
where none have braces
991dd2a is described below
commit 991dd2a8de6402e67bbf9a759eb8f6dffa4ff28e
Author: Josh Tynjala <[email protected]>
AuthorDate: Thu Nov 4 11:27:00 2021 -0700
formatter: fix for deeply nested control flow statements where none have
braces
---
.../org/apache/royale/formatter/FORMATTER.java | 8 ++++++-
.../apache/royale/formatter/TestIfStatement.java | 25 ++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
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 9f8d1bc..738bb75 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -977,7 +977,9 @@ public class FORMATTER {
}
// else no space
} else {
- if
(!blockStack.isEmpty()) {
+ boolean checkNext =
true;
+ while
(!blockStack.isEmpty() && checkNext) {
+ checkNext =
false;
BlockStackItem
prevStackItem = blockStack.get(blockStack.size() - 1);
if
(prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_CASE
&& prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_DEFAULT
@@ -986,6 +988,7 @@ public class FORMATTER {
if
(prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_CLASS
&& prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_INTERFACE
&& prevStackItem.token.getType() !=
ASTokenTypes.TOKEN_KEYWORD_FUNCTION) {
+
checkNext = !prevStackItem.braces;
indent = decreaseIndent(indent);
}
}
@@ -1192,6 +1195,8 @@ public class FORMATTER {
&& nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
&& !skipWhitespaceBeforeSemicolon) {
indent
= increaseIndent(indent);
+
BlockStackItem item = blockStack.get(blockStack.size() - 1);
+
item.braces = false;
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
}
}
@@ -1638,6 +1643,7 @@ public class FORMATTER {
public IASToken token;
public int blockDepth = 0;
+ public boolean braces = true;
}
private static class ObjectLiteralBlockStackItem extends BlockStackItem
{
diff --git
a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
index cf931e3..d679d47 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
@@ -397,4 +397,29 @@ public class TestIfStatement extends BaseFormatterTests {
// @formatter:on
result);
}
+
+ @Test
+ public void testNestedBodiesWithoutParentheses() {
+ FORMATTER formatter = new FORMATTER();
+ formatter.insertSpaceAfterKeywordsInControlFlowStatements =
true;
+ formatter.placeOpenBraceOnNewLine = true;
+ formatter.insertSpaces = false;
+ System.err.println("**** BEFORE");
+ String result = formatter.formatActionScriptText(
+ // @formatter:off
+ "{if (condition1) if (condition2) statement;}",
+ // @formatter:on
+ problems
+ );
+ System.err.println("**** AFTER");
+ assertEquals(
+ // @formatter:off
+ "{\n" +
+ "\tif (condition1)\n" +
+ "\t\tif (condition2)\n" +
+ "\t\t\tstatement;\n" +
+ "}",
+ // @formatter:on
+ result);
+ }
}