private async static Task <Document> ConvertAsync(Document document, Diagnostic diagnostic, CancellationToken cancellationToken) { var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var diagnosticSpan = diagnostic.Location.SourceSpan; var lambda = root.FindToken(diagnosticSpan.Start).Parent .AncestorsAndSelf().First(x => x.Kind() == SyntaxKind.SimpleLambdaExpression || x.Kind() == SyntaxKind.ParenthesizedLambdaExpression); var methodInvoke = ConvertLambdaExpressionToMethodGroupAnalyzer.GetInvocationIfAny(lambda); var newRoot = root.ReplaceNode(lambda as ExpressionSyntax, methodInvoke.Expression as ExpressionSyntax); var newDocument = document.WithSyntaxRoot(newRoot); return(newDocument); }
public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); var diagnostic = context.Diagnostics.First(); var diagnosticSpan = diagnostic.Location.SourceSpan; var lambda = root.FindToken(diagnosticSpan.Start).Parent .AncestorsAndSelf().First(x => x.Kind() == SyntaxKind.SimpleLambdaExpression || x.Kind() == SyntaxKind.ParenthesizedLambdaExpression); var methodInvoke = ConvertLambdaExpressionToMethodGroupAnalyzer.GetInvocationIfAny(lambda); var newRoot = root.ReplaceNode(lambda as ExpressionSyntax, methodInvoke.Expression as ExpressionSyntax); var newDocument = context.Document.WithSyntaxRoot(newRoot); context.RegisterCodeFix(CodeAction.Create( "Use method name instead of lambda expression when signatures match", ct => Task.FromResult(newDocument)), diagnostic); }