File: Wrapping\SeparatedSyntaxList\CSharpInitializerExpressionWrapper.cs
Web Access
Project: src\roslyn\src\Features\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Features.csproj (Microsoft.CodeAnalysis.CSharp.Features)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Wrapping;

namespace Microsoft.CodeAnalysis.CSharp.Wrapping.SeparatedSyntaxList;

internal sealed partial class CSharpInitializerExpressionWrapper
    : AbstractCSharpSeparatedSyntaxListWrapper<InitializerExpressionSyntax, ExpressionSyntax>
{
    protected override string Indent_all_items => FeaturesResources.Indent_all_elements;
    protected override string Unwrap_all_items => FeaturesResources.Unwrap_all_elements;
    protected override string Unwrap_list => FeaturesResources.Unwrap_initializer;
    protected override string Wrap_every_item => FeaturesResources.Wrap_initializer;
    protected override string Wrap_long_list => FeaturesResources.Wrap_long_initializer;

    public override bool Supports_UnwrapGroup_WrapFirst_IndentRest => false;
    public override bool Supports_WrapEveryGroup_UnwrapFirst => false;
    public override bool Supports_WrapLongGroup_UnwrapFirst => false;

    // unreachable as we explicitly declare that we don't support these scenarios.

    protected override string Align_wrapped_items => throw ExceptionUtilities.Unreachable();
    protected override string Indent_wrapped_items => throw ExceptionUtilities.Unreachable();
    protected override string Unwrap_and_indent_all_items => throw ExceptionUtilities.Unreachable();

    protected override bool ShouldMoveOpenBraceToNewLine(SyntaxWrappingOptions options)
        => ((CSharpSyntaxWrappingOptions)options).NewLinesForBracesInObjectCollectionArrayInitializers;

    protected override bool ShouldMoveCloseBraceToNewLine
        => true;

    protected override SyntaxToken FirstToken(InitializerExpressionSyntax listSyntax)
        => listSyntax.OpenBraceToken;

    protected override SyntaxToken LastToken(InitializerExpressionSyntax listSyntax)
        => listSyntax.CloseBraceToken;

    protected override SeparatedSyntaxList<ExpressionSyntax> GetListItems(InitializerExpressionSyntax listSyntax)
        => listSyntax.Expressions;

    protected override InitializerExpressionSyntax? TryGetApplicableList(SyntaxNode node)
        => node as InitializerExpressionSyntax;

    protected override bool PositionIsApplicable(SyntaxNode root, int position, SyntaxNode declaration, bool containsSyntaxError, InitializerExpressionSyntax listSyntax)
    {
        if (containsSyntaxError)
            return false;

        return listSyntax.Span.Contains(position);
    }
}