Getting node from line number in Roslyn

前端 未结 2 556
忘掉有多难
忘掉有多难 2021-02-15 15:43

How can I get a SyntaxNode based on a line number? Else if its possible to get LineSpan of that line number then to node.

2条回答
  •  感动是毒
    2021-02-15 16:30

    You can get the span of a line from the document text. From there, you can find all nodes that intersect with the span of the line. This will return multiple syntax nodes, which you can then use your criteria to pull out the one you are looking for:

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

提交回复
热议问题