簡體   English   中英

Roslyn SymbolFinder 將位置轉換為語法節點

[英]Roslyn SymbolFinder Convert Location to Syntax Node

我正在使用 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?               
}

如何將位置轉換為語法節點,然后檢查該節點是否為賦值?

您可以使用接受TextSpan FindNode()

所以你的例子看起來像:

var node = location.SourceTree.GetRoot().FindNode(location.SourceSpan);

我創建了一個擴展方法來這樣做:

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM