Wie bekomme ich eine SyntaxNode
basierend auf einer Zeilennummer? Sonst, wenn es möglich ist, LineSpan
dieser Zeilennummer dann zum Knoten zu bekommen.Knoten von der Liniennummer in Roslyn erhalten
3
A
Antwort
5
Sie können die Spanne einer Zeile aus dem Dokumenttext abrufen. Von dort aus können Sie alle Knoten finden, die sich mit der Spanne der Linie schneiden. Dies wird mehrere Syntax Knoten zurückkehren, die Sie dann Ihre Kriterien verwenden können, um die eine ausziehbar Sie suchen:
static void Main(string[] args)
{
var code = @"
using System;
namespace ConsoleApplication1
{
class TypeName
{
public int Add(int x, int y)
{
return x+y;
}
}
}";
var st = SourceText.From(code);
var sf = SyntaxFactory.ParseSyntaxTree(st);
var span = sf.GetText().Lines[9].Span;
var nodes = sf.GetRoot().DescendantNodes().Where(x => x.Span.IntersectsWith(span));
Console.WriteLine(nodes.Last().ToString());
Console.ReadKey();
}
2
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.Text;
var s = @"class M
{
public void P() { }
}";
var text = SourceText.From(s);
var lineIndex = 2;
var lineSpan = text.Lines[lineIndex].Span;
var tree = SyntaxFactory.ParseSyntaxTree(text);
var node = tree.GetRoot().FindNode(lineSpan);
// or if you want a all nodes related to the span
var node = tree.GetRoot().DescendantNodesAndSelf(lineSpan);