我有一个代码分析器,其注册语法树解析:
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeAction(HandleSyntaxTree);
}
问题是,在打开解决方案时,会对解决方案的每个(* .cs)文件执行该操作。由于HandleSyntaxTree()
方法调用Git的命令行进程,对于大型解决方案,这会使非常慢。
有没有办法只为在编辑器中打开的文件调用HandleSyntaxTree()
?
编辑:HandleSyntaxTree()方法的半伪代码
private void HandleSyntaxTree(SyntaxTreeAnalysisContext context)
{
vart root = context.Tree.GetCompilationUnitRoot(context.CancellationToken);
string filePath = context.Tree.FilePath;
GetGitCurrentBranchName(filePath); //**** Calls Git ****
if (!availableHashBasedDescriptionOfCurrentlyEditedFile)
{
ExportFileFromGitRepoToTemporaryLocation(filePath); //**** Calls Git ****
CreateHashBasedDescriptionOfCurrentlyEditedFile();
}
var declarationNodes = GetSpecifiedDeclarationNodesFromSyntaxRoot(root);
foreach (var node in declarationNodes )
{
if (!NodeDiffersFromGitRepo(node)) continue;
if (NodeContainsRequiredTagInComment(node)) continue;
FindTokenAndReportDiagnostics(context, node);
}
}