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:
parent
378fc592b1
commit
d53c15b12c
2 changed files with 14 additions and 4 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue