SyntaxWalker不会访问琐事

时间:2016-08-02 08:30:09

标签: c# roslyn roslyn-code-analysis microsoft.codeanalysis

假设:

使用简单的语法walker我想访问trivias(确切地说是EndOfLineTrivia)

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

我这样称呼沃克:

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

问题

永远不会调用重写的VisitTrivia方法。

1 个答案:

答案 0 :(得分:7)

您需要将助行器的Depth设置为SyntaxWalkerDepth.Trivia(或SyntaxWalkerDepth.StructuredTrivia)。默认DepthSyntaxWalkerDepth.Node,这意味着不会访问琐事。

为此,请调用基础构造函数:

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