阻止对打开的解决方案的每个文件执行语法树操作

时间:2016-01-27 14:11:25

标签: c# .net roslyn roslyn-code-analysis

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

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

0 个答案:

没有答案