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

Reply via email to