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