소스 검색

Make script class parser errors to not abort the build

As our script class parser is error prone, we should not impede the build from continuing because of a parsing error.
This should be reverted in the future once we switch to Roslyn.
Ignacio Etcheverry 5 년 전
부모
커밋
d53c15b12c

+ 6 - 1
modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs

@@ -81,7 +81,12 @@ namespace GodotTools
                     }
                 }
 
-                ScriptClassParser.ParseFileOrThrow(projectIncludeFile, out var classes);
+                Error parseError = ScriptClassParser.ParseFile(projectIncludeFile, out var classes, out string errorStr);
+                if (parseError != Error.Ok)
+                {
+                    GD.PushError($"Failed to determine namespace and class for script: {projectIncludeFile}. Parse error: {errorStr ?? parseError.ToString()}");
+                    continue;
+                }
 
                 string searchName = System.IO.Path.GetFileNameWithoutExtension(projectIncludeFile);
 

+ 8 - 3
modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs

@@ -27,12 +27,15 @@ namespace GodotTools.Internals
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern Error internal_ParseFile(string filePath, Array<Dictionary> classes, out string errorStr);
 
-        public static void ParseFileOrThrow(string filePath, out IEnumerable<ClassDecl> classes)
+        public static Error ParseFile(string filePath, out IEnumerable<ClassDecl> classes, out string errorStr)
         {
             var classesArray = new Array<Dictionary>();
-            var error = internal_ParseFile(filePath, classesArray, out string errorStr);
+            var error = internal_ParseFile(filePath, classesArray, out errorStr);
             if (error != Error.Ok)
-                throw new Exception($"Failed to determine namespace and class for script: {filePath}. Parse error: {errorStr ?? error.ToString()}");
+            {
+                classes = null;
+                return error;
+            }
 
             var classesList = new List<ClassDecl>();
 
@@ -47,6 +50,8 @@ namespace GodotTools.Internals
             }
 
             classes = classesList;
+
+            return Error.Ok;
         }
     }
 }