IdentifierToken 未在 Roslyn 分析器中被击中
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.Node
转换为 GenericName
类型。
这是语法可视化工具在我突出显示 WaitForExternalEvent<List<Application>>
时向我显示的内容。
因此,像这样设置操作:
context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.GenericName);
你的方法的开头应该这样做:
private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
{
var syntax = context.Node as GenericNameSyntax;
}
而且我确实设法让它到达了断点。
我正在尝试编写一个 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.Node
转换为 GenericName
类型。
这是语法可视化工具在我突出显示 WaitForExternalEvent<List<Application>>
时向我显示的内容。
因此,像这样设置操作:
context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.GenericName);
你的方法的开头应该这样做:
private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
{
var syntax = context.Node as GenericNameSyntax;
}
而且我确实设法让它到达了断点。