From f418671fb9686bd3ca4319c1b6156eee1b407cbd Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 11 Apr 2017 15:44:23 -0700 Subject: [PATCH] Don't show enum completion if text is typed after dot (#18577) Don't show enum completion if text is typed after dot --- ...ompletionListTagCompletionProviderTests.cs | 27 +++++++++++++++++ .../SymbolCompletionProviderTests.cs | 29 +++++++++++++++++++ ...mAndCompletionListTagCompletionProvider.cs | 5 +++- 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProviderTests.cs index a460768ca1f..5b99c512368 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProviderTests.cs @@ -488,6 +488,33 @@ enum E B, } } +"; + await VerifyNoItemsExistAsync(markup); + } + + [WorkItem(18359, "https://github.com/dotnet/roslyn/issues/18359")] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public async Task NotAfterDotWithTextTyped() + { + var markup = +@"namespace ConsoleApplication253 +{ + class Program + { + static void Main(string[] args) + { + M(E.a$$) + } + + static void M(E e) { } + } + + enum E + { + A, + B, + } +} "; await VerifyNoItemsExistAsync(markup); } diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs index aec32bd0980..8fd7877dd37 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs @@ -9077,5 +9077,34 @@ Action Local(string x, ref var @class, params Func f) } }", "Local", "Action Local(string x, ref var @class, params Func f)"); } + + [WorkItem(18359, "https://github.com/dotnet/roslyn/issues/18359")] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public async Task EnumMemberAfterDot() + { + var markup = +@"namespace ConsoleApplication253 +{ + class Program + { + static void Main(string[] args) + { + M(E.$$) + } + + static void M(E e) { } + } + + enum E + { + A, + B, + } +} +"; + // VerifyItemExistsAsync also tests with the item typed. + await VerifyItemExistsAsync(markup, "A"); + await VerifyItemExistsAsync(markup, "B"); + } } } \ No newline at end of file diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs index f49d84f8d0e..cb53f35a8b3 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs @@ -52,7 +52,9 @@ public override async Task ProvideCompletionsAsync(CompletionContext context) return; } - var token = tree.FindTokenOnLeftOfPosition(position, cancellationToken); + var token = tree.FindTokenOnLeftOfPosition(position, cancellationToken) + .GetPreviousTokenIfTouchingWord(position); + if (token.IsMandatoryNamedParameterPosition()) { return; @@ -61,6 +63,7 @@ public override async Task ProvideCompletionsAsync(CompletionContext context) // Don't show up within member access // This previously worked because the type inferrer didn't work // in member access expressions. + // The regular SymbolCompletionProvider will handle completion after . if (token.IsKind(SyntaxKind.DotToken)) { return; -- GitLab