2016-07-11 2 views

ответ

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); 
Смежные вопросы