Roslyn - 如何在 DiagnosticAnalyzer class 获取变量的所有引用?
Roslyn - How can I get all references of a variable at DiagnosticAnalyzer class?
我目前正在尝试使用 Roslyn 定义代码修复。我有一个 SyntaxNode
变量。
我想在我的 DiagnosticAnalyzer
class 中找到该变量的所有引用。不幸的是 SymbolFinder.FindReferencesAsync
方法需要一个 Solution
参数,如果我很清楚,我无法从 DiagnosticAnalyzer
class.
中获得当前解决方案
如何获取 DiagnosticAnalyzer
class 处变量的所有引用?
我实现了一个类似的分析器,算法如下(在 2000 多行文档上 运行 约 31 毫秒,但几乎总是低于 10 毫秒)
- 遍历
SemanticModel.GetRoot()
中的所有节点并收集 Expressions 和 LocalDeclarations
- 获取对应Identifier的符号
- 检查它是否实现了
IDisposable
,如果实现了就存储在 HashSet1
中
- 迭代调用的方法是 Dispose
- 从调用中获取符号,存储在
HashSet2
- 在
HashSet1
中但不在 HashSet2
中的符号的第一个 SyntaxReference
报告诊断
这很好用,但遗憾的是我不知道是否有更有效/更清洁的方法来做到这一点。如果你愿意,我可以分享部分代码。
我目前正在尝试使用 Roslyn 定义代码修复。我有一个 SyntaxNode
变量。
我想在我的 DiagnosticAnalyzer
class 中找到该变量的所有引用。不幸的是 SymbolFinder.FindReferencesAsync
方法需要一个 Solution
参数,如果我很清楚,我无法从 DiagnosticAnalyzer
class.
如何获取 DiagnosticAnalyzer
class 处变量的所有引用?
我实现了一个类似的分析器,算法如下(在 2000 多行文档上 运行 约 31 毫秒,但几乎总是低于 10 毫秒)
- 遍历
SemanticModel.GetRoot()
中的所有节点并收集 Expressions 和 LocalDeclarations - 获取对应Identifier的符号
- 检查它是否实现了
IDisposable
,如果实现了就存储在HashSet1
中 - 迭代调用的方法是 Dispose
- 从调用中获取符号,存储在
HashSet2
- 在
HashSet1
中但不在HashSet2
中的符号的第一个
SyntaxReference
报告诊断
这很好用,但遗憾的是我不知道是否有更有效/更清洁的方法来做到这一点。如果你愿意,我可以分享部分代码。