2016-07-11 18 views

答えて

5

文書のテキストから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(); 
    } 
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); 
:これは、あなたが、あなたが探しているものを引き出すために、あなたの基準を使用することができ、複数の構文ノードを返します。
関連する問題