﻿// 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.

namespace Microsoft.CodeAnalysis
{
    /// <summary>
    /// Describes how severe a diagnostic is.
    /// </summary>
    public enum DiagnosticSeverity
    {
        /// <summary>
        /// Something that is an issue, as determined by some authority,
        /// but is not surfaced through normal means.
        /// There may be different mechanisms that act on these issues.
        /// </summary>
        Hidden = 0,

        /// <summary>
        /// Information that does not indicate a problem (i.e. not prescriptive).
        /// </summary>
        Info = 1,

        /// <summary>
        /// Something suspicious but allowed.
        /// </summary>
        Warning = 2,

        /// <summary>
        /// Something not allowed by the rules of the language or other authority.
        /// </summary>
        Error = 3,
    }

    /// <summary>
    /// Values for severity that are used internally by the compiler but are not exposed.
    /// </summary>
    internal static class InternalDiagnosticSeverity
    {
        /// <summary>
        /// An unknown severity diagnostic is something whose severity has not yet been determined.
        /// </summary>
        public const DiagnosticSeverity Unknown = (DiagnosticSeverity)InternalErrorCode.Unknown;

        /// <summary>
        /// If an unknown diagnostic is resolved and found to be unnecessary then it is 
        /// treated as a "Void" diagnostic
        /// </summary>
        public const DiagnosticSeverity Void = (DiagnosticSeverity)InternalErrorCode.Void;
    }

    /// <summary>
    /// Values for ErrorCode/ERRID that are used internally by the compiler but are not exposed.
    /// </summary>
    internal static class InternalErrorCode
    {
        /// <summary>
        /// The code has yet to be determined.
        /// </summary>
        public const int Unknown = -1;

        /// <summary>
        /// The code was lazily determined and does not need to be reported.
        /// </summary>
        public const int Void = -2;
    }
}
