我有一个代码分析器,其操作注册到语法树解析:
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);
}
}