﻿// 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 System;

namespace Microsoft.CodeAnalysis.Formatting.Rules
{
    /// <summary>
    /// Options for <see cref="SuppressOperation"/>.
    ///
    /// <list type="bullet">
    ///   <item>
    ///     <term><see cref="NoWrappingIfOnSingleLine"/></term>
    ///     <description>no wrapping if given tokens are on same line</description>
    ///   </item>
    ///   <item>
    ///     <term><see cref="NoWrapping"/></term>
    ///     <description>no wrapping regardless of relative positions of two tokens</description>
    ///   </item>
    ///   <item>
    ///     <term><see cref="NoSpacing"/></term>
    ///     <description>no spacing regardless of relative positions of two tokens</description>
    ///   </item>
    /// </list>
    /// </summary>
    [Flags]
    internal enum SuppressOption
    {
        None = 0x0,

        NoWrappingIfOnSingleLine = 0x1,
        NoWrappingIfOnMultipleLine = 0x2,
        NoWrapping = NoWrappingIfOnSingleLine | NoWrappingIfOnMultipleLine,
        NoSpacingIfOnSingleLine = 0x4,
        NoSpacingIfOnMultipleLine = 0x8,
        NoSpacing = NoSpacingIfOnSingleLine | NoSpacingIfOnMultipleLine,

        // a suppression operation containing elastic trivia in its start/end token will be ignored
        // since they can't be used to determine line alignment between two tokens.
        // this option will make engine to accept the operation even if start/end token has elastic trivia
        IgnoreElasticWrapping = 0x10,

        /// <summary>
        /// Completely disable formatting within a span.
        /// </summary>
        DisableFormatting = 0x20,
    }
}
