Area-CompilersConcept-APIFeature - IOperationFeature Requestapi-approvedhelp wanted
仓库指标
- 星标
- (20,414 个星标)
- PR 合并指标
- (平均合并 6天 17小时) (30 天内合并 256 个 PR)
描述
Background and Motivation
Today, we have a SyntaxNode helper DescendantsNodes that takes a predicate descendIntoChildren, which allows users to cut off enumeration if needed. We don't have a similar method for IOperation: Descendants does not take a predicate that can control this. We should add a companion method for IOperation here.
Proposed API
namespace Microsoft.CodeAnalysis.Operations
{
public static class OperationExtensions
{
+ public static IEnumerable<IOperation> Descendants(this IOperation? operation, Func<IOperation, bool> descendIntoChildren);
+ public static IEnumerable<IOperation> DescendantsAndSelf(this IOperation? operation, Func<IOperation, bool> descendIntoChildren);
}
Usage examples
Where I need this currently is to express something like operation.Descendants(descendIntoChildren: static node => node is not (IAnonymousFunctionOperation or ILocalFunctionOperation)), where I need to cut off enumeration into lambdas or local functions.
Alternatives
N/A
Risks
Ideally, we'd name it DescendantNodes for consistency with syntax, but that ship sailed long ago.