diff --git a/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests_Regex.vb b/src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests_Regex.vb index 5c3721482500ed3e901a47c17d92ab78adda1bbb..d81a4e37d70d5b0c1e14db511592ec7d4bae6953 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 328161372a3fe96b956274c420fabc21fe2f9754..de4eea76461cc714bb1dd140d7e2746bd9a79dde 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); } } }