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



我正在罗斯林实施自己的诊断分析仪。我的目标是确定与他人太相似的标识符并报告这些实例。

我想确保只有在相互冲突的标识符处于同一范围内时,才发出警告。也就是说,我只警告标识符x与y相似,如果从声明y的地方,也可以转介x。

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

但是,恐怕这种方法非常昂贵,尤其是如果我为给定源文件中的每个标识符这样做。是否有一种方法可以使此过程更便宜,例如,将LookupSymbols方法的范围限制为当前文档?

此代码说明了我在做什么:

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

lookupsymbols没有选择过滤到同一文件的选项。但是,制作一个可以散步文件并以这种方式收集名称的语法步行者非常容易。换句话说,只需将所需的信息放在一起。

最新更新