Microsoft.CodeQuality.Analyzers\ApiDesignGuidelines\DoNotDirectlyAwaitATask.cs (4)
78context.RegisterOperationAction(context => AnalyzeAwaitOperation(context, taskTypes), OperationKind.Await);
82context.RegisterOperationAction(context => AnalyzeUsingOperation(context, iAsyncDisposable, configuredAsyncDisposable), OperationKind.Using);
83context.RegisterOperationAction(context => AnalyzeUsingDeclarationOperation(context, iAsyncDisposable, configuredAsyncDisposable), OperationKind.UsingDeclaration);
88context.RegisterOperationAction(ctx => AnalyzeAwaitForEachLoopOperation(ctx, iAsyncEnumerable, configuredAsyncEnumerable), OperationKind.Loop);
Microsoft.NetCore.Analyzers\Performance\UseConcreteTypeAnalyzer.cs (10)
141context.RegisterOperationAction(context => coll.HandleInvocation((IInvocationOperation)context.Operation), OperationKind.Invocation);
142context.RegisterOperationAction(context => coll.HandleSimpleAssignment((ISimpleAssignmentOperation)context.Operation), OperationKind.SimpleAssignment);
143context.RegisterOperationAction(context => coll.HandleCoalesceAssignment((ICoalesceAssignmentOperation)context.Operation), OperationKind.CoalesceAssignment);
144context.RegisterOperationAction(context => coll.HandleDeconstructionAssignment((IDeconstructionAssignmentOperation)context.Operation), OperationKind.DeconstructionAssignment);
145context.RegisterOperationAction(context => coll.HandleFieldInitializer((IFieldInitializerOperation)context.Operation), OperationKind.FieldInitializer);
146context.RegisterOperationAction(context => coll.HandlePropertyInitializer((IPropertyInitializerOperation)context.Operation), OperationKind.PropertyInitializer);
147context.RegisterOperationAction(context => coll.HandlePropertyReference((IPropertyReferenceOperation)context.Operation), OperationKind.PropertyReference);
148context.RegisterOperationAction(context => coll.HandleVariableDeclarator((IVariableDeclaratorOperation)context.Operation), OperationKind.VariableDeclarator);
149context.RegisterOperationAction(context => coll.HandleDeclarationExpression((IDeclarationExpressionOperation)context.Operation), OperationKind.DeclarationExpression);
150context.RegisterOperationAction(context => coll.HandleReturn((IReturnOperation)context.Operation), OperationKind.Return);
Microsoft.NetCore.Analyzers\Runtime\DetectPreviewFeatureAnalyzer.cs (13)
262OperationKind.Invocation,
263OperationKind.ObjectCreation,
264OperationKind.PropertyReference,
265OperationKind.FieldReference,
266OperationKind.DelegateCreation,
267OperationKind.EventReference,
268OperationKind.Unary,
269OperationKind.Binary,
270OperationKind.ArrayCreation,
271OperationKind.CatchClause,
272OperationKind.TypeOf,
273OperationKind.EventAssignment,
274OperationKind.Await
Microsoft.NetCore.Analyzers\Tasks\UseValueTasksCorrectly.cs (27)
148case OperationKind.Await:
149case OperationKind.Return:
154case OperationKind.Argument:
178case OperationKind.ExpressionStatement:
179case OperationKind.Discard:
180case OperationKind.DiscardPattern:
181case OperationKind.SimpleAssignment when operation.Parent is ISimpleAssignmentOperation sao && sao.Target is IDiscardOperation:
186case OperationKind.Conversion:
199case OperationKind.Coalesce:
200case OperationKind.Conditional:
201case OperationKind.ConditionalAccess:
202case OperationKind.SwitchExpression:
203case OperationKind.SwitchExpressionArm:
214}, OperationKind.Invocation);
390case OperationKind.VariableInitializer when operation.Parent is IVariableDeclaratorOperation decl:
400case OperationKind.SimpleAssignment:
441OperationKind.Await => true,
442OperationKind.Return => true,
443OperationKind.Argument => true,
444OperationKind.Invocation => true, // e.g. AsTask()
445OperationKind.PropertyReference when op.Parent is IPropertyReferenceOperation { Property.Name: "Result" } => true,
525OperationKind.PropertyReference when op.Parent is IPropertyReferenceOperation { Property.Name: nameof(ValueTask<int>.Result) } => true,
526OperationKind.Invocation when op.Parent is IInvocationOperation { TargetMethod.Name: nameof(ValueTask.GetAwaiter) } => true,
541case OperationKind.PropertyReference when IsCompletedReference(op as IPropertyReferenceOperation):
544case OperationKind.Unary when op is IUnaryOperation { OperatorKind: UnaryOperatorKind.Not } unary && IsCompletedReference(unary.Operand as IPropertyReferenceOperation):
567OperationKind.LocalReference => ((ILocalReferenceOperation)op).Local.Equals(valueTaskSymbol),
568OperationKind.ParameterReference => ((IParameterReferenceOperation)op).Parameter.Equals(valueTaskSymbol),
src\sdk\src\Microsoft.CodeAnalysis.NetAnalyzers\src\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
192/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
198return operation.Kind == OperationKind.None && operation.Parent == null;
246public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
281public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
311return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
326(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
330for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
338case OperationKind.AnonymousObjectCreation:
387public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
492Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
517case OperationKind.LocalReference:
521case OperationKind.ParameterReference:
525case OperationKind.InstanceReference:
529case OperationKind.AnonymousFunction:
533case OperationKind.LocalFunction:
552private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
553ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
608case OperationKind.Parenthesized:
609case OperationKind.Conversion:
610case OperationKind.DeclarationExpression:
615case OperationKind.Tuple:
1097case OperationKind.DeconstructionAssignment:
1101case OperationKind.Tuple:
1102case OperationKind.Conversion:
1103case OperationKind.Parenthesized:
1129case OperationKind.AnonymousFunction:
1132case OperationKind.LocalFunction: