Example #1
0
        /// <summary>
        /// Returns a <see cref="CodeAction"/> to be executed.
        /// </summary>
        /// <param name="data">Represents data that is used when creating a <see cref="CodeAction"/> for the code fix.</param>
        protected virtual async Task <CodeAction?> GetCodeActionAsync(CodeFixData <T> data)
        {
            if (!data.Success || !data.HasNode)
            {
                return(null);
            }

            Document document                   = data.Document;
            T        node                       = data.Node;
            CompilationUnitSyntax root          = data.Root;
            Diagnostic            diagnostic    = data.Diagnostic;
            SemanticModel?        semanticModel = data.SemanticModel ?? await document.GetSemanticModelAsync(data.CancellationToken).ConfigureAwait(false);

            if (semanticModel is null)
            {
                return(null);
            }

            return(CodeAction.Create(Title, cancellationToken => ExecuteAsync(CodeFixExecutionContext <T> .From(
                                                                                  diagnostic,
                                                                                  document,
                                                                                  root,
                                                                                  node,
                                                                                  semanticModel,
                                                                                  cancellationToken)), Id));
        }
Example #2
0
        /// <inheritdoc/>
        protected override Task <Document> ExecuteAsync(CodeFixExecutionContext <T> context)
        {
            MemberDeclarationSyntax newNode = context.Node.AddModifiers(ModifiersToApply.Select(m => SyntaxFactory.Token(m)).ToArray());

            context.RegisterChange(context.Node, newNode);

            return(Task.FromResult(context.Document));
        }
Example #3
0
        /// <inheritdoc/>
        protected override Task <Document> ExecuteAsync(CodeFixExecutionContext <T> context)
        {
            SyntaxNode?newRoot = context.Root.RemoveNode(context.Node, SyntaxRemoveOptions.KeepEndOfLine | SyntaxRemoveOptions.KeepDirectives);

            if (newRoot is null)
            {
                return(Task.FromResult(context.Document));
            }

            return(Task.FromResult(context.Document.WithSyntaxRoot(newRoot)));
        }
Example #4
0
 /// <summary>
 /// Actually executes the <see cref="CodeAction"/>.
 /// </summary>
 /// <param name="context"><see cref="CodeFixExecutionContext{T}"/> that contains all the data needed to properly perform a code fix.</param>
 protected abstract Task <Document> ExecuteAsync(CodeFixExecutionContext <T> context);