我正在Roslyn中实现自己的诊断分析器。我的目标是识别与其他标识符过于相似的标识符并报告这些实例。
如果冲突的标识符在同一范围内,我想确保只发出警告。也就是说,我只警告标识符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);
// ...
}
答案 0 :(得分:2)
LookupSymbols没有过滤到同一文件的选项。但是制作一个可以遍历文件并以这种方式收集名称的语法助行器非常容易。换句话说,只需将您需要的信息与您所拥有的部分放在一起。