2016-08-02 26 views
2

Gegeben:SyntaxWalker nicht besuchen nicht Trivia

Mit einer einfachen Syntax walker Ich möchte trivias besuchen (EndOfLineTrivia um genau zu sein)

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

ich die Walker wie folgt aufrufen:

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

Problem

Die überschriebene VisitTrivia-Methode wird nie aufgerufen.

Antwort

6

Sie müssen den Depth des Rollators auf SyntaxWalkerDepth.Trivia (oder SyntaxWalkerDepth.StructuredTrivia) setzen. Der Standard Depth ist SyntaxWalkerDepth.Node, was bedeutet, dass Quiz nicht besucht wird.

, das zu tun, rufen Sie den Basiskonstruktor:

public MyWalker() : base(SyntaxWalkerDepth.Trivia) 
{ 
} 
+0

Vielen Dank habe ich diesen Konstruktor Überlastung nicht erkennen! –