C# 限制Roslyn语义模型中LookupSymbols方法的范围

C# 限制Roslyn语义模型中LookupSymbols方法的范围,c#,visual-studio-2015,roslyn,C#,Visual Studio 2015,Roslyn,我正在Roslyn实现我自己的诊断分析仪。我的目标是识别与其他标识符太相似的标识符并报告这些实例 我希望确保仅当冲突标识符在同一范围内时才发出警告。也就是说,我只警告,如果从声明Y的位置也可以引用X,那么标识符X与Y类似 我目前的方法是使用LookupSymbols方法。使用包含标识符的语法节点,我可以找到它在源代码中的位置,并找到范围中的所有符号。然后我只看这些符号的标识符 然而,我担心这种方法非常昂贵,特别是如果我对给定源文件中的每个标识符都这样做的话。有没有办法使这个过程更便宜,例如,将L

我正在Roslyn实现我自己的诊断分析仪。我的目标是识别与其他标识符太相似的标识符并报告这些实例

我希望确保仅当冲突标识符在同一范围内时才发出警告。也就是说,我只警告,如果从声明Y的位置也可以引用X,那么标识符X与Y类似

我目前的方法是使用LookupSymbols方法。使用包含标识符的语法节点,我可以找到它在源代码中的位置,并找到范围中的所有符号。然后我只看这些符号的标识符

然而,我担心这种方法非常昂贵,特别是如果我对给定源文件中的每个标识符都这样做的话。有没有办法使这个过程更便宜,例如,将LookupSymbols方法的范围限制在当前文档中

这段代码说明了我在做什么:

private void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
    var node = context.Node;
    var position = node.SpanStart;
    var symbolsInScope = context.SemanticModel.LookupSymbols(position);
    // ...
}

LookupSymbols没有筛选到同一文件的选项。但是制作一个语法漫游器很容易,它可以遍历一个文件并以这种方式收集名称。换句话说,把你需要的信息和你拥有的信息放在一起