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 44d760ba784172b6cb18c4884423132c70fde248
Author: Josh Tynjala <[email protected]>
AuthorDate: Thu Sep 14 10:34:01 2023 -0700

    ASTokenFormatter: fix formatting with config constants like COMPILE:JS
---
 .../apache/royale/formatter/ASTokenFormatter.java  |  18 +-
 .../apache/royale/formatter/TestConfigConst.java   | 553 +++++++++++++++++++++
 2 files changed, 570 insertions(+), 1 deletion(-)

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 a8f5e25b8..bfc22d0e0 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -40,6 +40,7 @@ import 
org.apache.royale.compiler.internal.parsing.as.StreamingASTokenizer;
 import org.apache.royale.compiler.internal.tree.as.FileNode;
 import org.apache.royale.compiler.internal.workspaces.Workspace;
 import org.apache.royale.compiler.parsing.IASToken;
+import 
org.apache.royale.compiler.problems.CannotResolveConfigExpressionProblem;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.problems.UnexpectedExceptionProblem;
 import org.apache.royale.formatter.config.Semicolons;
@@ -139,7 +140,14 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                }
 
                if (parser.getSyntaxProblems().size() > 0) {
-                       problems.addAll(parser.getSyntaxProblems());
+                       for (ICompilerProblem problem : 
parser.getSyntaxProblems()) {
+                               if (problem instanceof 
CannotResolveConfigExpressionProblem) {
+                                       // it's okay if config constants aren't 
resolved
+                                       // we don't need to resolve anything
+                                       continue;
+                               }
+                               problems.add(problem);
+                       }
                }
 
                if (!settings.ignoreProblems && hasErrors(problems)) {
@@ -623,6 +631,14 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                }
                                                break;
                                        }
+                                       case ASTokenTypes.TOKEN_IDENTIFIER: {
+                                               if (prevToken != null && 
prevToken.getType() == ASTokenTypes.TOKEN_OPERATOR_NS_QUALIFIER && nextToken != 
null && nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN) {
+                                                       // this is a config 
constant block
+                                                       blockStack.add(new 
BlockStackItem(prevToken));
+                                                       blockOpenPending = true;
+                                               }
+                                               break;
+                                       }
                                        case ASTokenTypes.TOKEN_PAREN_CLOSE: {
                                                if (inControlFlowStatement) {
                                                        controlFlowParenStack--;
diff --git 
a/formatter/src/test/java/org/apache/royale/formatter/TestConfigConst.java 
b/formatter/src/test/java/org/apache/royale/formatter/TestConfigConst.java
new file mode 100644
index 000000000..c115b44a6
--- /dev/null
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestConfigConst.java
@@ -0,0 +1,553 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.royale.formatter;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class TestConfigConst extends BaseFormatterTests {
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithEmptyBlock1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithEmptyBlock2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {\n" + 
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" + 
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithEmptyBlock3() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS\n" +
+                       "{\n" + 
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" + 
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {\n" + 
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" + 
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithEmptyBlock3() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS\n" + 
+                       "{\n" + 
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" + 
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testCollapseEmptyBlock1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = true;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS\n" +
+                       "{\n" + 
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testCollapseEmptyBlock2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = true;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {\n" + 
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testCollapseEmptyBlock3() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.collapseEmptyBlocks = true;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithStatement1() {
+               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
+                       "COMPILE::JS {\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" +
+                               "\tstatement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithStatement2() {
+               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
+                       "COMPILE::JS\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" +
+                               "\tstatement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithStatement1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" +
+                               "\tstatement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithStatement2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" +
+                               "\tstatement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithStatementAfter1() {
+               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
+                       "COMPILE::JS {\n" +
+                       "\tstatement;\n" +
+                       "}\n" + 
+                       "statement;",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" +
+                               "\tstatement;\n" +
+                               "}\n" + 
+                               "statement;",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithStatementAfter2() {
+               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
+                       "COMPILE::JS\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}\n" + 
+                       "statement;",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS\n" +
+                               "{\n" +
+                               "\tstatement;\n" +
+                               "}\n" + 
+                               "statement;",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithStatementAfter1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS {\n" +
+                       "\tstatement;\n" +
+                       "}\n" + 
+                       "statement;",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" +
+                               "\tstatement;\n" +
+                               "}\n" + 
+                               "statement;",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithStatementAfter2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "COMPILE::JS\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}\n" + 
+                       "statement;",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "COMPILE::JS {\n" +
+                               "\tstatement;\n" +
+                               "}\n" + 
+                               "statement;",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testAssignment() {
+               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
+                       "var b:Boolean = COMPILE::JS;",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "var b:Boolean = COMPILE::JS;",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithCondition1() {
+               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 (COMPILE::JS)\n" +
+                       "{\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (COMPILE::JS)\n" +
+                               "{\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testPlaceOpenBraceOnNewLineWithCondition2() {
+               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 (COMPILE::JS) {\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (COMPILE::JS)\n" +
+                               "{\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithCondition1() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "if (COMPILE::JS)\n" +
+                       "{\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (COMPILE::JS) {\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void testDisablePlaceOpenBraceOnNewLineWithCondition2() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "if (COMPILE::JS) {\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "if (COMPILE::JS) {\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+}

Reply via email to