【问题标题】:IdentifierToken not being hit in Roslyn Analyzer在 Roslyn Analyzer 中未命中 IdentifierToken
【发布时间】:2019-06-26 22:51:29
【问题描述】:

我正在尝试编写一个 Roslyn 分析器,它需要拦截对函数调用 WaitForExternalEvent 的调用并对该函数的参数执行一些逻辑。我有一个语法树,看起来像

在代码形式中它看起来像

 public static class HireEmployee
    {
        [FunctionName("HireEmployee")]
        public static async Task<Application> RunOrchestrator(
            [OrchestrationTrigger] DurableOrchestrationContext context,
            ILogger log)
        {
            var applications = context.GetInput<List<Application>>();
            var approvals = await context.WaitForExternalEvent<List<Application>>("ApplicationsFiltered");
            log.LogInformation($"Approval received. {approvals.Count} applicants approved");
            return approvals.OrderByDescending(x => x.Score).First();
        }
...

当我为此注册操作时,我会这样做

context.RegisterSyntaxNodeAction(AnalyzeSyntax, SyntaxKind.IdentifierName);

在我的AnalyzeSyntax 方法中设置断点我确实为 IdentifierName 标记设置了断点,但从未为WaitForExternalEvent 标记设置断点。令牌的深度是否有限制?我应该如何寻找这些电话?

【问题讨论】:

    标签: c# roslyn roslyn-code-analysis


    【解决方案1】:

    在我看来,您需要使用 SyntaxKind.GenericName 而不是 SyntaxKind.IdentifierName 来注册操作。然后在您的 AnalyzeSyntax 方法中,您希望将 context.Node 转换为 GenericName 类型。

    这是当我突出显示 WaitForExternalEvent&lt;List&lt;Application&gt;&gt; 时语法可视化器向我显示的内容。

    所以,像这样设置动作:

    context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.GenericName);
    

    你的方法的开始应该这样做:

    private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
    {
        var syntax = context.Node as GenericNameSyntax;
    }
    

    我确实设法让它达到断点。

    【讨论】:

      猜你喜欢
      • 2017-03-04
      • 1970-01-01
      • 2019-07-24
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多