/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/VisualStudio/Core/Def/PreviewPane/PreviewPaneService.cs
137 строк
5 KB
Cyrus Najmabadi
Make sealed
26 мар 2025, 22:21
26 мар 2025, 22:21
d99b771
Код
Авторство
О чём код?
// 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. #nullable disable using System; using System.Collections.Generic; using System.Composition; using System.Globalization; using System.Windows.Controls; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CodeStyle; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.Editor.Host; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.VisualStudio.Imaging; using Microsoft.VisualStudio.Imaging.Interop; using Microsoft.VisualStudio.Shell; using IVsUIShell = Microsoft.VisualStudio.Shell.Interop.IVsUIShell; using SVsUIShell = Microsoft.VisualStudio.Shell.Interop.SVsUIShell; namespace Microsoft.VisualStudio.LanguageServices.Implementation.PreviewPane; [ExportWorkspaceServiceFactory(typeof(IPreviewPaneService), ServiceLayer.Host), Shared] internal sealed class PreviewPaneService : IPreviewPaneService, IWorkspaceServiceFactory { private readonly IVsUIShell _uiShell; [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] public PreviewPaneService(SVsServiceProvider serviceProvider) { _uiShell = serviceProvider.GetService(typeof(SVsUIShell)) as IVsUIShell; } IWorkspaceService IWorkspaceServiceFactory.CreateService(HostWorkspaceServices workspaceServices) => this; private static Image GetSeverityIconForDiagnostic(DiagnosticData diagnostic) { ImageMoniker? moniker = null; switch (diagnostic.Severity) { case DiagnosticSeverity.Error: moniker = KnownMonikers.StatusError; break; case DiagnosticSeverity.Warning: moniker = KnownMonikers.StatusWarning; break; case DiagnosticSeverity.Info: moniker = KnownMonikers.StatusInformation; break; case DiagnosticSeverity.Hidden: moniker = KnownMonikers.StatusHidden; break; } if (moniker.HasValue) { return new CrispImage { Moniker = moniker.Value }; } return null; } object IPreviewPaneService.GetPreviewPane(DiagnosticData data, IReadOnlyList<object> previewContent) { var title = data?.Message; if (string.IsNullOrWhiteSpace(title)) { if (previewContent == null) { // Bail out in cases where there is nothing to put in the header section // of the preview pane and no preview content (i.e. no diff view) either. return null; } return new PreviewPane( severityIcon: null, id: null, title: null, description: null, helpLink: null, helpLinkToolTipText: null, previewContent: previewContent, logIdVerbatimInTelemetry: false, uiShell: _uiShell); } Guid optionPageGuid = default; if (data.Properties.TryGetValue("OptionName", out var optionName)) { data.Properties.TryGetValue("OptionLanguage", out var optionLanguage); optionPageGuid = GetOptionPageGuidForOptionName(optionName, optionLanguage); } var helpLinkUri = data.GetValidHelpLinkUri(); return new PreviewPane( severityIcon: GetSeverityIconForDiagnostic(data), id: data.Id, title: title, description: data.Description.ToString(CultureInfo.CurrentUICulture), helpLink: helpLinkUri, helpLinkToolTipText: (helpLinkUri != null) ? string.Format(EditorFeaturesResources.Get_help_for_0, data.Id) : null, previewContent: previewContent, logIdVerbatimInTelemetry: data.CustomTags.Contains(WellKnownDiagnosticTags.Telemetry), uiShell: _uiShell, optionPageGuid: optionPageGuid); } private static Guid GetOptionPageGuidForOptionName(string optionName, string optionLanguage) { if (optionName == nameof(NamingStyleOptions.NamingPreferences)) { if (optionLanguage == LanguageNames.CSharp) { return Guid.Parse(Guids.CSharpOptionPageNamingStyleIdString); } else if (optionLanguage == LanguageNames.VisualBasic) { return Guid.Parse(Guids.VisualBasicOptionPageNamingStyleIdString); } } else if (optionName == nameof(CodeStyleOptions2.PreferIntrinsicPredefinedTypeKeywordInDeclaration)) { if (optionLanguage == LanguageNames.CSharp) { return Guid.Parse(Guids.CSharpOptionPageCodeStyleIdString); } else if (optionLanguage == LanguageNames.VisualBasic) { return Guid.Parse(Guids.VisualBasicOptionPageVBSpecificIdString); } } return default; } }