File: EditorConfigSettings\Analyzers\ViewModel\SeverityViewModel.cs
Web Access
Project: ..\..\..\src\VisualStudio\Core\Def\Microsoft.VisualStudio.LanguageServices_ckcrqypr_wpftmp.csproj (Microsoft.VisualStudio.LanguageServices)
// 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;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Editor.EditorConfigSettings.Data;
 
namespace Microsoft.VisualStudio.LanguageServices.EditorConfigSettings.Analyzers.ViewModel
{
    internal class SeverityViewModel
    {
        private static readonly string[] s_severities = new[]
        {
            ServicesVSResources.Disabled,
            ServicesVSResources.Suggestion,
            ServicesVSResources.Warning,
            ServicesVSResources.Error
        };
 
        private readonly int _selectedSeverityIndex;
 
        private readonly AnalyzerSetting _setting;
 
        public string[] Severities => s_severities;
 
        private string? _selectedSeverityValue;
 
        public string SelectedSeverityValue
        {
            get
            {
                _selectedSeverityValue ??= Severities[_selectedSeverityIndex];
 
                return _selectedSeverityValue;
            }
            set => _selectedSeverityValue = value;
        }
 
        public bool IsConfigurable { get; private set; }
 
        public string ToolTip { get; private set; }
 
        public static string AutomationName => ServicesVSResources.Severity;
 
        public SeverityViewModel(AnalyzerSetting setting)
        {
            _selectedSeverityIndex = setting.Severity switch
            {
                DiagnosticSeverity.Hidden => 0,
                DiagnosticSeverity.Info => 1,
                DiagnosticSeverity.Warning => 2,
                DiagnosticSeverity.Error => 3,
                _ => throw new InvalidOperationException(),
            };
 
            IsConfigurable = !setting.IsNotConfigurable;
 
            ToolTip = IsConfigurable
                        ? ServicesVSResources.Severity
                        : ServicesVSResources.This_rule_is_not_configurable;
 
            _setting = setting;
        }
 
        public void SelectionChanged(int selectedIndex)
        {
            var severity = selectedIndex switch
            {
                0 => DiagnosticSeverity.Hidden,
                1 => DiagnosticSeverity.Info,
                2 => DiagnosticSeverity.Warning,
                3 => DiagnosticSeverity.Error,
                _ => throw new InvalidOperationException(),
            };
 
            if (_setting.Severity != severity)
            {
                _setting.ChangeSeverity(severity);
            }
        }
    }
}