From 6f2c49497683f29f1629a97a6b263f20626c9e13 Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Wed, 18 May 2016 19:19:11 -0700 Subject: [PATCH] Fixup completion tests to properly call through the CompletionService. --- .../AbstractCSharpCompletionProviderTests.cs | 21 +++++------ .../CrefCompletionProviderTests.cs | 2 +- ...bjectInitializerCompletionProviderTests.cs | 15 ++------ .../OverrideCompletionProviderTests.cs | 32 ++++++++-------- .../SuggestionModeCompletionProviderTests.cs | 6 ++- .../Completion/CompletionHelper.cs | 15 ++++---- .../Completion/CompletionHelperFactory.cs | 3 +- .../Completion/Controller_ReturnKey.cs | 2 - .../Completion/Controller_TypeChar.cs | 4 +- .../DescriptionModifyingPresentationItem.cs | 2 +- .../Presentation/RoslynCompletionSet.cs | 4 +- .../AbstractCompletionProviderTests.cs | 35 +++++++++--------- .../IntelliSense/CompletionRulesTests.vb | 8 +++- .../Completion/VisualBasicCompletionHelper.vb | 12 ++---- ...tractVisualBasicCompletionProviderTests.vb | 14 +++---- .../CrefCompletionProviderTests.vb | 2 +- ...ImplementsClauseCompletionProviderTests.vb | 2 +- ...bjectInitializerCompletionProviderTests.vb | 2 +- .../OverrideCompletionProviderTests.vb | 2 +- .../SuggestionModeCompletionProviderTests.vb | 15 ++++---- .../XmlDocCommentCompletionProviderTests.vb | 10 ++++- .../CSharpSuggestionModeCompletionProvider.cs | 1 + .../CompletionServiceWithProviders.cs | 37 ++++++++++++++++--- ...actReferenceDirectiveCompletionProvider.cs | 3 +- 24 files changed, 140 insertions(+), 109 deletions(-) diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/AbstractCSharpCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/AbstractCSharpCompletionProviderTests.cs index 3b3b159ea54..379668ac18f 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/AbstractCSharpCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/AbstractCSharpCompletionProviderTests.cs @@ -1,6 +1,5 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -10,7 +9,6 @@ using Microsoft.CodeAnalysis.CSharp.Completion; using Microsoft.CodeAnalysis.Editor.UnitTests.Completion; using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces; -using Microsoft.CodeAnalysis.Options; using Microsoft.CodeAnalysis.Text; using Xunit; @@ -23,7 +21,7 @@ protected AbstractCSharpCompletionProviderTests(CSharpTestWorkspaceFixture works } internal override CompletionServiceWithProviders CreateCompletionService( - TestWorkspace workspace, ImmutableArray exclusiveProviders) + Workspace workspace, ImmutableArray exclusiveProviders) { return new CSharpCompletionService(workspace, exclusiveProviders); } @@ -146,15 +144,14 @@ protected async Task VerifySendEnterThroughToEnterAsync(string initialMarkup, st var document = workspace.CurrentSolution.GetDocument(documentId); var position = hostDocument.CursorPosition.Value; - var service = await GetCompletionServiceAsync(); + workspace.Options = workspace.Options.WithChangedOption( + CSharpCompletionOptions.AddNewLineOnEnterAfterFullyTypedWord, sendThroughEnterEnabled); + + var service = GetCompletionService(workspace); var completionList = await GetCompletionListAsync(service, document, position, CompletionTrigger.Default); var item = completionList.Items.First(i => i.DisplayText.StartsWith(textTypedSoFar)); - var optionService = workspace.Services.GetService(); - var options = optionService.GetOptions().WithChangedOption(CSharpCompletionOptions.AddNewLineOnEnterAfterFullyTypedWord, sendThroughEnterEnabled); - optionService.SetOptions(options); - - var completionRules = CompletionHelper.GetHelper(document); + var completionRules = CompletionHelper.GetHelper(document, service); Assert.Equal(expected, completionRules.SendEnterThroughToEditor(item, textTypedSoFar, workspace.Options)); } } @@ -175,7 +172,7 @@ private async Task VerifyTextualTriggerCharacterWorkerAsync(string markup, bool var options = workspace.Options.WithChangedOption(CompletionOptions.TriggerOnTypingLetters, LanguageNames.CSharp, triggerOnLetter); var trigger = CompletionTrigger.CreateInsertionTrigger(text[position]); - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var isTextualTriggerCharacterResult = service.ShouldTriggerCompletion(text, position + 1, trigger, options: options); if (expectedTriggerCharacter) @@ -215,11 +212,11 @@ protected async Task VerifyCommitCharactersAsync(string initialMarkup, string te var document = workspace.CurrentSolution.GetDocument(documentId); var position = hostDocument.CursorPosition.Value; - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var completionList = await GetCompletionListAsync(service, document, position, CompletionTrigger.Default); var item = completionList.Items.First(i => i.DisplayText.StartsWith(textTypedSoFar)); - var completionRules = CompletionHelper.GetHelper(document); + var completionRules = CompletionHelper.GetHelper(document, service); foreach (var ch in validChars) { diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/CrefCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/CrefCompletionProviderTests.cs index b7e7d5d36eb..d8c08578cf2 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/CrefCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/CrefCompletionProviderTests.cs @@ -434,7 +434,7 @@ class C var provider = new CrefCompletionProvider(); var hostDocument = workspace.DocumentWithCursor; var document = workspace.CurrentSolution.GetDocument(hostDocument.Id); - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var completionList = await GetCompletionListAsync(service, document, hostDocument.CursorPosition.Value, CompletionTrigger.Default); } } diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.cs index 692595df813..253078d572e 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.cs @@ -1,12 +1,8 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; -using System.Collections.Immutable; using System.Linq; -using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.Completion; -using Microsoft.CodeAnalysis.CSharp.Completion; using Microsoft.CodeAnalysis.CSharp.Completion.Providers; using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces; using Roslyn.Test.Utilities; @@ -20,11 +16,6 @@ public ObjectInitializerCompletionProviderTests(CSharpTestWorkspaceFixture works { } - internal override CompletionServiceWithProviders CreateCompletionService(TestWorkspace workspace, ImmutableArray exclusiveProviders) - { - return new CSharpCompletionService(workspace, exclusiveProviders); - } - internal override CompletionProvider CreateCompletionProvider() { return new ObjectInitializerCompletionProvider(); @@ -584,11 +575,11 @@ void foo() var document = workspace.CurrentSolution.GetDocument(hostDocument.Id); var triggerInfo = CompletionTrigger.CreateInsertionTrigger('a'); - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var completionList = await GetCompletionListAsync(service, document, position, triggerInfo); var item = completionList.Items.First(); - var completionRules = CompletionHelper.GetHelper(document); + var completionRules = CompletionHelper.GetHelper(document, service); Assert.False(completionRules.SendEnterThroughToEditor(item, string.Empty, workspace.Options), "Expected false from SendEnterThroughToEditor()"); } @@ -786,7 +777,7 @@ private async Task VerifyExclusiveAsync(string markup, bool exclusive) var document = workspace.CurrentSolution.GetDocument(hostDocument.Id); var triggerInfo = CompletionTrigger.CreateInsertionTrigger('a'); - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var completionList = await GetCompletionListAsync(service, document, position, triggerInfo); if (completionList != null) diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/OverrideCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/OverrideCompletionProviderTests.cs index d3f0c958ae2..3af70e51bea 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/OverrideCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/OverrideCompletionProviderTests.cs @@ -2126,7 +2126,7 @@ public override void set_Bar(int bay, int value) var document = solution.GetDocument(documentId); var triggerInfo = CompletionTrigger.Default; - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(testWorkspace); var completionList = await GetCompletionListAsync(service, document, position, triggerInfo); var completionItem = completionList.Items.First(i => CompareItems(i.DisplayText, "Bar[int bay]")); @@ -2386,7 +2386,7 @@ public override bool Equals(object obj) var document = solution.GetDocument(documentId); var triggerInfo = CompletionTrigger.Default; - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(testWorkspace); var completionList = await GetCompletionListAsync(service, document, position, triggerInfo); var completionItem = completionList.Items.First(i => CompareItems(i.DisplayText, "Equals(object obj)")); @@ -2445,7 +2445,7 @@ public override bool Equals(object obj) var document = solution.GetDocument(documentId); var triggerInfo = CompletionTrigger.Default; - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(testWorkspace); var completionList = await GetCompletionListAsync(service, document, cursorPosition, triggerInfo); var completionItem = completionList.Items.First(i => CompareItems(i.DisplayText, "Equals(object obj)")); @@ -2544,22 +2544,24 @@ static void Main(string[] args) override $$ } }"; - var workspace = await TestWorkspace.CreateAsync(LanguageNames.CSharp, new CSharpCompilationOptions(OutputKind.ConsoleApplication), new CSharpParseOptions(), text); - var provider = new OverrideCompletionProvider(); - var testDocument = workspace.Documents.Single(); - var document = workspace.CurrentSolution.GetDocument(testDocument.Id); + using (var workspace = await TestWorkspace.CreateAsync(LanguageNames.CSharp, new CSharpCompilationOptions(OutputKind.ConsoleApplication), new CSharpParseOptions(), text)) + { + var provider = new OverrideCompletionProvider(); + var testDocument = workspace.Documents.Single(); + var document = workspace.CurrentSolution.GetDocument(testDocument.Id); - var service = await GetCompletionServiceAsync(); - var completionList = await GetCompletionListAsync(service, document, testDocument.CursorPosition.Value, CompletionTrigger.Default); + var service = GetCompletionService(workspace); + var completionList = await GetCompletionListAsync(service, document, testDocument.CursorPosition.Value, CompletionTrigger.Default); - var oldTree = await document.GetSyntaxTreeAsync(); + var oldTree = await document.GetSyntaxTreeAsync(); - var commit = await provider.GetChangeAsync(document, completionList.Items.First(i => i.DisplayText == "ToString()"), ' '); - var changes = commit.TextChanges; + var commit = await provider.GetChangeAsync(document, completionList.Items.First(i => i.DisplayText == "ToString()"), ' '); + var changes = commit.TextChanges; - // If we left the trailing trivia of the close curly of Main alone, - // there should only be one change: the replacement of "override " with a method. - Assert.Equal(changes.Single().Span, TextSpan.FromBounds(136, 145)); + // If we left the trailing trivia of the close curly of Main alone, + // there should only be one change: the replacement of "override " with a method. + Assert.Equal(changes.Single().Span, TextSpan.FromBounds(136, 145)); + } } } } \ No newline at end of file diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.cs index 6369990d64a..9883a440fc1 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.cs @@ -580,8 +580,10 @@ private async Task VerifyWorkerAsync(string markup, bool isBuilder) private async Task CheckResultsAsync(Document document, int position, bool isBuilder) { var triggerInfo = CompletionTrigger.CreateInsertionTrigger('a'); - var service = await GetCompletionServiceAsync(); - var completionList = await GetCompletionListAsync(service, document, position, triggerInfo); + var service = GetCompletionService(document.Project.Solution.Workspace); + var completionList = await service.GetContextAsync( + service.ExclusiveProviders?[0], document, position, triggerInfo, + options: null, cancellationToken: CancellationToken.None); if (isBuilder) { diff --git a/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelper.cs b/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelper.cs index 40db2eba6da..8a8d48d7ff5 100644 --- a/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelper.cs +++ b/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelper.cs @@ -29,7 +29,8 @@ protected CompletionHelper(CompletionService completionService) _rules = CompletionService.GetRules(); } - public static CompletionHelper GetHelper(Workspace workspace, string language) + public static CompletionHelper GetHelper( + Workspace workspace, string language, CompletionService completionService) { var ls = workspace.Services.GetLanguageServices(language); if (ls != null) @@ -37,10 +38,9 @@ public static CompletionHelper GetHelper(Workspace workspace, string language) var factory = ls.GetService(); if (factory != null) { - return factory.CreateCompletionHelper(); + return factory.CreateCompletionHelper(completionService); } - var completionService = ls.GetService(); if (completionService != null) { return new CompletionHelper(completionService); @@ -50,9 +50,9 @@ public static CompletionHelper GetHelper(Workspace workspace, string language) return null; } - public static CompletionHelper GetHelper(Document document) + public static CompletionHelper GetHelper(Document document, CompletionService service) { - return GetHelper(document.Project.Solution.Workspace, document.Project.Language); + return GetHelper(document.Project.Solution.Workspace, document.Project.Language, service); } public IReadOnlyList GetHighlightedSpans(CompletionItem completionItem, string filterText) @@ -446,9 +446,10 @@ protected bool IsObjectCreationItem(CompletionItem item) return item.Tags.Contains(CompletionTags.ObjectCreation); } - public static async Task GetTextChangeAsync(Document document, CompletionItem item, char? commitKey = null, CancellationToken cancellationToken = default(CancellationToken)) + public static async Task GetTextChangeAsync( + CompletionService service, Document document, CompletionItem item, + char? commitKey = null, CancellationToken cancellationToken = default(CancellationToken)) { - var service = CompletionService.GetService(document); var change = await service.GetChangeAsync(document, item, commitKey, cancellationToken).ConfigureAwait(false); // normally the items that produce multiple changes are not expecting to trigger the behaviors that rely on looking at the text diff --git a/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelperFactory.cs b/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelperFactory.cs index 51b4dd76db5..b4e70192d44 100644 --- a/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelperFactory.cs +++ b/src/EditorFeatures/Core/Extensibility/Completion/CompletionHelperFactory.cs @@ -1,12 +1,13 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using Microsoft.CodeAnalysis.Completion; using Microsoft.CodeAnalysis.Host; namespace Microsoft.CodeAnalysis.Editor { internal abstract class CompletionHelperFactory : ILanguageService { - public abstract CompletionHelper CreateCompletionHelper(); + public abstract CompletionHelper CreateCompletionHelper(CompletionService completionService); } } \ No newline at end of file diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_ReturnKey.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_ReturnKey.cs index c7958b00b1c..687f399a469 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_ReturnKey.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_ReturnKey.cs @@ -1,9 +1,7 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Threading; using Microsoft.CodeAnalysis.Editor.Commands; -using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion { diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_TypeChar.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_TypeChar.cs index bb5da8ee21d..d393f3daa82 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_TypeChar.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Controller_TypeChar.cs @@ -13,6 +13,7 @@ using Microsoft.VisualStudio.Text; using Roslyn.Utilities; using System.Threading; +using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion { @@ -273,7 +274,8 @@ private CompletionHelper GetCompletionHelper() var document = this.SubjectBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges(); if (document != null) { - return CompletionHelper.GetHelper(document); + return CompletionHelper.GetHelper( + document, document.GetLanguageService()); } return null; diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/DescriptionModifyingPresentationItem.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/DescriptionModifyingPresentationItem.cs index 04cc58b940a..5562af6653c 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/DescriptionModifyingPresentationItem.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/DescriptionModifyingPresentationItem.cs @@ -36,7 +36,7 @@ public override async Task GetDescriptionAsync(Document d var description = await this.CompletionService.GetDescriptionAsync(document, this.Item, cancellationToken).ConfigureAwait(false); var parts = description.TaggedParts; - var change = await CompletionHelper.GetTextChangeAsync(document, this.Item, '\t').ConfigureAwait(false); + var change = await CompletionHelper.GetTextChangeAsync(this.CompletionService, document, this.Item, '\t').ConfigureAwait(false); var insertionText = change.NewText; var note = string.Empty; diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Presentation/RoslynCompletionSet.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Presentation/RoslynCompletionSet.cs index a30f1b0f3bd..acdd8dc7270 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Presentation/RoslynCompletionSet.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/Completion/Presentation/RoslynCompletionSet.cs @@ -12,7 +12,6 @@ using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using VSCompletion = Microsoft.VisualStudio.Language.Intellisense.Completion; -using Microsoft.CodeAnalysis.Snippets; namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion.Presentation { @@ -205,7 +204,8 @@ private CompletionHelper GetCompletionHelper() var document = _subjectBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges(); if (document != null) { - _completionHelper = CompletionHelper.GetHelper(document); + _completionHelper = CompletionHelper.GetHelper(document, + document.Project.LanguageServices.GetService()); } } diff --git a/src/EditorFeatures/Test/Completion/AbstractCompletionProviderTests.cs b/src/EditorFeatures/Test/Completion/AbstractCompletionProviderTests.cs index 4d44b10a505..76abd17ffae 100644 --- a/src/EditorFeatures/Test/Completion/AbstractCompletionProviderTests.cs +++ b/src/EditorFeatures/Test/Completion/AbstractCompletionProviderTests.cs @@ -51,18 +51,17 @@ protected static async Task CanUseSpeculativeSemanticModelAsync(Document d return !service.GetMemberBodySpanForSpeculativeBinding(node).IsEmpty; } - internal async Task GetCompletionServiceAsync() + internal CompletionServiceWithProviders GetCompletionService(Workspace workspace) { - var workspace = await this.WorkspaceFixture.GetWorkspaceAsync(); return CreateCompletionService(workspace, ImmutableArray.Create(CreateCompletionProvider())); } internal abstract CompletionServiceWithProviders CreateCompletionService( - TestWorkspace workspace, ImmutableArray exclusiveProviders); + Workspace workspace, ImmutableArray exclusiveProviders); - internal static CompletionHelper GetCompletionHelper(Document document) + internal static CompletionHelper GetCompletionHelper(Document document, CompletionService service) { - return CompletionHelper.GetHelper(document); + return CompletionHelper.GetHelper(document, service); } internal static async Task GetCompletionListContextAsync( @@ -100,7 +99,7 @@ internal static CompletionHelper GetCompletionHelper(Document document) trigger = CompletionTrigger.CreateInsertionTrigger(insertedCharacter: code.ElementAt(position - 1)); } - var completionService = await GetCompletionServiceAsync(); + var completionService = GetCompletionService(document.Project.Solution.Workspace); var completionList = await GetCompletionListAsync(completionService, document, position, trigger); var items = completionList == null ? default(ImmutableArray) : completionList.Items; @@ -302,16 +301,17 @@ protected virtual async Task VerifyCustomCommitProviderWorkerAsync(string codeBe private async Task VerifyCustomCommitProviderCheckResultsAsync(Document document, string codeBeforeCommit, int position, string itemToCommit, string expectedCodeAfterCommit, char? commitChar) { - var textBuffer = (await WorkspaceFixture.GetWorkspaceAsync()).Documents.Single().TextBuffer; + var workspace = await WorkspaceFixture.GetWorkspaceAsync(); + var textBuffer = workspace.Documents.Single().TextBuffer; - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var items = (await GetCompletionListAsync(service, document, position, CompletionTrigger.Default)).Items; var firstItem = items.First(i => CompareItems(i.DisplayText, itemToCommit)); var customCommitCompletionProvider = service.ExclusiveProviders?[0] as ICustomCommitCompletionProvider; if (customCommitCompletionProvider != null) { - var completionRules = GetCompletionHelper(document); + var completionRules = GetCompletionHelper(document, service); var textView = (await WorkspaceFixture.GetWorkspaceAsync()).Documents.Single().GetTextView(); VerifyCustomCommitWorker(customCommitCompletionProvider, firstItem, completionRules, textView, textBuffer, codeBeforeCommit, expectedCodeAfterCommit, commitChar); } @@ -333,7 +333,7 @@ private async Task VerifyCustomCommitProviderCheckResultsAsync(Document document string actualExpectedCode = null; MarkupTestFile.GetPosition(expectedCodeAfterCommit, out actualExpectedCode, out expectedCaretPosition); - CompletionHelper completionRules = GetCompletionHelper(document); + CompletionHelper completionRules = GetCompletionHelper(document, service); if (commitChar.HasValue && !completionRules.IsCommitCharacter(completionItem, commitChar.Value, string.Empty)) { @@ -409,21 +409,22 @@ private async Task VerifyCustomCommitProviderCheckResultsAsync(Document document private async Task VerifyProviderCommitCheckResultsAsync(Document document, int position, string itemToCommit, string expectedCodeAfterCommit, char? commitCharOpt, string textTypedSoFar) { - var textBuffer = (await WorkspaceFixture.GetWorkspaceAsync()).Documents.Single().TextBuffer; + var workspace = await WorkspaceFixture.GetWorkspaceAsync(); + var textBuffer = workspace.Documents.Single().TextBuffer; var textSnapshot = textBuffer.CurrentSnapshot.AsText(); - var service = await GetCompletionServiceAsync(); + var service = GetCompletionService(workspace); var items = (await GetCompletionListAsync(service, document, position, CompletionTrigger.Default)).Items; var firstItem = items.First(i => CompareItems(i.DisplayText, itemToCommit)); - var completionRules = GetCompletionHelper(document); + var completionRules = GetCompletionHelper(document, service); var commitChar = commitCharOpt ?? '\t'; var text = await document.GetTextAsync(); if (commitChar == '\t' || completionRules.IsCommitCharacter(firstItem, commitChar, textTypedSoFar)) { - var textChange = CompletionHelper.GetTextChangeAsync(document, firstItem, commitChar).Result; + var textChange = CompletionHelper.GetTextChangeAsync(service, document, firstItem, commitChar).Result; // Adjust TextChange to include commit character, so long as it isn't TAB. if (commitChar != '\t') @@ -550,7 +551,7 @@ private Task VerifyItemInSameProjectAsync(string markup, string referencedCode, var triggerInfo = CompletionTrigger.Default; - var completionService = await GetCompletionServiceAsync(); + var completionService = GetCompletionService(testWorkspace); var completionList = await GetCompletionListAsync(completionService, document, position, triggerInfo); if (expectedSymbols >= 1) @@ -605,7 +606,7 @@ protected Task VerifyItemWithMscorlib45Async(string markup, string expectedItem, var document = solution.GetDocument(documentId); var triggerInfo = CompletionTrigger.Default; - var completionService = await GetCompletionServiceAsync(); + var completionService = GetCompletionService(testWorkspace); var completionList = await GetCompletionListAsync(completionService, document, position, triggerInfo); var item = completionList.Items.FirstOrDefault(i => i.DisplayText == expectedItem); @@ -637,7 +638,7 @@ protected async Task VerifyItemInLinkedFilesAsync(string xmlString, string expec var document = solution.GetDocument(currentContextDocumentId); var triggerInfo = CompletionTrigger.Default; - var completionService = await GetCompletionServiceAsync(); + var completionService = GetCompletionService(testWorkspace); var completionList = await GetCompletionListAsync(completionService, document, position, triggerInfo); var item = completionList.Items.Single(c => c.DisplayText == expectedItem); diff --git a/src/EditorFeatures/Test2/IntelliSense/CompletionRulesTests.vb b/src/EditorFeatures/Test2/IntelliSense/CompletionRulesTests.vb index 56536d16a0a..d0c49dfc4d1 100644 --- a/src/EditorFeatures/Test2/IntelliSense/CompletionRulesTests.vb +++ b/src/EditorFeatures/Test2/IntelliSense/CompletionRulesTests.vb @@ -47,7 +47,9 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense Private Sub TestMatches(v As String, wordsToMatch() As String) Using New CultureContext("tr-TR") - Dim helper = CompletionHelper.GetHelper(New TestWorkspace, LanguageNames.CSharp) + Dim workspace = New TestWorkspace + Dim helper = CompletionHelper.GetHelper(workspace, LanguageNames.CSharp, + workspace.Services.GetLanguageServices(LanguageNames.CSharp).GetService(Of CompletionService)) For Each word In wordsToMatch Dim item = CompletionItem.Create(word) Assert.True(helper.MatchesFilterText(item, v, CompletionTrigger.Default, CompletionFilterReason.TypeChar), $"Expected item {word} does not match {v}") @@ -57,7 +59,9 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense Private Sub TestNotMatches(v As String, wordsToNotMatch() As String) Using New CultureContext("tr-TR") - Dim helper = CompletionHelper.GetHelper(New TestWorkspace, LanguageNames.CSharp) + Dim workspace = New TestWorkspace + Dim helper = CompletionHelper.GetHelper(workspace, LanguageNames.CSharp, + workspace.Services.GetLanguageServices(LanguageNames.CSharp).GetService(Of CompletionService)) For Each word In wordsToNotMatch Dim item = CompletionItem.Create(word) Assert.False(helper.MatchesFilterText(item, v, CompletionTrigger.Default, CompletionFilterReason.TypeChar), $"Unexpected item {word} matches {v}") diff --git a/src/EditorFeatures/VisualBasic/Completion/VisualBasicCompletionHelper.vb b/src/EditorFeatures/VisualBasic/Completion/VisualBasicCompletionHelper.vb index ab8d2986551..5924ec73307 100644 --- a/src/EditorFeatures/VisualBasic/Completion/VisualBasicCompletionHelper.vb +++ b/src/EditorFeatures/VisualBasic/Completion/VisualBasicCompletionHelper.vb @@ -13,21 +13,17 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Completion Implements ILanguageServiceFactory Public Function CreateLanguageService(languageServices As HostLanguageServices) As ILanguageService Implements ILanguageServiceFactory.CreateLanguageService - Dim completionService = languageServices.GetService(Of CompletionService) - Return New VisualBasicCompletionHelperFactory(completionService) + Return New VisualBasicCompletionHelperFactory() End Function Private Class VisualBasicCompletionHelperFactory Inherits CompletionHelperFactory - Private _completionService As CompletionService - - Public Sub New(completionService As CompletionService) - _completionService = completionService + Public Sub New() End Sub - Public Overrides Function CreateCompletionHelper() As CompletionHelper - Return New VisualBasicCompletionHelper(_completionService) + Public Overrides Function CreateCompletionHelper(service As CompletionService) As CompletionHelper + Return New VisualBasicCompletionHelper(service) End Function End Class End Class diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/AbstractVisualBasicCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/AbstractVisualBasicCompletionProviderTests.vb index a1289ce9c31..64a4c2013f5 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/AbstractVisualBasicCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/AbstractVisualBasicCompletionProviderTests.vb @@ -16,7 +16,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.Complet MyBase.New(workspaceFixture) End Sub - Friend Overrides Function CreateCompletionService(workspace As TestWorkspace, exclusiveProviders As ImmutableArray(Of CompletionProvider)) As CompletionServiceWithProviders + Friend Overrides Function CreateCompletionService(workspace As Workspace, exclusiveProviders As ImmutableArray(Of CompletionProvider)) As CompletionServiceWithProviders Return New VisualBasicCompletionService(workspace, exclusiveProviders) End Function @@ -79,7 +79,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.Complet Await MyBase.VerifyWorkerAsync(code, position, expectedItemOrNull, expectedDescriptionOrNull, sourceCodeKind, usePreviousCharAsTrigger, checkForAbsence, experimental:=experimental, glyph:=glyph) End Function - Private Function VerifyAtEndOfFileAsync(code As String, position As Integer, expectedItemOrNull As String, expectedDescriptionOrNull As String, sourceCodeKind As SourceCodeKind, usePreviousCharAsTrigger As Boolean, checkForAbsence As Boolean, glyph As Integer?, experimental As Boolean) As Threading.Tasks.Task + Protected Function VerifyAtEndOfFileAsync(code As String, position As Integer, expectedItemOrNull As String, expectedDescriptionOrNull As String, sourceCodeKind As SourceCodeKind, usePreviousCharAsTrigger As Boolean, checkForAbsence As Boolean, glyph As Integer?, experimental As Boolean) As Threading.Tasks.Task Return VerifyAtEndOfFileAsync(code, position, String.Empty, expectedItemOrNull, expectedDescriptionOrNull, sourceCodeKind, usePreviousCharAsTrigger, checkForAbsence, glyph, experimental) End Function @@ -117,11 +117,11 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.Complet Dim document = workspace.CurrentSolution.GetDocument(documentId) Dim position = hostDocument.CursorPosition.Value - Dim service = Await GetCompletionServiceAsync() + Dim service = GetCompletionService(workspace) Dim completionList = Await GetCompletionListAsync(service, document, position, CompletionTrigger.Default) Dim item = completionList.Items.First(Function(i) i.DisplayText.StartsWith(textTypedSoFar)) - Dim helper = CompletionHelper.GetHelper(document) + Dim helper = CompletionHelper.GetHelper(document, service) Assert.Equal(expected, helper.SendEnterThroughToEditor(item, textTypedSoFar, workspace.Options)) End Using End Function @@ -138,11 +138,11 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.Complet Dim document = workspace.CurrentSolution.GetDocument(documentId) Dim position = hostDocument.CursorPosition.Value - Dim service = Await GetCompletionServiceAsync() + Dim service = GetCompletionService(workspace) Dim completionList = Await GetCompletionListAsync(service, document, position, CompletionTrigger.Default) Dim item = completionList.Items.First() - Dim helper = CompletionHelper.GetHelper(document) + Dim helper = CompletionHelper.GetHelper(document, service) For Each ch In chars Assert.True(helper.IsCommitCharacter(item, ch, textTypedSoFar), $"Expected '{ch}' to be a commit character") @@ -206,7 +206,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.Complet Dim options = workspace.Options.WithChangedOption(CompletionOptions.TriggerOnTypingLetters, LanguageNames.VisualBasic, triggerOnLetter) Dim trigger = CompletionTrigger.CreateInsertionTrigger(text(position)) - Dim completionService = Await GetCompletionServiceAsync() + Dim completionService = GetCompletionService(workspace) Dim isTextualTriggerCharacterResult = completionService.ShouldTriggerCompletion( text, position + 1, trigger, options:=options) diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/CrefCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/CrefCompletionProviderTests.vb index 3533f5f8e3d..4d27b806a1c 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/CrefCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/CrefCompletionProviderTests.vb @@ -431,7 +431,7 @@ End Class]]>.Value.NormalizeLineEndings() Dim hostDocument = workspace.DocumentWithCursor Dim document = workspace.CurrentSolution.GetDocument(hostDocument.Id) - Dim service = Await GetCompletionServiceAsync() + Dim service = GetCompletionService(workspace) Dim completionList = Await GetCompletionListAsync(service, document, hostDocument.CursorPosition.Value, CompletionTrigger.Default) End Using End Function diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ImplementsClauseCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ImplementsClauseCompletionProviderTests.vb index 532886f058c..15f211222ab 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ImplementsClauseCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ImplementsClauseCompletionProviderTests.vb @@ -643,7 +643,7 @@ End Interface Using workspace = Await TestWorkspace.CreateAsync(element) Dim position = workspace.Documents.Single().CursorPosition.Value Dim document = workspace.CurrentSolution.GetDocument(workspace.Documents.Single().Id) - Dim service = Await GetCompletionServiceAsync() + Dim service = GetCompletionService(workspace) Dim completionList = Await GetCompletionListAsync(service, document, position, CompletionTrigger.Default) AssertEx.Any(completionList.Items, Function(c) c.DisplayText = "Workcover") End Using diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.vb index c2300cd48a8..b25bcf393e7 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/ObjectInitializerCompletionProviderTests.vb @@ -406,7 +406,7 @@ End Program Dim hostDocument = workspace.Documents.First() Dim caretPosition = hostDocument.CursorPosition.Value Dim document = workspace.CurrentSolution.GetDocument(hostDocument.Id) - Dim service = Await GetCompletionServiceAsync() + Dim service = GetCompletionService(workspace) Dim completionList = Await GetCompletionListAsync(service, document, caretPosition, CompletionTrigger.Default) Assert.True(completionList Is Nothing OrElse completionList.IsExclusive, "Expected always exclusive") End Using diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/OverrideCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/OverrideCompletionProviderTests.vb index 9ac0465867d..3281d3122a9 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/OverrideCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/OverrideCompletionProviderTests.vb @@ -1746,7 +1746,7 @@ public class C Dim caretPosition = hostDocument.CursorPosition.Value Dim document = workspace.CurrentSolution.GetDocument(hostDocument.Id) - Dim service = Await GetCompletionServiceAsync() + Dim service = GetCompletionService(workspace) Dim completionList = Await GetCompletionListAsync(service, document, caretPosition, CompletionTrigger.Default) Assert.False(completionList.Items.Any(Function(c) c.DisplayText = "e")) End Using diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.vb index 78b8c3b5f5d..553ad04a246 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/SuggestionModeCompletionProviderTests.vb @@ -1,5 +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.Threading Imports System.Threading.Tasks Imports System.Xml.Linq Imports Microsoft.CodeAnalysis.Completion @@ -328,21 +329,21 @@ End Class Await CheckResultsAsync(document2, position, isBuilder, triggerInfo, options) End If End Using - End Function Private Async Function CheckResultsAsync(document As Document, position As Integer, isBuilder As Boolean, triggerInfo As CompletionTrigger?, options As OptionSet) As Task triggerInfo = If(triggerInfo, CompletionTrigger.CreateInsertionTrigger("a"c)) - Dim service = Await GetCompletionServiceAsync() - Dim completionList = Await GetCompletionListAsync(service, document, position, triggerInfo.Value, options) + Dim service = GetCompletionService(document.Project.Solution.Workspace) + Dim context = Await service.GetContextAsync( + service.ExclusiveProviders?(0), document, position, triggerInfo.Value, options, CancellationToken.None) If isBuilder Then - Assert.NotNull(completionList) - Assert.NotNull(completionList.SuggestionModeItem) + Assert.NotNull(context) + Assert.NotNull(context.SuggestionModeItem) Else - If completionList IsNot Nothing Then - Assert.True(completionList.SuggestionModeItem Is Nothing, "group.Builder = " & If(completionList.SuggestionModeItem IsNot Nothing, completionList.SuggestionModeItem.DisplayText, "null")) + If context IsNot Nothing Then + Assert.True(context.SuggestionModeItem Is Nothing, "group.Builder = " & If(context.SuggestionModeItem IsNot Nothing, context.SuggestionModeItem.DisplayText, "null")) End If End If End Function diff --git a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/XmlDocCommentCompletionProviderTests.vb b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/XmlDocCommentCompletionProviderTests.vb index ae628ac4cbb..8a2e53afba7 100644 --- a/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/XmlDocCommentCompletionProviderTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Completion/CompletionProviders/XmlDocCommentCompletionProviderTests.vb @@ -1,5 +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 Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Completion Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.CompletionProviders @@ -17,6 +18,11 @@ Namespace Tests Return New XmlDocCommentCompletionProvider() End Function + Protected Overrides Async Function VerifyWorkerAsync(code As String, position As Integer, expectedItemOrNull As String, expectedDescriptionOrNull As String, sourceCodeKind As SourceCodeKind, usePreviousCharAsTrigger As Boolean, checkForAbsence As Boolean, experimental As Boolean, glyph As Integer?) As Task + Await VerifyAtPositionAsync(code, position, expectedItemOrNull, expectedDescriptionOrNull, sourceCodeKind, usePreviousCharAsTrigger, checkForAbsence, glyph, experimental) + Await VerifyAtEndOfFileAsync(code, position, expectedItemOrNull, expectedDescriptionOrNull, sourceCodeKind, usePreviousCharAsTrigger, checkForAbsence, glyph, experimental) + End Function + Private Async Function VerifyItemsExistAsync(markup As String, ParamArray items() As String) As Task For Each item In items Await VerifyItemExistsAsync(markup, item) @@ -340,7 +346,9 @@ Class C End Class " - Await VerifyItemExistsAsync(text, "foo", usePreviousCharAsTrigger:=True) + Await VerifyItemExistsAsync( + text, "foo", + usePreviousCharAsTrigger:=True) End Function diff --git a/src/Features/CSharp/Portable/Completion/SuggestionMode/CSharpSuggestionModeCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/SuggestionMode/CSharpSuggestionModeCompletionProvider.cs index f85ffb392a7..6838be4de17 100644 --- a/src/Features/CSharp/Portable/Completion/SuggestionMode/CSharpSuggestionModeCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/SuggestionMode/CSharpSuggestionModeCompletionProvider.cs @@ -1,5 +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. +using System; using System.Linq; using System.Threading; using System.Threading.Tasks; diff --git a/src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs b/src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs index dfb1065b8a4..99d0d41fcf0 100644 --- a/src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs +++ b/src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs @@ -205,7 +205,9 @@ internal protected CompletionProvider GetProvider(CompletionItem item) var completionLists = new List(); foreach (var provider in triggeredProviders) { - var completionList = await GetProviderCompletionsAsync(provider, document, caretPosition, defaultItemSpan, trigger, options, cancellationToken).ConfigureAwait(false); + var completionList = await GetContextAsync( + provider, document, caretPosition, trigger, + options, defaultItemSpan, cancellationToken).ConfigureAwait(false); if (completionList != null) { completionLists.Add(completionList); @@ -240,7 +242,7 @@ internal protected CompletionProvider GetProvider(CompletionItem item) var nonUsedNonExclusiveLists = new List(); foreach (var provider in nonUsedProviders) { - var completionList = await GetProviderCompletionsAsync(provider, document, caretPosition, defaultItemSpan, trigger, options, cancellationToken).ConfigureAwait(false); + var completionList = await GetContextAsync(provider, document, caretPosition, trigger, options, defaultItemSpan, cancellationToken).ConfigureAwait(false); if (completionList != null && !completionList.IsExclusive) { nonUsedNonExclusiveLists.Add(completionList); @@ -290,7 +292,8 @@ internal protected CompletionProvider GetProvider(CompletionItem item) totalItems.Sort(); return CompletionList.Create( - contextSpan, totalItems.ToImmutableArray(), this.GetRules(), suggestionModeItem); + contextSpan, totalItems.ToImmutableArray(), this.GetRules(), suggestionModeItem, + isExclusive); } private void AddToDisplayMap( @@ -350,16 +353,38 @@ protected virtual CompletionItem GetBetterItem(CompletionItem item, CompletionIt return result; } - private static async Task GetProviderCompletionsAsync( + // Internal for testing purposes only. + internal async Task GetContextAsync( CompletionProvider provider, Document document, int position, - TextSpan defaultFilterSpan, CompletionTrigger triggerInfo, OptionSet options, CancellationToken cancellationToken) { - var context = new CompletionContext(provider, document, position, defaultFilterSpan, triggerInfo, options, cancellationToken); + return await GetContextAsync( + provider, document, position, triggerInfo, + options, defaultSpan: null, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + private async Task GetContextAsync( + CompletionProvider provider, + Document document, + int position, + CompletionTrigger triggerInfo, + OptionSet options, + TextSpan? defaultSpan, + CancellationToken cancellationToken) + { + options = options ?? document.Project.Solution.Workspace.Options; + + if (defaultSpan == null) + { + var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false); + defaultSpan = this.GetDefaultItemSpan(text, position); + } + + var context = new CompletionContext(provider, document, position, defaultSpan.Value, triggerInfo, options, cancellationToken); await provider.ProvideCompletionsAsync(context).ConfigureAwait(false); return context; } diff --git a/src/Interactive/EditorFeatures/Core/Completion/AbstractReferenceDirectiveCompletionProvider.cs b/src/Interactive/EditorFeatures/Core/Completion/AbstractReferenceDirectiveCompletionProvider.cs index 8d333c310fb..d8962aea2ec 100644 --- a/src/Interactive/EditorFeatures/Core/Completion/AbstractReferenceDirectiveCompletionProvider.cs +++ b/src/Interactive/EditorFeatures/Core/Completion/AbstractReferenceDirectiveCompletionProvider.cs @@ -40,7 +40,8 @@ private static ICurrentWorkingDirectoryDiscoveryService GetFileSystemDiscoverySe private static readonly ImmutableArray s_filterRules = ImmutableArray.Empty; - private static readonly CompletionItemRules s_rules = CompletionItemRules.Create(filterCharacterRules: s_filterRules, commitCharacterRules: s_commitRules); + private static readonly CompletionItemRules s_rules = CompletionItemRules.Create( + filterCharacterRules: s_filterRules, commitCharacterRules: s_commitRules, enterKeyRule: EnterKeyRule.Never); public override async Task ProvideCompletionsAsync(CompletionContext context) { -- GitLab