2016-07-11 9 views

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