使用Roslyn查找上下文关键字

时间:2014-07-06 02:09:05

标签: c# keyword var roslyn

我在使用Roslyn识别上下文关键字(var,yield,async等)时遇到了一些困难。我继承自CSharpSyntaxWalker并覆盖VisitTokenSyntaxToken公开了一种扩展方法IsContextualKeyword(),但它总是返回false。

这是一个应该在语法树中输出所有上下文关键字的示例:

public class TokenWalker : CSharpSyntaxWalker
{
    public TokenWalker() : base(SyntaxWalkerDepth.Token) { }

    public override void VisitToken(SyntaxToken token)
    {
        //Trying to determine if we're visiting a contextual keyword
        if (token.IsContextualKeyword())
        {
            Console.WriteLine(token.ToString());
        }
        base.VisitToken(token);
    }
}

使用此课程如下:

public static void TaggingVarKeyword()
{
    var tree = CSharpSyntaxTree.ParseText(@"
    public class MyClass
    {
        public void MyMethod()
        {
            var var = 4;
        }
    }
    ");

    var walker = new TokenWalker();
    walker.Visit(tree.GetRoot());
}

我希望输出' var',但我根本没有输出。

如果我在VisitToken()处设置断点,我会看到var以IdentifierToken而不是TypeVarKeyword传入。

是否可以在纯粹的语法层面确定上下文关键字?如果是这样,你知道我该怎么做吗?

0 个答案:

没有答案