4 types derived from RegexQuery
Microsoft.CodeAnalysis.Workspaces (4)
PatternMatching\RegexQuery.cs (4)
41public sealed class All(ImmutableArray<RegexQuery> children) : RegexQuery 51public sealed class Any(ImmutableArray<RegexQuery> children) : RegexQuery 64public sealed class Literal : RegexQuery 82public sealed class None : RegexQuery
208 references to RegexQuery
IdeCoreBenchmarks (4)
NavigateToRegexPreFilterBenchmarks.cs (4)
24private RegexQuery _simpleQuery = null!; 25private RegexQuery _alternationQuery = null!; 26private RegexQuery _complexQuery = null!; 27private RegexQuery _noMatchQuery = null!;
Microsoft.CodeAnalysis.Features (37)
NavigateTo\AbstractNavigateToSearchService.InProcess.cs (2)
50/// the pattern contains regex metacharacters. Also compiles a <see cref="RegexQuery"/> for 68var regexQuery = container is null
NavigateTo\RegexQueryCompiler.cs (34)
15/// Compiles a regex pattern string into a <see cref="RegexQuery"/> tree that can be evaluated 24/// quantifiers) produce <see cref="RegexQuery.None"/>, which means "I can't tell — don't reject 25/// on my account." If the entire compiled tree is <see cref="RegexQuery.None"/> (e.g. for <c>.*</c>), 26/// <see cref="RegexQuery.HasLiterals"/> is <see langword="false"/> and the caller skips pre-filtering 33/// <see cref="RegexQuery"/> tree. Returns <see langword="null"/> if the pattern is not 36public static RegexQuery? Compile(string pattern) 47/// Compiles an already-parsed regex AST into an optimized <see cref="RegexQuery"/> tree. 53/// When non-null, the returned tree is guaranteed to contain only <see cref="RegexQuery.All"/>, 54/// <see cref="RegexQuery.Any"/>, and <see cref="RegexQuery.Literal"/> nodes — no 55/// <see cref="RegexQuery.None"/> nodes survive optimization (see 56/// <see cref="RegexQuery.Optimize"/>). Callers can rely on this when traversing the tree. 58public static RegexQuery? Compile(RegexTree tree) 60var raw = CompileNode(tree.Root.Expression); 61var optimized = RegexQuery.Optimize(raw); 65private static RegexQuery CompileNode(RegexNode node) 74RegexWildcardNode => RegexQuery.None.Instance, 87RegexZeroOrMoreQuantifierNode => RegexQuery.None.Instance, 88RegexZeroOrOneQuantifierNode => RegexQuery.None.Instance, 106_ => RegexQuery.None.Instance, 110private static RegexQuery CompileAlternation(RegexAlternationNode alternation) 115var children = new FixedSizeArrayBuilder<RegexQuery>(alternation.SequenceList.Length); 119return new RegexQuery.Any(children.MoveToImmutable()); 122private static RegexQuery CompileSequence(RegexSequenceNode sequence) 127var children = new FixedSizeArrayBuilder<RegexQuery>(sequence.Children.Length); 131return new RegexQuery.All(children.MoveToImmutable()); 134private static RegexQuery CompileText(RegexTextNode text) 152return RegexQuery.None.Instance; 154return new RegexQuery.Literal(builder.ToString()); 157private static RegexQuery CompileSimpleEscape(RegexSimpleEscapeNode _) 161return RegexQuery.None.Instance; 164private static RegexQuery CompileNumericQuantifier(RegexExpressionNode expression, EmbeddedSyntaxToken<RegexKind> firstNumberToken) 172return RegexQuery.None.Instance;
NavigateTo\SearchPatternInfo.cs (1)
17RegexQuery? RegexQuery)
Microsoft.CodeAnalysis.Features.UnitTests (113)
NavigateTo\RegexQueryCompilerTests.cs (113)
19var query = RegexQueryCompiler.Compile("ReadLine"); 20var literal = Assert.IsType<RegexQuery.Literal>(query); 28var query = RegexQueryCompiler.Compile("(Read|Write)Line"); 29var all = Assert.IsType<RegexQuery.All>(query); 32var any = Assert.IsType<RegexQuery.Any>(all.Children[0]); 34Assert.Equal("read", Assert.IsType<RegexQuery.Literal>(any.Children[0]).Text); 35Assert.Equal("write", Assert.IsType<RegexQuery.Literal>(any.Children[1]).Text); 37Assert.Equal("line", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text); 44var query = RegexQueryCompiler.Compile("Goo.*Bar"); 45var all = Assert.IsType<RegexQuery.All>(query); 47Assert.Equal("goo", Assert.IsType<RegexQuery.Literal>(all.Children[0]).Text); 48Assert.Equal("bar", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text); 55var query = RegexQueryCompiler.Compile("Goo+"); 63var query = RegexQueryCompiler.Compile(@"Goo\.Bar"); 72var query = RegexQueryCompiler.Compile(@"\[Test\]"); 81var query = RegexQueryCompiler.Compile("(?:Read|Write)"); 82var any = Assert.IsType<RegexQuery.Any>(query); 84Assert.Equal("read", Assert.IsType<RegexQuery.Literal>(any.Children[0]).Text); 85Assert.Equal("write", Assert.IsType<RegexQuery.Literal>(any.Children[1]).Text); 92var query = RegexQueryCompiler.Compile("(Go){3}"); 94Assert.Equal("go", Assert.IsType<RegexQuery.Literal>(query).Text); 101var query = RegexQueryCompiler.Compile("(Go){1,}"); 103Assert.Equal("go", Assert.IsType<RegexQuery.Literal>(query).Text); 110var query = RegexQueryCompiler.Compile("(Go){1,5}"); 112Assert.Equal("go", Assert.IsType<RegexQuery.Literal>(query).Text); 174var inner = new RegexQuery.All([new RegexQuery.Literal("aa"), new RegexQuery.Literal("bb")]); 175var outer = new RegexQuery.All([inner, new RegexQuery.Literal("cc")]); 177var optimized = RegexQuery.Optimize(outer); 178var all = Assert.IsType<RegexQuery.All>(optimized); 180Assert.Equal("aa", Assert.IsType<RegexQuery.Literal>(all.Children[0]).Text); 181Assert.Equal("bb", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text); 182Assert.Equal("cc", Assert.IsType<RegexQuery.Literal>(all.Children[2]).Text); 188var inner = new RegexQuery.Any([new RegexQuery.Literal("aa"), new RegexQuery.Literal("bb")]); 189var outer = new RegexQuery.Any([inner, new RegexQuery.Literal("cc")]); 191var optimized = RegexQuery.Optimize(outer); 192var any = Assert.IsType<RegexQuery.Any>(optimized); 199var query = new RegexQuery.All([ 200new RegexQuery.Literal("aa"), 201RegexQuery.None.Instance, 202new RegexQuery.Literal("bb"), 205var optimized = RegexQuery.Optimize(query); 206var all = Assert.IsType<RegexQuery.All>(optimized); 208Assert.Equal("aa", Assert.IsType<RegexQuery.Literal>(all.Children[0]).Text); 209Assert.Equal("bb", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text); 215var query = new RegexQuery.Any([ 216new RegexQuery.Literal("aa"), 217RegexQuery.None.Instance, 220var optimized = RegexQuery.Optimize(query); 221Assert.IsType<RegexQuery.None>(optimized); 227var query = new RegexQuery.All([new RegexQuery.Literal("aa")]); 228var optimized = RegexQuery.Optimize(query); 229Assert.Equal("aa", Assert.IsType<RegexQuery.Literal>(optimized).Text); 235var query = new RegexQuery.Any([new RegexQuery.Literal("aa")]); 236var optimized = RegexQuery.Optimize(query); 237Assert.Equal("aa", Assert.IsType<RegexQuery.Literal>(optimized).Text); 243var query = new RegexQuery.All([RegexQuery.None.Instance, RegexQuery.None.Instance]); 244var optimized = RegexQuery.Optimize(query); 245Assert.IsType<RegexQuery.None>(optimized); 271Assert.True(new RegexQuery.Literal("goo").HasLiterals); 277Assert.False(RegexQuery.None.Instance.HasLiterals); 283var query = new RegexQuery.All([new RegexQuery.Literal("goo"), RegexQuery.None.Instance]); 290var query = new RegexQuery.Any([new RegexQuery.Literal("goo"), new RegexQuery.Literal("bar")]); 297var query = new RegexQuery.All([RegexQuery.None.Instance]); 308var query = RegexQueryCompiler.Compile("(Read|Write)Line")!; 311var all = Assert.IsType<RegexQuery.All>(query); 313Assert.IsType<RegexQuery.Any>(all.Children[0]); 314Assert.IsType<RegexQuery.Literal>(all.Children[1]); 322var query = RegexQueryCompiler.Compile("Read(Line)?")!; 324Assert.Equal("read", Assert.IsType<RegexQuery.Literal>(query).Text); 331var query = RegexQueryCompiler.Compile("Goo.*Bar")!; 332var all = Assert.IsType<RegexQuery.All>(query); 334Assert.Equal("goo", Assert.IsType<RegexQuery.Literal>(all.Children[0]).Text); 335Assert.Equal("bar", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text); 342var query = RegexQueryCompiler.Compile("Goo.+Bar")!; 343var all = Assert.IsType<RegexQuery.All>(query); 345Assert.Equal("goo", Assert.IsType<RegexQuery.Literal>(all.Children[0]).Text); 346Assert.Equal("bar", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text); 353var query = RegexQueryCompiler.Compile("(Get|Set)(Value|Item)s?")!; 356var all = Assert.IsType<RegexQuery.All>(query); 359var first = Assert.IsType<RegexQuery.Any>(all.Children[0]); 360Assert.Equal("get", Assert.IsType<RegexQuery.Literal>(first.Children[0]).Text); 361Assert.Equal("set", Assert.IsType<RegexQuery.Literal>(first.Children[1]).Text); 363var second = Assert.IsType<RegexQuery.Any>(all.Children[1]); 364Assert.Equal("value", Assert.IsType<RegexQuery.Literal>(second.Children[0]).Text); 365Assert.Equal("item", Assert.IsType<RegexQuery.Literal>(second.Children[1]).Text); 376var query = RegexQueryCompiler.Compile("^Goo$")!; 377Assert.Equal("goo", Assert.IsType<RegexQuery.Literal>(query).Text); 384var query = RegexQueryCompiler.Compile("Read.Line")!; 385var all = Assert.IsType<RegexQuery.All>(query); 387Assert.Equal("read", Assert.IsType<RegexQuery.Literal>(all.Children[0]).Text); 388Assert.Equal("line", Assert.IsType<RegexQuery.Literal>(all.Children[1]).Text);
Microsoft.CodeAnalysis.Workspaces (24)
FindSymbols\TopLevelSyntaxTree\NavigateToSearchIndex.cs (3)
40/// Evaluates a compiled <see cref="PatternMatching.RegexQuery"/> against this document's indexed 43public bool RegexQueryCheckPasses(PatternMatching.RegexQuery query) 84public bool RegexQueryCheckPasses(PatternMatching.RegexQuery query)
FindSymbols\TopLevelSyntaxTree\NavigateToSearchIndex.NavigateToSearchInfo.cs (7)
795/// Evaluates a <see cref="RegexQuery"/> tree against this document's indexed bigrams and trigrams. 799public bool RegexQueryCheckPasses(PatternMatching.RegexQuery query) 803case PatternMatching.RegexQuery.All all: 804foreach (var child in all.Children) 812case PatternMatching.RegexQuery.Any any: 813foreach (var child in any.Children) 821case PatternMatching.RegexQuery.Literal literal:
PatternMatching\RegexQuery.cs (14)
41public sealed class All(ImmutableArray<RegexQuery> children) : RegexQuery 43public readonly ImmutableArray<RegexQuery> Children = children; 51public sealed class Any(ImmutableArray<RegexQuery> children) : RegexQuery 53public readonly ImmutableArray<RegexQuery> Children = children; 105public static RegexQuery Optimize(RegexQuery query) 114static RegexQuery OptimizeAll(All all) 116using var _ = Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder<RegexQuery>.GetInstance(out var children); 118foreach (var child in all.Children) 120var optimized = Optimize(child); 145static RegexQuery OptimizeAny(Any any) 147using var _ = Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder<RegexQuery>.GetInstance(out var children); 149foreach (var child in any.Children) 151var optimized = Optimize(child);
Microsoft.CodeAnalysis.Workspaces.UnitTests (30)
FindSymbols\RegexPreFilterTests.cs (30)
39var query = new RegexQuery.Literal("readline"); 47var query = new RegexQuery.Literal("read"); 55var query = new RegexQuery.All([ 56new RegexQuery.Literal("read"), 57new RegexQuery.Literal("line"), 66var query = new RegexQuery.Any([ 67new RegexQuery.Literal("read"), 68new RegexQuery.Literal("write"), 80var query = new RegexQuery.Literal("readline"); 88var query = new RegexQuery.All([ 89new RegexQuery.Any([ 90new RegexQuery.Literal("read"), 91new RegexQuery.Literal("write"), 93new RegexQuery.Literal("line"), 103var query = new RegexQuery.All([ 104new RegexQuery.Literal("goo"), 105new RegexQuery.Literal("bar"), 118var query = new RegexQuery.Literal("xyz"); 126var query = new RegexQuery.All([ 127new RegexQuery.Literal("read"), 128new RegexQuery.Literal("xyz"), 137var query = new RegexQuery.Any([ 138new RegexQuery.Literal("xyz"), 139new RegexQuery.Literal("qwerty"), 148var query = new RegexQuery.Literal("goo"); 156var query = new RegexQuery.Literal("abc"); 177var query = new RegexQuery.Literal("bargoo"); 190var query = new RegexQuery.Literal("ooba"); 201var query = new RegexQuery.Literal("defabc"); 212var query = new RegexQuery.Literal("γδ");