diff --git a/src/VisualStudio/CSharp/Impl/PackageRegistration.pkgdef b/src/VisualStudio/CSharp/Impl/PackageRegistration.pkgdef
index ee45c4813cee4..852593e3f17a3 100644
--- a/src/VisualStudio/CSharp/Impl/PackageRegistration.pkgdef
+++ b/src/VisualStudio/CSharp/Impl/PackageRegistration.pkgdef
@@ -198,4 +198,4 @@
[$RootKey$\SettingsManifests\{13c3bbb4-f18f-4111-9f54-a0fb010d9194}]
@="Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpPackage"
"ManifestPath"="$PackageFolder$\UnifiedSettings\csharpSettings.registration.json"
-"CacheTag"=qword:08DC1824DFE0117B
+"CacheTag"=qword:CE76341698AB8CD3
diff --git a/src/VisualStudio/CSharp/Test/Microsoft.VisualStudio.LanguageServices.CSharp.UnitTests.csproj b/src/VisualStudio/CSharp/Test/Microsoft.VisualStudio.LanguageServices.CSharp.UnitTests.csproj
index a1822e09b908e..b42bdacc847c3 100644
--- a/src/VisualStudio/CSharp/Test/Microsoft.VisualStudio.LanguageServices.CSharp.UnitTests.csproj
+++ b/src/VisualStudio/CSharp/Test/Microsoft.VisualStudio.LanguageServices.CSharp.UnitTests.csproj
@@ -82,5 +82,6 @@
+
\ No newline at end of file
diff --git a/src/VisualStudio/CSharp/Test/UnifiedSettings/CSharpUnifiedSettingsTests.cs b/src/VisualStudio/CSharp/Test/UnifiedSettings/CSharpUnifiedSettingsTests.cs
index 4258c8a03cd5b..cd9d0faf9bdc3 100644
--- a/src/VisualStudio/CSharp/Test/UnifiedSettings/CSharpUnifiedSettingsTests.cs
+++ b/src/VisualStudio/CSharp/Test/UnifiedSettings/CSharpUnifiedSettingsTests.cs
@@ -102,7 +102,7 @@ internal override object GetOptionsDefaultValue(IOption2 option)
[Fact]
public async Task IntelliSensePageTests()
{
- var registrationFileStream = typeof(CSharpUnifiedSettingsTests).GetTypeInfo().Assembly.GetManifestResourceStream("Roslyn.VisualStudio.CSharp.UnitTests.csharpSettings.registration.json");
+ using var registrationFileStream = typeof(CSharpUnifiedSettingsTests).GetTypeInfo().Assembly.GetManifestResourceStream("Roslyn.VisualStudio.CSharp.UnitTests.csharpSettings.registration.json");
using var reader = new StreamReader(registrationFileStream);
var registrationFile = await reader.ReadToEndAsync().ConfigureAwait(false);
var registrationJsonObject = JObject.Parse(registrationFile, new JsonLoadSettings() { CommentHandling = CommentHandling.Ignore });
@@ -110,7 +110,10 @@ public async Task IntelliSensePageTests()
Assert.Equal("C#", actual: categoriesTitle.ToString());
var optionPageId = registrationJsonObject.SelectToken("$.categories['textEditor.csharp.intellisense'].legacyOptionPageId");
Assert.Equal(Guids.CSharpOptionPageIntelliSenseIdString, optionPageId!.ToString());
- TestUnifiedSettingsCategory(registrationJsonObject, categoryBasePath: "textEditor.csharp.intellisense", languageName: LanguageNames.CSharp);
+ using var pkgdefFileStream = typeof(CSharpUnifiedSettingsTests).GetTypeInfo().Assembly.GetManifestResourceStream("Roslyn.VisualStudio.CSharp.UnitTests.PackageRegistration.pkgdef");
+ using var pkgdefReader = new StreamReader(pkgdefFileStream);
+ var pkgdefFile = await pkgdefReader.ReadToEndAsync().ConfigureAwait(false);
+ TestUnifiedSettingsCategory(registrationJsonObject, categoryBasePath: "textEditor.csharp.intellisense", languageName: LanguageNames.CSharp, pkgdefFile);
}
}
}
diff --git a/src/VisualStudio/Core/Test/Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj b/src/VisualStudio/Core/Test/Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj
index 7e8b130d74ac7..15fc95f510bd7 100644
--- a/src/VisualStudio/Core/Test/Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj
+++ b/src/VisualStudio/Core/Test/Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj
@@ -62,4 +62,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/VisualStudio/Core/Test/UnifiedSettings/VisualBasicUnifiedSettingsTests.vb b/src/VisualStudio/Core/Test/UnifiedSettings/VisualBasicUnifiedSettingsTests.vb
new file mode 100644
index 0000000000000..7f42c3704baf2
--- /dev/null
+++ b/src/VisualStudio/Core/Test/UnifiedSettings/VisualBasicUnifiedSettingsTests.vb
@@ -0,0 +1,97 @@
+' 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.
+
+Imports System.Collections.Immutable
+Imports System.IO
+Imports System.Reflection
+Imports Microsoft.CodeAnalysis
+Imports Microsoft.CodeAnalysis.Completion
+Imports Microsoft.CodeAnalysis.Options
+Imports Microsoft.VisualStudio.LanguageServices
+Imports Microsoft.VisualStudio.LanguageServices.UnitTests.UnifiedSettings
+Imports Newtonsoft.Json.Linq
+
+Namespace Roslyn.VisualStudio.VisualBasic.UnitTests.UnifiedSettings
+ Public Class VisualBasicUnifiedSettingsTests
+ Inherits UnifiedSettingsTests
+
+ Friend Overrides ReadOnly Property OnboardedOptions As ImmutableArray(Of IOption2)
+ Get
+ Return ImmutableArray.Create(Of IOption2)(
+ CompletionOptionsStorage.TriggerOnTypingLetters,
+ CompletionOptionsStorage.TriggerOnDeletion,
+ CompletionViewOptionsStorage.HighlightMatchingPortionsOfCompletionListItems,
+ CompletionViewOptionsStorage.ShowCompletionItemFilters,
+ CompletionOptionsStorage.SnippetsBehavior,
+ CompletionOptionsStorage.EnterKeyBehavior,
+ CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces,
+ CompletionViewOptionsStorage.EnableArgumentCompletionSnippets
+ )
+ End Get
+ End Property
+
+ Friend Overrides Function GetEnumOptionValues([option] As IOption2) As Object()
+ Dim allValues = [Enum].GetValues([option].Type).Cast(Of Object)
+ If [option].Equals(CompletionOptionsStorage.SnippetsBehavior) Then
+ 'SnippetsRule.Default is used as a stub value, overridden per language at runtime.
+ ' It is not shown in the option page
+ Return allValues.Where(Function(value) Not value.Equals(SnippetsRule.Default)).ToArray()
+ ElseIf [option].Equals(CompletionOptionsStorage.EnterKeyBehavior) Then
+ ' EnterKeyRule.Default is used as a stub value, overridden per language at runtime.
+ ' It Is Not shown in the option page
+ Return allValues.Where(Function(value) Not value.Equals(EnterKeyRule.Default)).ToArray()
+ End If
+
+ Return MyBase.GetEnumOptionValues([option])
+ End Function
+
+ Friend Overrides Function GetOptionsDefaultValue([option] As IOption2) As Object
+ ' The default values of some options are set at runtime. option.defaultValue is just a dummy value in this case.
+ ' However, in unified settings we always set the correct value in registration.json.
+ If [option].Equals(CompletionOptionsStorage.SnippetsBehavior) Then
+ ' CompletionOptionsStorage.SnippetsBehavior's default value is SnippetsRule.Default.
+ ' It's overridden differently per-language at runtime.
+ Return SnippetsRule.IncludeAfterTypingIdentifierQuestionTab
+ ElseIf [option].Equals(CompletionOptionsStorage.EnterKeyBehavior) Then
+ ' CompletionOptionsStorage.EnterKeyBehavior's default value is EnterKeyBehavior.Default.
+ ' It's overridden differently per-language at runtime.
+ Return EnterKeyRule.Always
+ ElseIf [option].Equals(CompletionOptionsStorage.TriggerOnDeletion) Then
+ ' CompletionOptionsStorage.TriggerOnDeletion's default value is null.
+ ' It's enabled by default for Visual Basic
+ Return True
+ ElseIf [option].Equals(CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces) Then
+ ' CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces's default value is null
+ ' It's enabled by default for Visual Basic
+ Return True
+ ElseIf [option].Equals(CompletionViewOptionsStorage.EnableArgumentCompletionSnippets) Then
+ ' CompletionViewOptionsStorage.EnableArgumentCompletionSnippets' default value is null
+ ' It's disabled by default for Visual Basic
+ Return False
+ End If
+
+ Return MyBase.GetOptionsDefaultValue([option])
+ End Function
+
+
+ Public Async Function IntelliSensePageTests() As Task
+ Using registrationFileStream = GetType(VisualBasicUnifiedSettingsTests).GetTypeInfo().Assembly.GetManifestResourceStream("visualBasicSettings.registration.json")
+ Using pkgDefFileStream = GetType(VisualBasicUnifiedSettingsTests).GetTypeInfo().Assembly.GetManifestResourceStream("PackageRegistration.pkgdef")
+ Using pkgDefFileReader = New StreamReader(pkgDefFileStream)
+ Using reader = New StreamReader(registrationFileStream)
+ Dim registrationFile = Await reader.ReadToEndAsync().ConfigureAwait(False)
+ Dim pkgDefFile = Await pkgDefFileReader.ReadToEndAsync().ConfigureAwait(False)
+ Dim registrationJsonObject = JObject.Parse(registrationFile, New JsonLoadSettings())
+ Dim categoriesTitle = registrationJsonObject.SelectToken("$.categories['textEditor.basic'].title")
+ Assert.Equal("Visual Basic", categoriesTitle)
+ Dim optionPageId = registrationJsonObject.SelectToken("$.categories['textEditor.basic.intellisense'].legacyOptionPageId")
+ Assert.Equal(Guids.VisualBasicOptionPageIntelliSenseIdString, optionPageId.ToString())
+ TestUnifiedSettingsCategory(registrationJsonObject, categoryBasePath:="textEditor.basic.intellisense", languageName:=LanguageNames.VisualBasic, pkgDefFile)
+ End Using
+ End Using
+ End Using
+ End Using
+ End Function
+ End Class
+End Namespace
diff --git a/src/VisualStudio/TestUtilities2/UnifiedSettings/UnifiedSettingsTests.vb b/src/VisualStudio/TestUtilities2/UnifiedSettings/UnifiedSettingsTests.vb
index 48abfad77a558..ecf8ba700f9bf 100644
--- a/src/VisualStudio/TestUtilities2/UnifiedSettings/UnifiedSettingsTests.vb
+++ b/src/VisualStudio/TestUtilities2/UnifiedSettings/UnifiedSettingsTests.vb
@@ -3,6 +3,9 @@
' See the LICENSE file in the project root for more information.
Imports System.Collections.Immutable
+Imports System.IO.Hashing
+Imports System.Text
+Imports System.Text.RegularExpressions
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.VisualStudio.LanguageServices.Options
@@ -28,7 +31,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.UnifiedSettings
Return [Enum].GetValues(type).Cast(Of Object).AsArray()
End Function
- Protected Sub TestUnifiedSettingsCategory(registrationJsonObject As JObject, categoryBasePath As String, languageName As String)
+ Protected Sub TestUnifiedSettingsCategory(registrationJsonObject As JObject, categoryBasePath As String, languageName As String, pkdDefFile As String)
Dim actualAllSettings = registrationJsonObject.SelectToken($"$.properties").Children.OfType(Of JProperty).
Where(Function(setting) setting.Name.StartsWith(categoryBasePath)).
Select(Function(setting) setting.Name).
@@ -62,6 +65,17 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.UnifiedSettings
Throw ExceptionUtilities.UnexpectedValue(optionName)
End If
Next
+
+ Dim registrationFileBytes = ASCIIEncoding.ASCII.GetBytes(registrationJsonObject.ToString())
+ Dim hash = XxHash128.Hash(registrationFileBytes)
+ Dim tagBytes = hash.Take(8).ToArray()
+ Dim expectedCacheTagValue = BitConverter.ToInt64(tagBytes, 0).ToString("X16")
+
+ Dim regexExp = New Regex("""CacheTag""=qword:\w{16}")
+ Dim match = regexExp.Match(pkdDefFile, 0).Value
+ Dim actual = match.Substring(match.Length - 16)
+ ' Please change the CacheTag value in pkddef if you modify the unified settings regirstration file
+ Assert.Equal(expectedCacheTagValue, actual)
End Sub
Private Shared Sub VerifySettings(registrationJsonObject As JObject, unifiedSettingPath As String, [option] As IOption2, languageName As String)
diff --git a/src/VisualStudio/VisualBasic/Impl/BasicVSResources.resx b/src/VisualStudio/VisualBasic/Impl/BasicVSResources.resx
index feb1994aec76a..b0aabb98df28e 100644
--- a/src/VisualStudio/VisualBasic/Impl/BasicVSResources.resx
+++ b/src/VisualStudio/VisualBasic/Impl/BasicVSResources.resx
@@ -244,15 +244,6 @@
_Never add new line on enter
-
- Always include snippets
-
-
- Include snippets when ?-Tab is typed after an identifier
-
-
- Never include snippets
-
Snippets behavior
diff --git a/src/VisualStudio/VisualBasic/Impl/LanguageService/VisualBasicPackage.vb b/src/VisualStudio/VisualBasic/Impl/LanguageService/VisualBasicPackage.vb
index 046f984628ff0..f03d6a481434d 100644
--- a/src/VisualStudio/VisualBasic/Impl/LanguageService/VisualBasicPackage.vb
+++ b/src/VisualStudio/VisualBasic/Impl/LanguageService/VisualBasicPackage.vb
@@ -38,6 +38,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic
+
Friend NotInheritable Class VisualBasicPackage
Inherits AbstractPackage(Of VisualBasicPackage, VisualBasicLanguageService)
diff --git a/src/VisualStudio/VisualBasic/Impl/Microsoft.VisualStudio.LanguageServices.VisualBasic.vbproj b/src/VisualStudio/VisualBasic/Impl/Microsoft.VisualStudio.LanguageServices.VisualBasic.vbproj
index b9cc5973ed78e..b94764b606b87 100644
--- a/src/VisualStudio/VisualBasic/Impl/Microsoft.VisualStudio.LanguageServices.VisualBasic.vbproj
+++ b/src/VisualStudio/VisualBasic/Impl/Microsoft.VisualStudio.LanguageServices.VisualBasic.vbproj
@@ -14,6 +14,12 @@
truefalse
+
+
+ PreserveNewest
+ true
+
+
@@ -44,12 +50,12 @@
-
+
-
+ trueVSPackageDesigner
diff --git a/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageControl.xaml.vb b/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageControl.xaml.vb
index 26f9bfa584311..7a28520e808f1 100644
--- a/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageControl.xaml.vb
+++ b/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageControl.xaml.vb
@@ -42,8 +42,8 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Options
End Sub
Private Sub SetEnterKeyDefaultBehavior()
- Dim snippetValue = Me.OptionStore.GetOption(CompletionOptionsStorage.EnterKeyBehavior, LanguageNames.VisualBasic)
- If snippetValue = SnippetsRule.Default Then
+ Dim enterKeyRule = Me.OptionStore.GetOption(CompletionOptionsStorage.EnterKeyBehavior, LanguageNames.VisualBasic)
+ If enterKeyRule = EnterKeyRule.Default Then
Always_add_new_line_on_enter.IsChecked = True
End If
End Sub
diff --git a/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageStrings.vb b/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageStrings.vb
index e3b00fcebfd41..39b3bf040f610 100644
--- a/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageStrings.vb
+++ b/src/VisualStudio/VisualBasic/Impl/Options/IntelliSenseOptionPageStrings.vb
@@ -35,13 +35,13 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Options
BasicVSResources.Snippets_behavior
Public ReadOnly Property Option_Never_include_snippets As String =
- BasicVSResources.Never_include_snippets
+ VSPackage.Never_include_snippets
Public ReadOnly Property Option_Always_include_snippets As String =
- BasicVSResources.Always_include_snippets
+ VSPackage.Always_include_snippets
Public ReadOnly Property Option_Include_snippets_when_question_Tab_is_typed_after_an_identifier As String =
- BasicVSResources.Include_snippets_when_Tab_is_typed_after_an_identifier
+ VSPackage.Include_snippets_when_Tab_is_typed_after_an_identifier
Public ReadOnly Property Option_Show_items_from_unimported_namespaces As String =
BasicVSResources.Show_items_from_unimported_namespaces
diff --git a/src/VisualStudio/VisualBasic/Impl/PackageRegistration.pkgdef b/src/VisualStudio/VisualBasic/Impl/PackageRegistration.pkgdef
index bfb3a04c6856c..088ecdbfeb727 100644
--- a/src/VisualStudio/VisualBasic/Impl/PackageRegistration.pkgdef
+++ b/src/VisualStudio/VisualBasic/Impl/PackageRegistration.pkgdef
@@ -188,4 +188,11 @@
"Indent Style"=dword:00000002
[$RootKey$\VB Editor\Roslyn]
-"DisplayLineSeparators"=dword:00000001
\ No newline at end of file
+"DisplayLineSeparators"=dword:00000001
+
+// CacheTag value should be changed when registration file changes
+// See https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/39345/Manifest-Build-Deployment-and-Setup-Authoring-In-Depth?anchor=example-pkgdef-key for more infomation
+[$RootKey$\SettingsManifests\{574fc912-f74f-4b4e-92c3-f695c208a2bb}]
+@="Microsoft.VisualStudio.LanguageServices.VisualBasic.VisualBasicPackage"
+"ManifestPath"="$PackageFolder$\UnifiedSettings\visualBasicSettings.registration.json"
+"CacheTag"=qword:5DE8496A8900B809
diff --git a/src/VisualStudio/VisualBasic/Impl/UnifiedSettings/visualBasicSettings.registration.json b/src/VisualStudio/VisualBasic/Impl/UnifiedSettings/visualBasicSettings.registration.json
new file mode 100644
index 0000000000000..c744cc9dc0357
--- /dev/null
+++ b/src/VisualStudio/VisualBasic/Impl/UnifiedSettings/visualBasicSettings.registration.json
@@ -0,0 +1,185 @@
+// NOTE:
+// When this file is changed. Please also update the cache tag under settings entry in src/VisualStudio/VisualBasic/Impl/PackageRegistration.pkgdef
+// Otherwise your change might be ignored.
+// See https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/39345/Manifest-Build-Deployment-and-Setup-Authoring-In-Depth?anchor=example-pkgdef-key for more details
+{
+ "properties": {
+ // CompletionOptionsStorage.TriggerOnTypingLetters
+ "textEditor.basic.intellisense.triggerCompletionOnTypingLetters": {
+ "title": "@Show_completion_list_after_a_character_is_typed;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "boolean",
+ "default": true,
+ "order": 0,
+ "migration": {
+ "pass": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.TriggerOnTypingLetters"
+ }
+ }
+ }
+ },
+ // CompletionOptionsStorage.TriggerOnDeletion
+ "textEditor.basic.intellisense.triggerCompletionOnDeletion": {
+ "title": "@Show_completion_list_after_a_character_is_deleted;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "boolean",
+ "default": true,
+ "order": 1,
+ "migration": {
+ "pass": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.TriggerOnDeletion"
+ }
+ }
+ }
+ },
+ // CompletionViewOptionsStorage.HighlightMatchingPortionsOfCompletionListItems
+ "textEditor.basic.intellisense.highlightMatchingPortionsOfCompletionListItems": {
+ "title": "@Highlight_matching_portions_of_completion_list_items;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "boolean",
+ "default": true,
+ "order": 10,
+ "migration": {
+ "pass": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.HighlightMatchingPortionsOfCompletionListItems"
+ }
+ }
+ }
+ },
+ // CompletionViewOptionsStorage.ShowCompletionItemFilters
+ "textEditor.basic.intellisense.showCompletionItemFilters": {
+ "title": "@Show_completion_item_filters;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "boolean",
+ "default": true,
+ "order": 20,
+ "migration": {
+ "pass": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.ShowCompletionItemFilters"
+ }
+ }
+ }
+ },
+ // CompletionOptionsStorage.SnippetsBehavior
+ "textEditor.basic.intellisense.snippetsBehavior": {
+ "title": "@Snippets_behavior;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "string",
+ "enum": [ "neverInclude", "alwaysInclude", "includeAfterTypingIdentifierQuestionTab" ],
+ "enumItemLabels": [ "@Never_include_snippets;{574fc912-f74f-4b4e-92c3-f695c208a2bb}", "@Always_include_snippets;{574fc912-f74f-4b4e-92c3-f695c208a2bb}", "@Include_snippets_when_Tab_is_typed_after_an_identifier;{574fc912-f74f-4b4e-92c3-f695c208a2bb}" ],
+ "default": "includeAfterTypingIdentifierQuestionTab",
+ "order": 30,
+ "migration": {
+ "enumIntegerToString": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.SnippetsBehavior"
+ },
+ "map": [
+ {
+ "result": "neverInclude",
+ "match": 1
+ },
+ // '0' matches to SnippetsRule.Default. Means the behavior is decided by language.
+ // '3' matches to SnippetsRule.IncludeAfterTypingIdentifierQuestionTab. It's the default behavior for Visual Basic
+ // Put both mapping here, so it's possible for unified setting to load '0' from the storage.
+ // Put '3' in front, so unifed settings would persist '3' to storage when 'includeAfterTypingIdentifierQuestionTab' is selected.
+ {
+ "result": "alwaysInclude",
+ "match": 2
+ },
+ {
+ "result": "includeAfterTypingIdentifierQuestionTab",
+ "match": 3
+ },
+ {
+ "result": "includeAfterTypingIdentifierQuestionTab",
+ "match": 0
+ }
+ ]
+ }
+ }
+ },
+ // CompletionOptionsStorage.EnterKeyBehavior
+ "textEditor.basic.intellisense.returnKeyCompletionBehavior": {
+ "title": "@Enter_key_behavior_colon;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "string",
+ "enum": [ "never", "afterFullyTypedWord", "always" ],
+ "enumItemLabels": [ "@Never_add_new_line_on_enter;{574fc912-f74f-4b4e-92c3-f695c208a2bb}", "@Only_add_new_line_on_enter_after_end_of_fully_typed_word;{574fc912-f74f-4b4e-92c3-f695c208a2bb}", "@Always_add_new_line_on_enter;{574fc912-f74f-4b4e-92c3-f695c208a2bb}" ],
+ "default": "always",
+ "order": 40,
+ "migration": {
+ "enumIntegerToString": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.EnterKeyBehavior"
+ },
+ "map": [
+ // '0' matches to EnterKeyRule.Default. Means the behavior is decided by langauge.
+ // '2' matches to EnterKeyRule.Alwasys. It's the default behavior for Visual Basic
+ // Put both mapping here, so it's possible for unified setting to load '0' from the storage.
+ // Put '2' in front, so unifed settings would persist '2' to storage when 'always' is selected.
+ {
+ "result": "never",
+ "match": 1
+ },
+ {
+ "result": "always",
+ "match": 2
+ },
+ {
+ "result": "always",
+ "match": 0
+ },
+ {
+ "result": "afterFullyTypedWord",
+ "match": 3
+ }
+ ]
+ }
+ }
+ },
+ // CompletionOptionsStorage.ShowItemsFromUnimportedNamespaces
+ "textEditor.basic.intellisense.showCompletionItemsFromUnimportedNamespaces": {
+ "title": "@Show_items_from_unimported_namespaces;..\\Microsoft.VisualStudio.LanguageServices.VisualBasic.dll",
+ "type": "boolean",
+ "default": true,
+ "order": 50,
+ "migration": {
+ "pass": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.ShowItemsFromUnimportedNamespaces"
+ }
+ }
+ }
+ },
+ // CompletionViewOptionsStorage.EnableArgumentCompletionSnippets
+ "textEditor.basic.intellisense.enableArgumentCompletionSnippets": {
+ "title": "@Tab_twice_to_insert_arguments;..\\Microsoft.VisualStudio.LanguageServices.dll",
+ "type": "boolean",
+ "default": false,
+ "order": 60,
+ "migration": {
+ "pass": {
+ "input": {
+ "store": "SettingsManager",
+ "path": "TextEditor.VisualBasic.Specific.EnableArgumentCompletionSnippets"
+ }
+ }
+ }
+ }
+ },
+ "categories": {
+ "textEditor.basic":{
+ "title": "Visual Basic"
+ },
+ "textEditor.basic.intellisense": {
+ "title": "@112;{574fc912-f74f-4b4e-92c3-f695c208a2bb}",
+ "legacyOptionPageId": "04460A3B-1B5F-4402-BC6D-89A4F6F0A8D7"
+ }
+ }
+}
diff --git a/src/VisualStudio/VisualBasic/Impl/VSPackage.resx b/src/VisualStudio/VisualBasic/Impl/VSPackage.resx
index a77f0471bc1f1..00e7dc9bbac3c 100644
--- a/src/VisualStudio/VisualBasic/Impl/VSPackage.resx
+++ b/src/VisualStudio/VisualBasic/Impl/VSPackage.resx
@@ -208,4 +208,22 @@ Use enhanced colors;Editor Color Scheme;Inheritance Margin;Import Directives;Visual Basic Tools
Help > About
+
+ Always add new line on enter
+
+
+ Always include snippets
+
+
+ Include snippets when ?-Tab is typed after an identifier
+
+
+ Never add new line on enter
+
+
+ Never include snippets
+
+
+ Only add new line on enter after end of fully typed word
+
\ No newline at end of file
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.cs.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.cs.xlf
index 84a1def04bec8..a095b351cce37 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.cs.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.cs.xlf
@@ -272,21 +272,6 @@
_Při stisku Enter nikdy nepřidávat nový řádek
-
- Always include snippets
- Vždy zahrnovat fragmenty
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Zahrnovat fragmenty po zadání ?-Tab za identifikátor
-
-
-
- Never include snippets
- Nikdy nezahrnovat fragmenty
-
- Snippets behaviorChování fragmentů
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.de.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.de.xlf
index 25dd17f7e540f..63b9d71ab0553 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.de.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.de.xlf
@@ -272,21 +272,6 @@
_Nie neue Zeile beim Drücken der EINGABETASTE einfügen
-
- Always include snippets
- Schnipsel immer einschließen
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Schnipsel einschließen, wenn ?-TAB nach einem Bezeichner eingegeben wird
-
-
-
- Never include snippets
- Schnipsel nie einschließen
-
- Snippets behaviorSchnipselverhalten
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.es.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.es.xlf
index b9fac78124ec8..ecad7b68a9f27 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.es.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.es.xlf
@@ -272,21 +272,6 @@
_No agregar nunca una nueva línea al presionar Entrar
-
- Always include snippets
- Incluir siempre fragmentos de código
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Incluir fragmentos de código cuando ?-Tab se escriba después de un identificador
-
-
-
- Never include snippets
- No incluir nunca fragmentos de código
-
- Snippets behaviorComportamiento de los fragmentos de código
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.fr.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.fr.xlf
index bc7b5d5411ccb..244dafeaadc9e 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.fr.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.fr.xlf
@@ -272,21 +272,6 @@
_Ne jamais ajouter de nouvelle ligne après Entrée
-
- Always include snippets
- Toujours inclure les extraits de code
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Inclure les extraits de code quand ?-Tab est typé après un identificateur
-
-
-
- Never include snippets
- Ne jamais inclure d'extrait de code
-
- Snippets behaviorComportement des extraits de code
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.it.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.it.xlf
index 2875c1089924e..b8cbfe8759d4c 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.it.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.it.xlf
@@ -272,21 +272,6 @@
_Non aggiungere mai una nuova riga dopo INVIO
-
- Always include snippets
- Includi sempre i frammenti
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Includi i frammenti quando si digita ?+TAB dopo un identificatore
-
-
-
- Never include snippets
- Non includere mai i frammenti
-
- Snippets behaviorComportamento dei frammenti
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ja.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ja.xlf
index 0d5f609496cd6..b12555f31c426 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ja.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ja.xlf
@@ -272,21 +272,6 @@
Enter キーで新しい行を追加しない(_N)
-
- Always include snippets
- 常にスニペットを含める
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- 識別子の後に ? Tab を入力したときにスニペットを含める
-
-
-
- Never include snippets
- スニペットを含めない
-
- Snippets behaviorスニペットの動作
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ko.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ko.xlf
index 44a0191e1b8d8..19878d608dcdf 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ko.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ko.xlf
@@ -272,21 +272,6 @@
<Enter> 키를 누르면 새 줄 추가 안 함(_N)
-
- Always include snippets
- 코드 조각 항상 포함
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- 식별자 뒤에 ?-Tab을 입력하면 코드 조각 포함
-
-
-
- Never include snippets
- 코드 조각 포함 안 함
-
- Snippets behavior코드 조각 동작
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pl.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pl.xlf
index be4079612f862..821817918bd48 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pl.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pl.xlf
@@ -272,21 +272,6 @@
_Nigdy nie dodawaj nowego wiersza po naciśnięciu klawisza Enter
-
- Always include snippets
- Zawsze dołączaj fragmenty kodu
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Dołącz fragmenty kodu po wpisaniu znaku ? po identyfikatorze i naciśnięciu klawisza Tab
-
-
-
- Never include snippets
- Nigdy nie dołączaj fragmentów kodu
-
- Snippets behaviorZachowanie fragmentów kodu
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pt-BR.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pt-BR.xlf
index 12bbbe50c8e6f..71f7adbfcc571 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pt-BR.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.pt-BR.xlf
@@ -272,21 +272,6 @@
_Nunca adicionar nova linha ao inserir
-
- Always include snippets
- Sempre incluir snippets
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Incluir snippets quando ?-Tab for digitado após um identificador
-
-
-
- Never include snippets
- Nunca incluir snippets
-
- Snippets behaviorComportamento de snippets
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ru.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ru.xlf
index 18e80b678e73e..2f19095174378 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ru.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.ru.xlf
@@ -272,21 +272,6 @@
_Никогда не добавлять новую строку при нажатии клавиши ВВОД
-
- Always include snippets
- Всегда включать фрагменты кода
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Включать фрагменты кода, когда после идентификатора указывается "?-Tab"
-
-
-
- Never include snippets
- Никогда не включать фрагменты кода
-
- Snippets behaviorПоведение фрагментов кода
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.tr.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.tr.xlf
index d5186e12e001b..fe333e73dae87 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.tr.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.tr.xlf
@@ -272,21 +272,6 @@
Enter tuşuna basıldığında _hiçbir zaman yeni satır ekleme
-
- Always include snippets
- Kod parçacıklarını her zaman dahil et
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- Bir tanımlayıcıdan sonra ?-Tab yazılırsa kod parçacıklarını dahil et
-
-
-
- Never include snippets
- Kod parçacıklarını hiçbir zaman dahil etme
-
- Snippets behaviorKod parçacığı davranışı
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hans.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hans.xlf
index 5d3359de43850..4532d2fa79a4a 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hans.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hans.xlf
@@ -272,21 +272,6 @@
按下 Enter 时不添加新行(_N)
-
- Always include snippets
- 始终包含片段
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- 在标识符后键入 ?-Tab 时包含片段
-
-
-
- Never include snippets
- 从不包含片段
-
- Snippets behavior片段行为
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hant.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hant.xlf
index b912f0c3e7c4b..b1a8e9c40547a 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hant.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/BasicVSResources.zh-Hant.xlf
@@ -272,21 +272,6 @@
永不在按下 Enter 鍵時加入新行(_N)
-
- Always include snippets
- 一律包含程式碼片段
-
-
-
- Include snippets when ?-Tab is typed after an identifier
- 在識別碼後輸入 ?-Tab 時包含程式碼片段
-
-
-
- Never include snippets
- 一律不包含程式碼片段
-
- Snippets behavior程式碼片段行為
diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf
index 89b8f916f76d4..276c0e8c18faf 100644
--- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf
+++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf
@@ -130,6 +130,36 @@ Používat rozšířené barvy;Barevné schéma editoru;Okraj dědičnosti;Direk
Nástroje Visual BasicuHelp > About
+
+ Always add new line on enter
+ Always add new line on enter
+
+
+
+ Always include snippets
+ Always include snippets
+
+
+
+ Include snippets when ?-Tab is typed after an identifier
+ Include snippets when ?-Tab is typed after an identifier
+
+
+
+ Never add new line on enter
+ Never add new line on enter
+
+
+
+ Never include snippets
+ Never include snippets
+
+
+
+ Only add new line on enter after end of fully typed word
+ Only add new line on enter after end of fully typed word
+
+