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" +
