public static async Task <Document> RefactorAsync(
            Document document,
            BinaryExpressionSyntax binaryExpression,
            CancellationToken cancellationToken)
        {
            SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            StringConcatenationExpressionInfo concatenationInfo = SyntaxInfo.StringConcatenationExpressionInfo(binaryExpression, semanticModel, cancellationToken);

            StringConcatenationAnalysis analysis = concatenationInfo.Analyze();

            ExpressionSyntax newNode;

            if (analysis.ContainsStringLiteral)
            {
                if (analysis.ContainsVerbatimExpression &&
                    concatenationInfo.ContainsMultiLineExpression())
                {
                    newNode = concatenationInfo.ToMultiLineStringLiteralExpression();
                }
                else
                {
                    newNode = concatenationInfo.ToStringLiteralExpression();
                }
            }
            else
            {
                newNode = concatenationInfo.ToInterpolatedStringExpression();
            }

            newNode = newNode.WithTriviaFrom(binaryExpression);

            return(await document.ReplaceNodeAsync(binaryExpression, newNode, cancellationToken).ConfigureAwait(false));
        }
示例#2
0
        private static Task <Document> ToInterpolatedStringAsync(
            Document document,
            StringConcatenationExpressionInfo concatenationInfo,
            CancellationToken cancellationToken)
        {
            InterpolatedStringExpressionSyntax newExpression = concatenationInfo.ToInterpolatedStringExpression();

            return(RefactorAsync(document, concatenationInfo, newExpression, cancellationToken));
        }