簡體   English   中英

IdentifierToken 未在 Roslyn Analyzer 中被命中

[英]IdentifierToken not being hit in Roslyn Analyzer

我正在嘗試編寫一個 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標記命中了斷點。 令牌的深度有限制嗎? 我應該如何找到這些電話?

在我看來,您需要使用SyntaxKind.GenericName而不是SyntaxKind.IdentifierName來注冊操作。 然后在您的AnalyzeSyntax方法中,您希望將context.NodeGenericName類型。

當我突出顯示WaitForExternalEvent<List<Application>>時,這就是語法可視化工具向我顯示的內容。

在此處輸入圖片說明

所以,設置這樣的動作:

context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.GenericName);

你的方法的開始應該這樣做:

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

我確實設法讓它達到了斷點。 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM