From 7c28543da7d84f1a09667a38742738f160bdc543 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 17 Sep 2020 06:14:34 -0700 Subject: [PATCH] Supply completions for negative regex categories as well. --- ...harpCompletionCommandHandlerTests_Regex.vb | 24 +++++++++++++++++++ .../RegexEmbeddedCompletionProvider.cs | 19 +++++++-------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests_Regex.vb b/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests_Regex.vb index 5c372148250..d81a4e37d70 100644 --- a/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests_Regex.vb +++ b/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests_Regex.vb @@ -271,6 +271,30 @@ class c End Using End Function + + Public Async Function TestNegativeCategory(showCompletionInArgumentLists As Boolean) As Task + Using state = TestStateFactory.CreateCSharpTestState( + , showCompletionInArgumentLists:=showCompletionInArgumentLists) + + state.SendTypeChars("{") + Await state.AssertCompletionSession() + + Assert.True(state.GetCompletionItems().Any(Function(i) i.DisplayText = "IsGreek")) + + state.SendTab() + Await state.AssertNoCompletionSession() + End Using + End Function + Public Async Function NotInInterpolatedString(showCompletionInArgumentLists As Boolean) As Task Using state = TestStateFactory.CreateCSharpTestState( diff --git a/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/RegexEmbeddedCompletionProvider.cs b/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/RegexEmbeddedCompletionProvider.cs index 328161372a3..de4eea76461 100644 --- a/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/RegexEmbeddedCompletionProvider.cs +++ b/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/RegexEmbeddedCompletionProvider.cs @@ -259,20 +259,17 @@ private static void ProvideTopLevelCompletions(EmbeddedCompletionContext context var index = tree.Text.IndexOf(previousVirtualChar); if (index >= 2 && - tree.Text[index - 2] == '\\' && - tree.Text[index - 1] == 'p') + tree.Text[index - 2] == '\\') { - var slashChar = tree.Text[index - 1]; - var result = FindToken(tree.Root, slashChar); - if (result == null) + var escapeChar = tree.Text[index - 1]; + if (escapeChar == 'p' || escapeChar == 'P') { - return; - } + var result = FindToken(tree.Root, escapeChar); + if (result == null) + return; - var (parent, _) = result.Value; - if (parent is RegexEscapeNode) - { - ProvideEscapeCategoryCompletions(context); + if (result.Value.parent is RegexEscapeNode) + ProvideEscapeCategoryCompletions(context); } } } -- GitLab