diff --git a/src/EditorFeatures/Core/Extensibility/Completion/SnippetCompletionProvider.cs b/src/EditorFeatures/Core/Extensibility/Completion/SnippetCompletionProvider.cs index 97eebc0913f03f7e2a0d3f86758e56d4a6be624d..2691b2ecbcff963e7065357740d4479c22363542 100644 --- a/src/EditorFeatures/Core/Extensibility/Completion/SnippetCompletionProvider.cs +++ b/src/EditorFeatures/Core/Extensibility/Completion/SnippetCompletionProvider.cs @@ -7,7 +7,7 @@ namespace Microsoft.CodeAnalysis.Editor.Extensibility.Completion { - internal abstract class SnippetCompletionProvider : AbstractCompletionProvider, ISnippetCompletionProvider, ICustomCommitCompletionProvider + internal abstract class SnippetCompletionProvider : CompletionListProvider, ISnippetCompletionProvider, ICustomCommitCompletionProvider { public abstract void Commit(CompletionItem completionItem, ITextView textView, ITextBuffer subjectBuffer, ITextSnapshot triggerSnapshot, char? commitChar); } diff --git a/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb b/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb index 039f35d2eca1b7904600eebb979005c7a9f3ee17..27e8a88f0e88661cd4e9b719d67c770f4fd32fbe 100644 --- a/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb +++ b/src/VisualStudio/VisualBasic/Impl/Snippets/SnippetCompletionProvider.vb @@ -1,7 +1,6 @@ ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System.ComponentModel.Composition -Imports System.Threading Imports System.Threading.Tasks Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Completion @@ -28,22 +27,29 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Snippets Me._editorAdaptersFactoryService = editorAdaptersFactoryService End Sub - Protected Overrides Function GetItemsWorkerAsync(document As Document, position As Integer, triggerInfo As CompletionTriggerInfo, cancellationToken As CancellationToken) As Task(Of IEnumerable(Of CompletionItem)) + Public Overrides Function ProduceCompletionListAsync(context As CompletionListContext) As Task + Dim document = context.Document + Dim position = context.Position + Dim cancellationToken = context.CancellationToken + Dim snippetInfoService = document.GetLanguageService(Of ISnippetInfoService)() If snippetInfoService Is Nothing Then - Return SpecializedTasks.EmptyEnumerable(Of CompletionItem)() + Return SpecializedTasks.EmptyTask End If Dim snippets = snippetInfoService.GetSnippetsIfAvailable() - Dim textChangeSpan = CommonCompletionUtilities.GetTextChangeSpan( + Dim filterSpan = CommonCompletionUtilities.GetTextChangeSpan( document.GetTextAsync(cancellationToken).WaitAndGetResult(cancellationToken), position, AddressOf Char.IsLetterOrDigit, AddressOf Char.IsLetterOrDigit) - Return Task.FromResult(CreateCompletionItems(snippets, textChangeSpan)) + context.MakeExclusive(True) + context.AddItems(CreateCompletionItems(snippets, filterSpan)) + + Return SpecializedTasks.EmptyTask End Function Private Function CreateCompletionItems(snippets As IEnumerable(Of SnippetInfo), span As TextSpan) As IEnumerable(Of CompletionItem) @@ -61,10 +67,6 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Snippets options.GetOption(CompletionOptions.TriggerOnTypingLetters, LanguageNames.VisualBasic) End Function - Protected Overrides Function IsExclusiveAsync(document As Document, position As Integer, triggerInfo As CompletionTriggerInfo, cancellationToken As CancellationToken) As Task(Of Boolean) - Return SpecializedTasks.True - End Function - Public Overrides Sub Commit(completionItem As CompletionItem, textView As ITextView, subjectBuffer As ITextBuffer, triggerSnapshot As ITextSnapshot, commitChar As Char?) Dim snippetClient = SnippetExpansionClient.GetSnippetExpansionClient(textView, subjectBuffer, _editorAdaptersFactoryService)