我使用SymbolFinder查找对变量的所有引用。我想检查这个字段是否被分配到其定义之外。
var references = await SymbolFinder.FindReferencesAsync(equivalentSymbol,
context.GetSolution(), cancellationToken);
//Reference is grouped by variable name
var reference = references.FirstOrDefault();
foreach (var location in reference.Locations)
{
//How Do I check if the reference is an assignment?
}
如何将位置转换为语法节点,然后检查节点是否为赋值?
答案 0 :(得分:4)
您可以使用接受FindNode()
TextSpan
所以你的例子看起来像:
var node = location.SourceTree.GetRoot().FindNode(location.SourceSpan);
答案 1 :(得分:0)
我已经创建了一个扩展方法来执行此操作:
public static SyntaxNode GetNodeFromLocation(this SyntaxTree tree, ReferenceLocation location)
{
var lineSpan = location.Location.GetLineSpan();
return tree.GetRoot().DescendantNodes().FirstOrDefault(n => n.GetLocation().GetLineSpan().IsEqual(lineSpan));
}