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.
This commit is contained in:
Ignacio Etcheverry 2020-01-21 20:07:26 +01:00
parent 378fc592b1
commit d53c15b12c
2 changed files with 14 additions and 4 deletions

View file

@ -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); string searchName = System.IO.Path.GetFileNameWithoutExtension(projectIncludeFile);

View file

@ -27,12 +27,15 @@ namespace GodotTools.Internals
[MethodImpl(MethodImplOptions.InternalCall)] [MethodImpl(MethodImplOptions.InternalCall)]
private static extern Error internal_ParseFile(string filePath, Array<Dictionary> classes, out string errorStr); 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 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) 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>(); var classesList = new List<ClassDecl>();
@ -47,6 +50,8 @@ namespace GodotTools.Internals
} }
classes = classesList; classes = classesList;
return Error.Ok;
} }
} }
} }