private static async Task <Document> FormatExpressionChainOnMultipleLinesAsync(
            Document document,
            MemberAccessExpressionSyntax expression,
            CancellationToken cancellationToken)
        {
            SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken);

            SyntaxTriviaList triviaList = expression.GetIndentTrivia().Add(SyntaxHelper.DefaultIndent);

            triviaList = triviaList.Insert(0, SyntaxHelper.NewLine);

            var rewriter = new ExpressionChainSyntaxRewriter(triviaList);

            SyntaxNode newNode = rewriter.Visit(expression)
                                 .WithAdditionalAnnotations(Formatter.Annotation);

            SyntaxNode newRoot = oldRoot.ReplaceNode(expression, newNode);

            return(document.WithSyntaxRoot(newRoot));
        }
        private static async Task <Document> FormatExpressionChainOnMultipleLinesAsync(
            Document document,
            ImmutableArray <MemberAccessExpressionSyntax> expressions,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);

            MemberAccessExpressionSyntax expression = expressions[0];

            SyntaxTriviaList triviaList = SyntaxUtility.GetIndentTrivia(expression).Add(CSharpFactory.IndentTrivia());

            triviaList = triviaList.Insert(0, CSharpFactory.NewLineTrivia());

            var rewriter = new ExpressionChainSyntaxRewriter(expressions, triviaList);

            SyntaxNode newNode = rewriter.Visit(expression)
                                 .WithFormatterAnnotation();

            SyntaxNode newRoot = oldRoot.ReplaceNode(expression, newNode);

            return(document.WithSyntaxRoot(newRoot));
        }