public static Task <Document> RefactorAsync(
            Document document,
            AnonymousMethodExpressionSyntax anonymousMethod,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (anonymousMethod == null)
            {
                throw new ArgumentNullException(nameof(anonymousMethod));
            }

            LambdaExpressionSyntax lambda = ParenthesizedLambdaExpression(
                anonymousMethod.AsyncKeyword,
                anonymousMethod.ParameterList,
                EqualsGreaterThanToken(),
                anonymousMethod.Block);

            lambda = lambda
                     .WithTriviaFrom(anonymousMethod)
                     .WithFormatterAnnotation();

            return(document.ReplaceNodeAsync(anonymousMethod, lambda, cancellationToken));
        }
        public static async Task <Document> RefactorAsync(
            Document document,
            AnonymousMethodExpressionSyntax anonymousMethod,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (anonymousMethod == null)
            {
                throw new ArgumentNullException(nameof(anonymousMethod));
            }

            SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);

            LambdaExpressionSyntax lambda = ParenthesizedLambdaExpression(
                anonymousMethod.AsyncKeyword,
                anonymousMethod.ParameterList,
                Token(SyntaxKind.EqualsGreaterThanToken),
                anonymousMethod.Block);

            lambda = lambda
                     .WithTriviaFrom(anonymousMethod)
                     .WithFormatterAnnotation();

            root = root.ReplaceNode(anonymousMethod, lambda);

            return(document.WithSyntaxRoot(root));
        }
        private static Task <Document> RefactorAsync(
            Document document,
            ExpressionSyntax expression,
            IMethodSymbol methodSymbol,
            SemanticModel semanticModel,
            CancellationToken cancellationToken)
        {
            ImmutableArray <IParameterSymbol> parameterSymbols = methodSymbol.Parameters;

            LambdaExpressionSyntax lambda = null;

            if (parameterSymbols.Length == 0)
            {
                lambda = ParenthesizedLambdaExpression(
                    (methodSymbol.IsAsync) ? AsyncKeyword() : default(SyntaxToken),
                    ParameterList(),
                    EqualsGreaterThanToken(),
                    InvocationExpression(expression, ArgumentList()));
            }
            else
            {
                int position = expression.SpanStart;

                string name = NameGenerator.Default.EnsureUniqueLocalName(DefaultNames.LambdaParameter, semanticModel, position, cancellationToken: cancellationToken);

                ParameterSyntax parameter = Parameter(Identifier(name).WithRenameAnnotation());
                ArgumentSyntax  argument  = Argument(IdentifierName(name));

                if (parameterSymbols.Length == 1)
                {
                    lambda = SimpleLambdaExpression(
                        (methodSymbol.IsAsync) ? AsyncKeyword() : default(SyntaxToken),
                        parameter,
                        EqualsGreaterThanToken(),
                        InvocationExpression(expression, ArgumentList(argument)));
                }
                else
                {
                    string name2 = NameGenerator.Default.EnsureUniqueLocalName(DefaultNames.SecondLambdaParameter, semanticModel, position, cancellationToken: cancellationToken);

                    lambda = ParenthesizedLambdaExpression(
                        (methodSymbol.IsAsync) ? AsyncKeyword() : default(SyntaxToken),
                        ParameterList(parameter, Parameter(Identifier(name2))),
                        EqualsGreaterThanToken(),
                        InvocationExpression(expression, ArgumentList(argument, Argument(IdentifierName(name2)))));
                }
            }

            lambda = lambda
                     .WithTriviaFrom(expression)
                     .WithFormatterAnnotation();

            return(document.ReplaceNodeAsync(expression, lambda, cancellationToken));
        }