From 774fbec34293bbb5bd5349cdc8f205b4e50e69c4 Mon Sep 17 00:00:00 2001 From: Pilchie Date: Sat, 25 Apr 2015 13:44:48 -0700 Subject: [PATCH] Make C# snippet completion obey the "SendEnterThroughToEditor" option Use the standard logic to determine whether to send enter through to the editor, which requires using CSharpCompletionItems. Fixes internal bug #1140893. --- .../SnippetCompletionProviderTests.cs | 11 +++++++++++ .../CompletionProviders/SnippetCompletionProvider.cs | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SnippetCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SnippetCompletionProviderTests.cs index 6cd81d8249a..df2c93e7e85 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SnippetCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SnippetCompletionProviderTests.cs @@ -116,6 +116,17 @@ class C VerifyItemInLinkedFiles(markup, MockSnippetInfoService.SnippetShortcut, null); } + [WorkItem(1140893)] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public void CommitWithEnterObeysOption() + { + VerifySendEnterThroughToEnter("try", "tr", sendThroughEnterEnabled: true, expected: false); + VerifySendEnterThroughToEnter("try", "try", sendThroughEnterEnabled: true, expected: true); + + VerifySendEnterThroughToEnter("try", "tr", sendThroughEnterEnabled: false, expected: false); + VerifySendEnterThroughToEnter("try", "try", sendThroughEnterEnabled: false, expected: false); + } + private class MockSnippetInfoService : ISnippetInfoService { internal const string SnippetShortcut = "SnippetShortcut"; diff --git a/src/Features/CSharp/Completion/CompletionProviders/SnippetCompletionProvider.cs b/src/Features/CSharp/Completion/CompletionProviders/SnippetCompletionProvider.cs index 1d50ba9231b..00d1c6de3bf 100644 --- a/src/Features/CSharp/Completion/CompletionProviders/SnippetCompletionProvider.cs +++ b/src/Features/CSharp/Completion/CompletionProviders/SnippetCompletionProvider.cs @@ -47,7 +47,7 @@ public override bool IsCommitCharacter(CompletionItem completionItem, char ch, s public override bool SendEnterThroughToEditor(CompletionItem completionItem, string textTypedSoFar) { - return false; + return CompletionUtilities.SendEnterThroughToEditor(completionItem, textTypedSoFar); } protected override async Task> GetItemsWorkerAsync(Document document, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken) @@ -138,11 +138,12 @@ private async Task> GetSnippetCompletionItemsAsync(W } var text = await semanticModel.SyntaxTree.GetTextAsync(cancellationToken).ConfigureAwait(false); - return snippets.Select(snippet => new CompletionItem( + return snippets.Select(snippet => new CSharpCompletionItem( + workspace, this, displayText: isPreProcessorContext ? snippet.Shortcut.Substring(1) : snippet.Shortcut, sortText: isPreProcessorContext ? snippet.Shortcut.Substring(1) : snippet.Shortcut, - description: (snippet.Title + Environment.NewLine + snippet.Description).ToSymbolDisplayParts(), + descriptionFactory: c => Task.FromResult((snippet.Title + Environment.NewLine + snippet.Description).ToSymbolDisplayParts()), filterSpan: CompletionUtilities.GetTextChangeSpan(text, position), glyph: Glyph.Snippet, shouldFormatOnCommit: service.ShouldFormatSnippet(snippet))); -- GitLab