From 7c4b65bd66bfafc9e6390769f28adf3a86c3db0a Mon Sep 17 00:00:00 2001 From: tmat Date: Thu, 12 Jan 2023 12:39:33 -0800 Subject: [PATCH] Fix reading VB editor options from ISettingsManager We regressed a few VB editor options in 17.4 (PR: https://github.com/dotnet/roslyn/pull/62759) when we switched reading these options from IVsTextManagerEvents4 to ISettingsManager API. - formatting: "Use Tabs", "Indent Size", "Tab Size". "Smart Indent", - statement completion: "Auto list members", "Hide advanced members", "Parameter information", - settings: "Navigation bar" We don't read their values for VS settings correctly for VB because we use language name "VisualBasic" while the editor uses "Basic" in the option storage name. This does not affect other languages (C#, F#). --- .../Core/Options/NavigationBarViewOptionsStorage.cs | 2 +- .../Core/Options/SignatureHelpViewOptionsStorage.cs | 2 +- .../Features/Options/CompletionOptionsStorage.cs | 4 ++-- .../Compiler/Core/Formatting/FormattingOptions2.cs | 8 ++++---- .../Core/Options/ClientSettingsStorageLocation.cs | 10 +++++++--- .../Core/Options/LocalClientSettingsStorageLocation.cs | 2 +- .../Core/Options/RoamingProfileStorageLocation.cs | 4 ++-- 7 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/EditorFeatures/Core/Options/NavigationBarViewOptionsStorage.cs b/src/EditorFeatures/Core/Options/NavigationBarViewOptionsStorage.cs index 24d9f3fc65c87..e571de28b422b 100644 --- a/src/EditorFeatures/Core/Options/NavigationBarViewOptionsStorage.cs +++ b/src/EditorFeatures/Core/Options/NavigationBarViewOptionsStorage.cs @@ -11,5 +11,5 @@ internal sealed class NavigationBarViewOptionsStorage private const string FeatureName = "NavigationBarOptions"; public static readonly PerLanguageOption2 ShowNavigationBar = new( - FeatureName, "ShowNavigationBar", defaultValue: true, new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Dropdown Bar")); + FeatureName, "ShowNavigationBar", defaultValue: true, new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Dropdown Bar", useEditorLanguageName: true)); } diff --git a/src/EditorFeatures/Core/Options/SignatureHelpViewOptionsStorage.cs b/src/EditorFeatures/Core/Options/SignatureHelpViewOptionsStorage.cs index b887e3fbdbaf3..d14eb540f4d38 100644 --- a/src/EditorFeatures/Core/Options/SignatureHelpViewOptionsStorage.cs +++ b/src/EditorFeatures/Core/Options/SignatureHelpViewOptionsStorage.cs @@ -11,5 +11,5 @@ internal sealed class SignatureHelpViewOptionsStorage private const string FeatureName = "SignatureHelpOptions"; public static readonly PerLanguageOption2 ShowSignatureHelp = new( - FeatureName, "ShowSignatureHelp", defaultValue: true, new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Auto List Params")); + FeatureName, "ShowSignatureHelp", defaultValue: true, new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Auto List Params", useEditorLanguageName: true)); } diff --git a/src/Features/LanguageServer/Protocol/Features/Options/CompletionOptionsStorage.cs b/src/Features/LanguageServer/Protocol/Features/Options/CompletionOptionsStorage.cs index e12ebce56e77b..21dd403597c59 100644 --- a/src/Features/LanguageServer/Protocol/Features/Options/CompletionOptionsStorage.cs +++ b/src/Features/LanguageServer/Protocol/Features/Options/CompletionOptionsStorage.cs @@ -49,11 +49,11 @@ public static CompletionOptions GetCompletionOptions(this IGlobalOptionService o public static readonly PerLanguageOption2 HideAdvancedMembers = new( "CompletionOptions", "HideAdvancedMembers", CompletionOptions.Default.HideAdvancedMembers, - new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Hide Advanced Auto List Members")); + new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Hide Advanced Auto List Members", useEditorLanguageName: true)); public static readonly PerLanguageOption2 TriggerOnTyping = new( "CompletionOptions", "TriggerOnTyping", CompletionOptions.Default.TriggerOnTyping, - new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Auto List Members")); + new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Auto List Members", useEditorLanguageName: true)); public static readonly PerLanguageOption2 TriggerOnTypingLetters = new(nameof(CompletionOptions), nameof(TriggerOnTypingLetters), CompletionOptions.Default.TriggerOnTypingLetters, storageLocation: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.TriggerOnTypingLetters")); diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Formatting/FormattingOptions2.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Formatting/FormattingOptions2.cs index 9e188625b5605..ee72b464261a9 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Formatting/FormattingOptions2.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Formatting/FormattingOptions2.cs @@ -41,19 +41,19 @@ public Provider() new(FeatureName, FormattingOptionGroups.IndentationAndSpacing, nameof(UseTabs), LineFormattingOptions.Default.UseTabs, storageLocations: ImmutableArray.Create( new EditorConfigStorageLocation("indent_style", s => s == "tab", isSet => isSet ? "tab" : "space"), - new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Insert Tabs"))); + new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Insert Tabs", useEditorLanguageName: true))); public static PerLanguageOption2 TabSize = new(FeatureName, FormattingOptionGroups.IndentationAndSpacing, nameof(TabSize), LineFormattingOptions.Default.TabSize, storageLocations: ImmutableArray.Create( EditorConfigStorageLocation.ForInt32Option("tab_width"), - new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Tab Size"))); + new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Tab Size", useEditorLanguageName: true))); public static PerLanguageOption2 IndentationSize = new(FeatureName, FormattingOptionGroups.IndentationAndSpacing, nameof(IndentationSize), LineFormattingOptions.Default.IndentationSize, storageLocations: ImmutableArray.Create( EditorConfigStorageLocation.ForInt32Option("indent_size"), - new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Indent Size"))); + new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Indent Size", useEditorLanguageName: true))); public static PerLanguageOption2 NewLine = new(FeatureName, FormattingOptionGroups.NewLine, nameof(NewLine), LineFormattingOptions.Default.NewLine, @@ -80,7 +80,7 @@ public Provider() public static PerLanguageOption2 SmartIndent { get; } = new(FeatureName, FormattingOptionGroups.IndentationAndSpacing, nameof(SmartIndent), defaultValue: IndentationOptions.DefaultIndentStyle, - new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Indent Style")); + new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Indent Style", useEditorLanguageName: true)); #if !CODE_STYLE internal static readonly ImmutableArray Options = ImmutableArray.Create( diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/ClientSettingsStorageLocation.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/ClientSettingsStorageLocation.cs index 3d12ba03c3427..208785f37caed 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/ClientSettingsStorageLocation.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/ClientSettingsStorageLocation.cs @@ -17,9 +17,13 @@ namespace Microsoft.CodeAnalysis.Options; internal abstract class ClientSettingsStorageLocation : OptionStorageLocation2 { private readonly Func _keyNameFromLanguageName; + private readonly bool _useEditorLanguageName; - public ClientSettingsStorageLocation(string keyName) - => _keyNameFromLanguageName = _ => keyName; + public ClientSettingsStorageLocation(string keyName, bool useEditorLanguageName) + { + _keyNameFromLanguageName = _ => keyName; + _useEditorLanguageName = useEditorLanguageName; + } /// /// Creates a that has different key names for different languages. @@ -39,7 +43,7 @@ public string GetKeyNameForLanguage(string? languageName) keyName = keyName.Replace("%LANGUAGE%", languageName switch { LanguageNames.CSharp => "CSharp", - LanguageNames.VisualBasic => "VisualBasic", + LanguageNames.VisualBasic => _useEditorLanguageName ? "Basic" : "VisualBasic", _ => languageName // handles F#, TypeScript and Xaml }); } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/LocalClientSettingsStorageLocation.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/LocalClientSettingsStorageLocation.cs index d4cf826b9c501..bee5aa2890c20 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/LocalClientSettingsStorageLocation.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/LocalClientSettingsStorageLocation.cs @@ -20,7 +20,7 @@ internal sealed class LocalClientSettingsStorageLocation : ClientSettingsStorage public override bool IsMachineLocal => true; public LocalClientSettingsStorageLocation(string keyName) - : base(keyName) + : base(keyName, useEditorLanguageName: false) { } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/RoamingProfileStorageLocation.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/RoamingProfileStorageLocation.cs index ec382f18d23df..a36e674923fd4 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/RoamingProfileStorageLocation.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Options/RoamingProfileStorageLocation.cs @@ -13,8 +13,8 @@ internal sealed class RoamingProfileStorageLocation : ClientSettingsStorageLocat { public override bool IsMachineLocal => false; - public RoamingProfileStorageLocation(string keyName) - : base(keyName) + public RoamingProfileStorageLocation(string keyName, bool useEditorLanguageName = false) + : base(keyName, useEditorLanguageName) { }