diff --git a/src/EditorFeatures/Test2/IntelliSense/VisualBasicCompletionCommandHandlerTests.vb b/src/EditorFeatures/Test2/IntelliSense/VisualBasicCompletionCommandHandlerTests.vb index 29d2979cde9a3f515c442cc7ba83064fe6e0ea7e..f0d57f6d135aad257c76baec709b44b831fc6d12 100644 --- a/src/EditorFeatures/Test2/IntelliSense/VisualBasicCompletionCommandHandlerTests.vb +++ b/src/EditorFeatures/Test2/IntelliSense/VisualBasicCompletionCommandHandlerTests.vb @@ -2615,6 +2615,34 @@ End Class End Using End Function + + Public Async Function TestSnippetsNotExclusiveWhenAlwaysShowing() As Task + Dim snippetProvider As CompletionProvider = + New VisualStudio.LanguageServices.VisualBasic.Snippets. + SnippetCompletionProvider(editorAdaptersFactoryService:=Nothing) + + Using state = TestState.CreateVisualBasicTestState( + , + extraCompletionProviders:={snippetProvider}, + extraExportedTypes:={GetType(MockSnippetInfoService)}.ToList()) + + state.Workspace.Options = state.Workspace.Options.WithChangedOption(CompletionOptions.SnippetsBehavior, + LanguageNames.VisualBasic, + SnippetsRule.AlwaysInclude) + + state.SendInvokeCompletionList() + await state.WaitForAsynchronousOperationsAsync() + Assert.True(state.CompletionItemsContainsAll({"x", "Shortcut"})) + End Using + End Function + Public Async Function TestBuiltInTypesKeywordInTupleLiteral() As Task Using state = TestState.CreateVisualBasicTestState( diff --git a/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb b/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb index 075e38b9c523ddf6f3fa8e131e764656605ca8d0..8550bfad76e8337a639e9a869620a58818e67d40 100644 --- a/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb +++ b/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb @@ -52,10 +52,14 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Snippets Dim syntaxFacts = document.GetLanguageService(Of ISyntaxFactsService)() Dim isPossibleTupleContext = syntaxFacts.IsPossibleTupleContext(syntaxTree, position, cancellationToken) - context.IsExclusive = True + context.IsExclusive = ShouldBeExclusive(context.Options) context.AddItems(CreateCompletionItems(snippets, isPossibleTupleContext)) End Function + Private Function ShouldBeExclusive(options As OptionSet) As Boolean + Return not options.GetOption(CompletionOptions.SnippetsBehavior, LanguageNames.VisualBasic) = SnippetsRule.AlwaysInclude + End Function + Private Shared ReadOnly s_commitChars As Char() = {" "c, ";"c, "("c, ")"c, "["c, "]"c, "{"c, "}"c, "."c, ","c, ":"c, "+"c, "-"c, "*"c, "/"c, "\"c, "^"c, "<"c, ">"c, "'"c, "="c} Private Shared ReadOnly s_rules As CompletionItemRules = CompletionItemRules.Create( commitCharacterRules:=ImmutableArray.Create(CharacterSetModificationRule.Create(CharacterSetModificationKind.Replace, s_commitChars)))