SyntaxWalker 不访问琐事
SyntaxWalker doesn't visit trivia
给定:
我想通过一个简单的语法 walker 访问琐事(准确地说是 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 方法。
你需要的是将助行器的Depth
设置为SyntaxWalkerDepth.Trivia
(或SyntaxWalkerDepth.StructuredTrivia
)。默认Depth
为SyntaxWalkerDepth.Node
,表示不访问trivia
为此,调用基础构造函数:
public MyWalker() : base(SyntaxWalkerDepth.Trivia)
{
}
给定:
我想通过一个简单的语法 walker 访问琐事(准确地说是 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 方法。
你需要的是将助行器的Depth
设置为SyntaxWalkerDepth.Trivia
(或SyntaxWalkerDepth.StructuredTrivia
)。默认Depth
为SyntaxWalkerDepth.Node
,表示不访问trivia
为此,调用基础构造函数:
public MyWalker() : base(SyntaxWalkerDepth.Trivia)
{
}