2016-07-11 3 views
3

회선 번호에 따라 SyntaxNode을 얻으려면 어떻게해야합니까? 그렇지 않으면 노드에 그 줄 번호의 LineSpan을 얻는 것이 가능하면 가능합니다.Roslyn의 회선 번호 받기

답변

5

문서 텍스트에서 한 줄의 범위를 가져올 수 있습니다. 여기에서 선의 스팬과 교차하는 모든 노드를 찾을 수 있습니다.

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); 
: 이것은 당신이 당신이 찾고있는 하나를 꺼내 기준을 사용할 수있는 여러 구문 노드를 반환합니다