1

我有一个代码分析器,其操作注册到语法树解析:

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);
        }
    }
4

0 回答 0