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);
        }
示例#2
0
        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);
        }