3
行番号に基づいてSyntaxNode
を取得するにはどうすればよいですか?そうでなければ、ノードにその行番号のLineSpan
を得ることが可能である。Roslynの行番号からノードを取得する
行番号に基づいてSyntaxNode
を取得するにはどうすればよいですか?そうでなければ、ノードにその行番号のLineSpan
を得ることが可能である。Roslynの行番号からノードを取得する
文書のテキストから1行の範囲を取得できます。そこから、ラインのスパンと交差するすべてのノードを見つけることができます。
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();
}
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);
:これは、あなたが、あなたが探しているものを引き出すために、あなたの基準を使用することができ、複数の構文ノードを返します。