private BlockSyntax SplitOrMoveDeclarationIntoMethodDefinition(BlockSyntax body, CancellationToken cancellationToken)
        {
            var statements    = body.Statements;
            var postProcessor = new PostProcessor(_semanticDocument.SemanticModel, _selectionResult.FirstStatement().SpanStart);

            var variables             = _analyzerResult.GetVariablesToSplitOrMoveIntoMethodDefinition(cancellationToken);
            var declarationStatements = CreateDeclarationStatements(variables);

            declarationStatements = postProcessor.MergeDeclarationStatements(declarationStatements);

            return(SyntaxFactory.Block(declarationStatements.Concat(statements)));
        }
        private BlockSyntax CleanupCode(BlockSyntax body)
        {
            var semanticModel = _semanticDocument.SemanticModel;
            var context       = _selectionResult.GetContainingScope();
            var postProcessor = new PostProcessor(semanticModel, context.SpanStart);

            var statements = postProcessor.RemoveRedundantBlock(body.Statements.ToList());

            statements = postProcessor.RemoveDeclarationAssignmentPattern(statements);
            statements = postProcessor.RemoveInitializedDeclarationAndReturnPattern(statements);

            return(SyntaxFactory.Block(statements));
        }
        private async Task <IEnumerable <SyntaxNode> > CreateStatementsOrInitializerToInsertAtCallSiteAsync(CancellationToken cancellationToken)
        {
            var semanticModel = _semanticDocument.SemanticModel;
            var context       = _selectionResult.FirstStatement();
            var postProcessor = new PostProcessor(semanticModel, context.SpanStart);

            var statements = AddSplitOrMoveDeclarationOutStatementsToCallSite(cancellationToken);

            statements = postProcessor.MergeDeclarationStatements(statements);
            statements = AddAssignmentStatementToCallSite(statements);
            statements = AddInvocationAtCallSite(statements);

            return(statements);
        }