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 bf297e5739affadea1def80df75328b8cf46a436
Author: Josh Tynjala <[email protected]>
AuthorDate: Thu Oct 31 14:07:02 2024 -0700

    ASTokenFormatter: fix indentation if nested else where both inner and outer 
if/else values have no optional closing curly braces
---
 .../apache/royale/formatter/ASTokenFormatter.java  |  9 +++++++
 .../apache/royale/formatter/TestElseStatement.java | 30 +++++++++++++++++++++-
 .../apache/royale/formatter/TestIfStatement.java   |  2 --
 3 files changed, 38 insertions(+), 3 deletions(-)

diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java 
b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
index 72829060f..86bfda418 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -591,12 +591,20 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                        // else no space
                                                } else {
                                                        boolean checkNext = 
true;
+                                                       int prevPoppedTokenType 
= -1;
                                                        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
                                                                                
&& prevStackItem.blockDepth <= 0) {
+                                                                       if 
(prevPoppedTokenType == ASTokenTypes.TOKEN_KEYWORD_IF && 
prevStackItem.token.getType() == ASTokenTypes.TOKEN_KEYWORD_IF && 
nextTokenNotComment != null && nextTokenNotComment.getType() == 
ASTokenTypes.TOKEN_KEYWORD_ELSE ) {
+                                                                               
// if we've already popped an if, and
+                                                                               
// we encounter another if, but the next
+                                                                               
// non-comment token is an else, then
+                                                                               
// we don't want to pop any more ifs
+                                                                               
break;
+                                                                       }
                                                                        
blockStack.remove(blockStack.size() - 1);
                                                                        if 
(prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_CLASS
                                                                                
        && prevStackItem.token.getType() != ASTokenTypes.TOKEN_KEYWORD_INTERFACE
@@ -605,6 +613,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                                                
indent = decreaseIndent(indent);
                                                                        }
                                                                }
+                                                               
prevPoppedTokenType = prevStackItem.token.getType();
                                                        }
                                                }
                                                if (!inControlFlowStatement) {
diff --git 
a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java 
b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
index 3b04d2ff6..28bb68329 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
@@ -675,7 +675,7 @@ public class TestElseStatement extends BaseFormatterTests {
        }
 
        @Test
-       public void testNested() {
+       public void testNestedWithParentheses() {
                FormatterSettings settings = new FormatterSettings();
                settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
                settings.placeOpenBraceOnNewLine = true;
@@ -736,6 +736,34 @@ public class TestElseStatement extends BaseFormatterTests {
                                result);
        }
 
+       @Test
+       public void testNestedInIfNoParentheses() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "if (condition)\n" +
+                       "\tif (condition)\n" +
+                       "\t\tstatement;\n" +
+                       "\telse\n" +
+                       "\t\tstatement;",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (condition)\n" +
+                               "\tif (condition)\n" +
+                               "\t\tstatement;\n" +
+                               "\telse\n" +
+                               "\t\tstatement;",
+                               // @formatter:on
+                               result);
+       }
+
        @Test
        public void testCollapseEmptyBlock1() {
                FormatterSettings settings = new FormatterSettings();
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 e3fd79f49..7d0109511 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestIfStatement.java
@@ -710,14 +710,12 @@ public class TestIfStatement extends BaseFormatterTests {
                settings.placeOpenBraceOnNewLine = true;
                settings.insertSpaces = false;
                ASTokenFormatter formatter = new ASTokenFormatter(settings);
-               System.err.println("**** BEFORE");
                String result = formatter.format("file.as",
                // @formatter:off
                        "{if (condition1) if (condition2) {statement;}}",
                        // @formatter:on
                        problems
                );
-               System.err.println("**** AFTER");
                assertEquals(
                // @formatter:off
                                "{\n" +

Reply via email to