public override async Task RegisterCodeFixesAsync()

in src/Microsoft.VisualStudio.SDK.Analyzers.CodeFixes/VSSDK006CheckServicesExistCodeFix.cs [35:55]


        public override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            Diagnostic diagnostic = context.Diagnostics.First();
            SyntaxNode root = await context.Document.GetSyntaxRootAsync(context.CancellationToken);
            SyntaxNode? node = root.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true);
            SyntaxNode? presentArgument = node is VariableDeclaratorSyntax declaratorSyntax ? SyntaxFactory.IdentifierName(declaratorSyntax.Identifier)
                : node.Parent is InvocationExpressionSyntax ? null // direct GetService result invocation
                : node is NameSyntax ? node
                : node is MemberAccessExpressionSyntax ? node
                : null;

            if (presentArgument != null)
            {
                context.RegisterCodeFix(
                    CodeAction.Create(
                        "Add Assumes.Present after assignment",
                        ct => AppendAfterAssignmentAsync(context, node.FirstAncestorOrSelf<StatementSyntax>(), presentArgument, ct),
                        "After"),
                    diagnostic);
            }
        }