diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/AbstractCSharpCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/AbstractCSharpCompletionProviderTests.cs index 3b3b159ea54cca40a617353b93112e7b7fc39736..379668ac18f338bca64e6655affc75e201475a39 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 b7e7d5d36ebad7c8d2ef0bbe7a8bd090d692dcf3..d8c08578cf2345c0d656c7c55fbafe024370d710 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 692595df813a05d213e784b3bd08a568bb3036f4..253078d572e4860dbf5cb74be58b5c3fd765f1c2 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 d3f0c958ae2624de6bb6a3846c8916c6e6179d7f..3af70e51beaa9e8b00ea8e1eb27c8e11036b08cf 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 6369990d64ab4c61411c2d96ab011217786fec97..9883a440fc191f1d99a1b754168d24a35009a029 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 40db2eba6da43e2ea25d215b1e728c99631d2186..8a8d48d7ff59790aa394c57fe7584269d51b9bef 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 51b4dd76db51aae56fd3b6a5614bea3d0a644456..b4e70192d448cef9f4ec6650e8a7c809594619be 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 c7958b00b1c4ee5fdabde74d8cca47e7c7a7d5f0..687f399a469879125933281d097f2ec0006ace4e 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 bb5da8ee21d194f4f11a758fcc5565b008d78b9f..d393f3daa829efff361719757b30d3fb0a5bfe2a 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 04cc58b940ab44630ac2c880a3733dda08e14dab..5562af6653c7c28f389aae3c48b9a709e6066130 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 a30f1b0f3bdbdd2ebbdea3fa4fd83a10fc856162..acdd8dc7270436a498879a2e24c9f4694f612456 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 4d44b10a50541541cd3de6d2e277bc4f0c7477a1..76abd17ffaefa90a1bffc4d00b71b36d79c2cf7f 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 56536d16a0a25697d3b9eb7447c05acfd2cf7da2..d0c49dfc4d1e654bb0ab9b6b1f1679dce12e765a 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 ab8d2986551d8e6b75587efbb8ed7784c0355088..5924ec733076d7c72886a173e07d47318d569444 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 a1289ce9c3186e919f9f4a98c2363d0b420328b9..64a4c2013f5f5c2b602d8c04092520d4984e4c00 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 3533f5f8e3d9b2c81c4f992213f1629ae687494f..4d27b806a1c4f1cd8f26d2c1e73edb0f6450d097 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 532886f058ca4237504b83e8ecd8fe952366ef60..15f211222ab30c0a0daa2086a86861394616a8ea 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 c2300cd48a83e4ba676fcd41fb36e0faeb6a91df..b25bcf393e7aab9dbf09d6aee5122a96f1599f1f 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 9ac0465867d9fcc44c3921510f32643fdee97ca3..3281d3122a9ef2a7b6345f59565750272ef3fd7b 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 78b8c3b5f5dcab116f4c8665ea69276b38a56450..553ad04a246ef66f0b6dab277013fb4fd87f57ef 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 ae628ac4cbbb843571baa573ad4ac0748dbf7857..8a2e53afba7898e1e37993e94f121b233ad3da7e 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 f85ffb392a787bcea6c2d7e1ecfcfa037b5cbad2..6838be4de173e1c7991b6961176e6c0a437babbd 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 dfb1065b8a4b2cad0ee059617932ea83e2e2a5c6..99d0d41fcf07f2828c373f683a8791f760ba94eb 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 8d333c310fb6027c18314d5c0ce1aa7e32da805d..d8962aea2ec569c8ad706f406fd7428ac8f4a5fd 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) {