Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SyntaxWalker doesn't visit trivia

Given:

With a simple syntax walker I want to visit trivias (EndOfLineTrivia to be exact)

  public sealed class MyWalker : SyntaxWalker
    {
        public int Lines { get; set; }

        public int Trivia { get; set; }

        public int Node { get; set; }

        public override void Visit(SyntaxNode node)
        {
            Node++;
            base.Visit(node);
        }

        protected override void VisitTrivia(SyntaxTrivia trivia)
        {
            Trivia++;
            base.VisitTrivia(trivia);
        }
    }

I call the Walker like this:

    SyntaxTree node = CSharpSyntaxTree.ParseText(sourceCode);
    var root = node.GetRoot();
    var walker = new LocWalker();

Problem

The overriden VisitTrivia Method is never called.

like image 351
Boas Enkler Avatar asked Oct 23 '25 20:10

Boas Enkler


1 Answers

What you need is to set the Depth of the walker to SyntaxWalkerDepth.Trivia (or SyntaxWalkerDepth.StructuredTrivia). The default Depth is SyntaxWalkerDepth.Node, which means that trivia is not visited.

To do that, call the base constructor:

public MyWalker() : base(SyntaxWalkerDepth.Trivia)
{
}
like image 194
svick Avatar answered Oct 26 '25 10:10

svick



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!