Boa*_*ler 3 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样叫沃克:
SyntaxTree node = CSharpSyntaxTree.ParseText(sourceCode);
var root = node.GetRoot();
var walker = new LocWalker();
Run Code Online (Sandbox Code Playgroud)
问题
永远不会调用重写的VisitTrivia方法.
你需要的是Depth将助行器设置为SyntaxWalkerDepth.Trivia(或SyntaxWalkerDepth.StructuredTrivia).默认Depth值为SyntaxWalkerDepth.Node,表示不访问琐事.
为此,请调用基础构造函数:
public MyWalker() : base(SyntaxWalkerDepth.Trivia)
{
}
Run Code Online (Sandbox Code Playgroud)