/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/VisualStudio/CSharp/Impl/ChangeSignature/CSharpChangeSignatureViewModelFactoryService.cs
58 строк
3 KB
Cyrus Najmabadi
Use file scoped namespaces. (#77854)
27 мар 2025, 09:55
Не верифицирован
27 мар 2025, 09:55
98d41b8
Код
Авторство
О чём код?
// 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 Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature; using static Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature.ChangeSignatureDialogViewModel; namespace Microsoft.VisualStudio.LanguageServices.CSharp.ChangeSignature; [ExportLanguageService(typeof(IChangeSignatureViewModelFactoryService), LanguageNames.CSharp), Shared] internal sealed class CSharpChangeSignatureViewModelFactoryService : ChangeSignatureViewModelFactoryService { private static readonly CSharpParseOptions s_langVersionLatestParseOptions = new(LanguageVersion.Preview); [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] public CSharpChangeSignatureViewModelFactoryService() { } public override SymbolDisplayPart[] GeneratePreviewDisplayParts(AddedParameterViewModel addedParameterViewModel) { var parts = new List<SymbolDisplayPart>(); // TO-DO: We need to add proper colorization for added parameters: // https://github.com/dotnet/roslyn/issues/47986 var isPredefinedType = SyntaxFactory.ParseExpression(addedParameterViewModel.Type).Kind() == SyntaxKind.PredefinedType; var typePartKind = isPredefinedType ? SymbolDisplayPartKind.Keyword : SymbolDisplayPartKind.ClassName; parts.Add(new SymbolDisplayPart(typePartKind, null, addedParameterViewModel.Type)); parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Space, null, " ")); parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.ParameterName, null, addedParameterViewModel.ParameterName)); if (!string.IsNullOrWhiteSpace(addedParameterViewModel.Default)) { parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Space, null, " ")); parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Punctuation, null, "=")); parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Space, null, " ")); parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Text, null, addedParameterViewModel.Default)); } return [.. parts]; } // Use LangVersion Preview to ensure that all types parse correctly. If the user types in a type only available // in a preview version, they'll get a diagnostic after everything is generated public override bool IsTypeNameValid(string typeName) => !SyntaxFactory.ParseTypeName(typeName, options: s_langVersionLatestParseOptions).ContainsDiagnostics; public override SyntaxNode GetTypeNode(string typeName) => SyntaxFactory.ParseTypeName(typeName); }