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 2744006b96738a2dcb0edc84ef8cf5e38ddea980
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Sep 27 10:32:34 2023 -0700

    formatter: insert-new-line-else option
---
 .../apache/royale/formatter/ASTokenFormatter.java  | 24 ++++--
 .../apache/royale/formatter/FormatterSettings.java |  1 +
 .../apache/royale/formatter/FormatterUtils.java    |  1 +
 .../royale/formatter/config/Configuration.java     | 18 +++++
 .../apache/royale/formatter/TestElseStatement.java | 88 ++++++++++++++++++++++
 5 files changed, 127 insertions(+), 5 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 9676a5b6f..aeed7297e 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -66,6 +66,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
        private boolean inInterfaceDeclaration;
        private boolean inConfigGateForDefinition;
        private boolean blockOpenPending;
+       private boolean elseNoNewLinePending;
        private boolean indentedStatement;
        private boolean caseOrDefaultBlockOpenPending;
        private boolean skipFormatting;
@@ -201,6 +202,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                inInterfaceDeclaration = false;
                inConfigGateForDefinition = false;
                blockOpenPending = false;
+               elseNoNewLinePending = false;
                indentedStatement = false;
                caseOrDefaultBlockOpenPending = false;
                skipFormatting = false;
@@ -246,7 +248,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                appendNewLines(builder, 
numRequiredNewLines);
                                                break;
                                        }
-                                       if (!blockOpenPending) {
+                                       if (!blockOpenPending && 
!elseNoNewLinePending) {
                                                int newLinesInExtra = 
countNewLinesInExtra(token);
                                                if (prevToken != null && 
prevToken.getType() == ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT) {
                                                        newLinesInExtra++;
@@ -391,6 +393,14 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                requiredSpace = true;
                                                break;
                                        }
+                                       case ASTokenTypes.TOKEN_KEYWORD_ELSE: {
+                                               if (elseNoNewLinePending) {
+                                                       numRequiredNewLines = 0;
+                                                       elseNoNewLinePending = 
false;
+                                                       requiredSpace = true;
+                                               }
+                                               break;
+                                       }
                                        case ASTokenTypes.TOKEN_OPERATOR_EQUAL:
                                        case 
ASTokenTypes.TOKEN_OPERATOR_NOT_EQUAL:
                                        case 
ASTokenTypes.TOKEN_OPERATOR_STRICT_EQUAL:
@@ -622,13 +632,17 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                        if 
(stackItem.blockDepth <= 0) {
                                                                
blockStack.remove(blockStack.size() - 1);
                                                        }
-                                                       if (!(stackItem 
instanceof ObjectLiteralBlockStackItem)
-                                                                       && 
(nextToken == null || (nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON
+                                                       if (!(stackItem 
instanceof ObjectLiteralBlockStackItem)) {
+                                                               if 
(nextTokenNotComment != null && nextTokenNotComment.getType() == 
ASTokenTypes.TOKEN_KEYWORD_ELSE && !settings.insertNewLineElse) {
+                                                                       
elseNoNewLinePending = true;
+                                                               }
+                                                               else if 
(nextToken == null || (nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON
                                                                                
        && nextToken.getType() != ASTokenTypes.TOKEN_PAREN_CLOSE
                                                                                
        && nextToken.getType() != ASTokenTypes.TOKEN_COMMA
                                                                                
        && nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
-                                                                               
        && nextToken.getType() != 
ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT))) {
-                                                               
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+                                                                               
        && nextToken.getType() != 
ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT)) {
+                                                                       
numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+                                                               }
                                                        }
                                                }
                                                break;
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java 
b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
index c083f01c3..908f824e3 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
@@ -25,6 +25,7 @@ public class FormatterSettings {
        public int tabSize = 4;
        public boolean insertSpaces = false;
        public boolean insertFinalNewLine = false;
+       public boolean insertNewLineElse = true;
        public boolean placeOpenBraceOnNewLine = true;
        public boolean insertSpaceAfterSemicolonInForStatements = true;
        public boolean insertSpaceAfterKeywordsInControlFlowStatements = true;
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java 
b/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
index 39e6b89bc..4221977d9 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
@@ -29,6 +29,7 @@ public class FormatterUtils {
                settings.insertSpaces = configuration.getInsertSpaces();
                settings.insertFinalNewLine = 
configuration.getInsertFinalNewLine();
                settings.placeOpenBraceOnNewLine = 
configuration.getPlaceOpenBraceOnNewLine();
+               settings.insertNewLineElse = 
configuration.getPlaceElseOnNewLine();
                settings.insertSpaceAfterSemicolonInForStatements = 
configuration.getInsertSpaceAfterSemicolonInForStatements();
                settings.insertSpaceAfterKeywordsInControlFlowStatements = 
configuration.getInsertSpaceAfterKeywordsInControlFlowStatements();
                settings.insertSpaceAfterFunctionKeywordForAnonymousFunctions = 
configuration.getInsertSpaceAfterFunctionKeywordForAnonymousFunctions();
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java 
b/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java
index 2e1883904..5adc4b1a2 100644
--- 
a/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java
+++ 
b/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java
@@ -320,6 +320,24 @@ public class Configuration {
         this.placeOpenBraceOnNewLine = b;
     }
 
+    //
+    // 'insert-new-line-else' option
+    //
+
+    private boolean placeElseOnNewLine = true;
+
+    public boolean getPlaceElseOnNewLine()
+    {
+        return placeElseOnNewLine;
+    }
+
+    @Config
+    @Mapping("insert-new-line-else")
+    public void setPlaceElseOnNewLine(ConfigurationValue cv, boolean b)
+    {
+        this.placeElseOnNewLine = b;
+    }
+
     //
     // 'insert-space-for-loop-semicolon' option
     //
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 0e6f8445c..038e1eb3a 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
@@ -853,4 +853,92 @@ public class TestElseStatement extends BaseFormatterTests {
                                // @formatter:on
                                result);
        }
+
+       @Test
+       public void testDisableInsertNewLineElseWithStatement1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.insertNewLineElse = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "if (condition)\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}\n" +
+                       "else\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (condition) {\n" +
+                               "\tstatement;\n" +
+                               "} else {\n" +
+                               "\tstatement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisableInsertNewLineElseWithStatement2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.insertNewLineElse = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "if (condition) {\n" +
+                       "\tstatement;\n" +
+                       "} else {\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (condition) {\n" +
+                               "\tstatement;\n" +
+                               "} else {\n" +
+                               "\tstatement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisableInsertNewLineElseWithStatement3() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.insertNewLineElse = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "if (condition)\n" +
+                       "\tstatement;\n" +
+                       "else\n" +
+                       "\tstatement;\n",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (condition)\n" +
+                               "\tstatement;\n" +
+                               "else\n" +
+                               "\tstatement;\n",
+                               // @formatter:on
+                               result);
+       }
 }

Reply via email to