C# 防止对打开的解决方案的每个文件执行语法树操作
我有一个代码分析器,其操作已注册到语法树解析:C# 防止对打开的解决方案的每个文件执行语法树操作,c#,.net,roslyn,roslyn-code-analysis,C#,.net,Roslyn,Roslyn Code Analysis,我有一个代码分析器,其操作已注册到语法树解析: public override void Initialize(AnalysisContext context) { context.RegisterSyntaxTreeAction(HandleSyntaxTree); } 问题在于,打开解决方案时,会对解决方案的每个(*.cs)文件执行此操作。由于HandleSyntaxTree()方法调用Git的命令行进程,因此对于大型解决方案,这会变得非常缓慢 有没有办法只为编辑器中打开的文件调用
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeAction(HandleSyntaxTree);
}
问题在于,打开解决方案时,会对解决方案的每个(*.cs)文件执行此操作。由于HandleSyntaxTree()
方法调用Git的命令行进程,因此对于大型解决方案,这会变得非常缓慢
有没有办法只为编辑器中打开的文件调用HandleSyntaxTree()
EDIT: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);
}
}
您能描述一下您的端到端场景吗?这将使提供更好的建议变得更容易。@JasonMalinowski:我已经添加了HandleSyntaxTree()方法的psedo代码-这足够了吗?啊,所以你正在尝试构建某些更改需要额外注释的地方,比如顶部的“更改历史”注释?你能描述一下你的端到端场景吗?这将使提供更好的建议变得更容易。@JasonMalinowski:我已经添加了HandleSyntaxTree()方法的psedo代码-这足够了吗?啊,所以您试图构建某些更改需要额外注释的地方,比如顶部的“更改历史”注释?