コード例 #1
0
        public static async Task <Document> ToSingleLineAsync(
            Document document,
            InitializerExpressionSyntax initializer,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            InitializerExpressionSyntax newInitializer = initializer
                                                         .ReplaceWhitespaceOrEndOfLineTrivia(ElasticSpace, TextSpan.FromBounds(initializer.FullSpan.Start, initializer.Span.End))
                                                         .WithFormatterAnnotation();

            SyntaxNode parent    = initializer.Parent;
            SyntaxNode newParent = parent;

            switch (parent.Kind())
            {
            case SyntaxKind.ObjectCreationExpression:
            {
                var expression = (ObjectCreationExpressionSyntax)parent;

                expression = expression.WithInitializer(newInitializer);

                ArgumentListSyntax argumentList = expression.ArgumentList;

                if (argumentList != null)
                {
                    newParent = expression.WithArgumentList(argumentList.WithoutTrailingTrivia());
                }
                else
                {
                    newParent = expression.WithType(expression.Type.WithoutTrailingTrivia());
                }

                break;
            }

            case SyntaxKind.ArrayCreationExpression:
            {
                var expression = (ArrayCreationExpressionSyntax)parent;

                newParent = expression
                            .WithInitializer(newInitializer)
                            .WithType(expression.Type.WithoutTrailingTrivia());

                break;
            }

            case SyntaxKind.ImplicitArrayCreationExpression:
            {
                var expression = (ImplicitArrayCreationExpressionSyntax)parent;

                newParent = expression
                            .WithInitializer(newInitializer)
                            .WithCloseBracketToken(expression.CloseBracketToken.WithoutTrailingTrivia());

                break;
            }

            default:
            {
                Debug.Fail(parent.Kind().ToString());

                return(await document.ReplaceNodeAsync(initializer, newInitializer, cancellationToken).ConfigureAwait(false));
            }
            }

            return(await document.ReplaceNodeAsync(parent, newParent, cancellationToken).ConfigureAwait(false));
        }