private async static Task <Document> MakeStringInterpolationAsync(Document document, Diagnostic diagnostic, CancellationToken cancellationToken)
        {
            var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);

            var invocationExpression   = root.FindToken(diagnostic.Location.SourceSpan.Start).Parent.AncestorsAndSelf().OfType <InvocationExpressionSyntax>().First();
            var newStringInterpolation = StringFormatCodeFixProvider.CreateNewStringInterpolation(invocationExpression);
            var newArgumentList        = SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList <ArgumentSyntax>().Add(SyntaxFactory.Argument(newStringInterpolation)));
            var newRoot     = root.ReplaceNode(invocationExpression.ArgumentList, newArgumentList);
            var newDocument = document.WithSyntaxRoot(newRoot);

            return(newDocument);
        }
        private async static Task <SyntaxNode> GetFixedDocumentAsync(FixAllContext fixAllContext, Document document)
        {
            var diagnostics = await fixAllContext.GetDocumentDiagnosticsAsync(document).ConfigureAwait(false);

            var root = await document.GetSyntaxRootAsync(fixAllContext.CancellationToken).ConfigureAwait(false);

            var nodes   = diagnostics.Select(d => root.FindNode(d.Location.SourceSpan, getInnermostNodeForTie: true).FirstAncestorOrSelfOfType <InvocationExpressionSyntax>()).Where(n => !n.IsMissing).ToList();
            var newRoot = root.ReplaceNodes(nodes, (original, rewritten) => rewritten.WithAdditionalAnnotations(stringFormatAnnotation));

            while (true)
            {
                var annotatedNodes = newRoot.GetAnnotatedNodes(stringFormatAnnotation);
                var node           = annotatedNodes.FirstOrDefault();
                if (node == null)
                {
                    break;
                }
                newRoot = StringFormatCodeFixProvider.CreateNewStringInterpolation(newRoot, (InvocationExpressionSyntax)node);
            }
            return(newRoot);
        }