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 e18e4e7eff876a8ff9349d4c60ec837b4cfb1777 Author: Josh Tynjala <[email protected]> AuthorDate: Thu Oct 21 13:23:59 2021 -0700 formatter: ignore compiler problems that aren't errors --- .../org/apache/royale/formatter/FORMATTER.java | 48 ++++++++++++++-------- .../royale/formatter/TestThrowStatement.java | 6 +-- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java index 9686eb0..8e632e1 100644 --- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java +++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java @@ -33,6 +33,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; +import org.apache.royale.compiler.clients.problems.CompilerProblemCategorizer; import org.apache.royale.compiler.clients.problems.ProblemFormatter; import org.apache.royale.compiler.clients.problems.ProblemPrinter; import org.apache.royale.compiler.clients.problems.ProblemQuery; @@ -51,6 +52,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.CompilerProblemSeverity; import org.apache.royale.compiler.problems.ConfigurationProblem; import org.apache.royale.compiler.problems.ICompilerProblem; import org.apache.royale.compiler.problems.UnexpectedExceptionProblem; @@ -396,7 +398,7 @@ public class FORMATTER { String scriptTagText = scriptMatcher.group(1); String scriptText = scriptMatcher.group(2); String formattedScriptText = formatAS3TextInternal(filePath, scriptText, problems); - if (problems.size() > 0) { + if (!ignoreProblems && hasErrors(problems)) { return text; } String[] formattedLines = formattedScriptText.split("\n"); @@ -431,6 +433,10 @@ public class FORMATTER { } private String formatAS3TextInternal(String filePath, String text, Collection<ICompilerProblem> problems) { + if(problems == null) { + problems = new ArrayList<ICompilerProblem>(); + } + StringReader textReader = new StringReader(text); StreamingASTokenizer tokenizer = null; ASToken[] streamingTokens = null; @@ -448,10 +454,11 @@ public class FORMATTER { } } - if (!ignoreProblems && tokenizer.hasTokenizationProblems()) { - if (problems != null) { - problems.addAll(tokenizer.getTokenizationProblems()); - } + if (tokenizer.hasTokenizationProblems()) { + problems.addAll(tokenizer.getTokenizationProblems()); + } + + if(!ignoreProblems && hasErrors(problems)) { return text; } @@ -477,23 +484,19 @@ public class FORMATTER { parser.file(node); } catch (Exception e) { parser = null; - if (problems != null) { - problems.add(new UnexpectedExceptionProblem(e)); - } + problems.add(new UnexpectedExceptionProblem(e)); return text; } - if (!ignoreProblems && tokenizer.hasTokenizationProblems()) { - if (problems != null) { - problems.addAll(tokenizer.getTokenizationProblems()); - } - return text; + if (tokenizer.hasTokenizationProblems()) { + problems.addAll(tokenizer.getTokenizationProblems()); } - if (!ignoreProblems && parser.getSyntaxProblems().size() > 0) { - if (problems != null) { - problems.addAll(parser.getSyntaxProblems()); - } + if (parser.getSyntaxProblems().size() > 0) { + problems.addAll(parser.getSyntaxProblems()); + } + + if(!ignoreProblems && hasErrors(problems)) { return text; } @@ -1550,6 +1553,17 @@ public class FORMATTER { } } + private boolean hasErrors(Collection<ICompilerProblem> problems) { + CompilerProblemCategorizer categorizer = new CompilerProblemCategorizer(null); + for(ICompilerProblem problem : problems) { + CompilerProblemSeverity severity = categorizer.getProblemSeverity(problem); + if(CompilerProblemSeverity.ERROR.equals(severity)) { + return true; + } + } + return false; + } + private static class BlockStackItem { public BlockStackItem(IASToken token) { this.token = token; diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java index 7c380a9..d6c21f1 100644 --- a/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java +++ b/formatter/src/test/java/org/apache/royale/formatter/TestThrowStatement.java @@ -36,7 +36,7 @@ public class TestThrowStatement extends BaseFormatterTests { // @formatter:off "throw;", // @formatter:on - problems + null ); assertEquals( // @formatter:off @@ -57,7 +57,7 @@ public class TestThrowStatement extends BaseFormatterTests { // @formatter:off "throw", // @formatter:on - problems + null ); assertEquals( // @formatter:off @@ -116,7 +116,7 @@ public class TestThrowStatement extends BaseFormatterTests { "throw\n" + "new Error();", // @formatter:on - problems + null ); assertEquals( // @formatter:off
