public async TaskAnalyzeAsync(CodeFixContext context) { var root = await context.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); var diagnostic = context.Diagnostics.First(); var diagnosticSpan = diagnostic.Location.SourceSpan; var identifier = root.FindToken(diagnosticSpan.Start).Parent.AncestorsAndSelf().OfType ().First(); var codeAction = new MyCodeAction("Assign a value to " + identifier.Identifier.ValueText, ct => AssignValueAsync(context.Document, identifier, ct)); return codeAction; }
public async TaskPackage library: Microsoft.CodeAnalysis.CSharp.ApplyAsync(CodeFixContext context, CancellationToken cancellationToken) { var root = await context.Document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var diagnostic = context.Diagnostics.First(); var diagnosticSpan = diagnostic.Location.SourceSpan; var oldExpression = root.FindToken(diagnosticSpan.Start).Parent.AncestorsAndSelf().OfType ().First(); var newExpression = SyntaxFactory.BinaryExpression(SyntaxKind.SubtractExpression, oldExpression, SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1))); var newRoot = root.ReplaceNode(oldExpression, newExpression); return context.Document.WithSyntaxRoot(newRoot); }