You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2021/10/21 21:33:20 UTC

[royale-compiler] 01/04: formatter: ignore compiler problems that aren't errors

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 <jo...@apache.org>
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