public CompiledTextSearchData Create(SearchParams searchParams, Func<FileName, bool> fileNamePathMatcher) { ParsedSearchString parsedSearchString; if (searchParams.Regex) { parsedSearchString = new ParsedSearchString( new ParsedSearchString.Entry { Text = searchParams.SearchString }, Enumerable.Empty<ParsedSearchString.Entry>(), Enumerable.Empty<ParsedSearchString.Entry>()); } else { var str = searchParams.SearchString ?? ""; if (str.Length < MinimumSearchPatternLength) { throw new RecoverableErrorException( string.Format( "Search pattern must contain at least {0} characters", MinimumSearchPatternLength)); } parsedSearchString = _searchStringParser.Parse(searchParams.SearchString ?? ""); } var searchContentsAlgorithms = CreateSearchAlgorithms( parsedSearchString, new SearchProviderOptions { MatchCase = searchParams.MatchCase, MatchWholeWord = searchParams.MatchWholeWord, UseRegex = searchParams.Regex, UseRe2Engine = searchParams.UseRe2Engine }); return new CompiledTextSearchData( parsedSearchString, searchContentsAlgorithms, fileNamePathMatcher); }
private IList<TextRange> PerformSearch( Func<FileContents> fileContentsFactory, string searchPattern) { var searchParams = new SearchParams { SearchString = searchPattern, MatchCase = true, MaxResults = 1000, Regex = false, UseRe2Engine = false, }; using (var searchData = _factory.Create(searchParams, x => true)) { var contents = fileContentsFactory(); var result = contents.FindAll(searchData, contents.TextRange, OperationProgressTracker.None); return result; } }
private static void VerifySearchCodeResponse( string searchPattern, Options options, int occurrenceCount, params int[] positionsAndLengths) { if (!_serverReadyEvent.WaitOne(TimeSpan.FromSeconds(5.0))) { Assert.Fail("Search engine did not load files within timeout. This is due to an error or a (very) slow file system."); } var searchParams = new SearchParams { SearchString = searchPattern, MaxResults = 2000, MatchCase = options.HasFlag(Options.MatchCase), Regex = options.HasFlag(Options.Regex), IncludeSymLinks = false, MatchWholeWord = options.HasFlag(Options.MatchWholeWord), UseRe2Engine = true, }; var searchResult = _searchEngine.SearchCode(searchParams); Assert.IsNotNull(searchResult); searchResult.Entries.ForAll((index, entry) => { Debug.WriteLine(string.Format("File name: \"{0}\"", entry.FileName)); entry.Spans.ForAll(span => { Assert.IsNotNull(span); Debug.WriteLine(string.Format(" Text position: offset={0}, length={1}, text=\"{2}\"", span.Position, span.Length, ExtractFileText(entry.FileName.FullPath, span))); if (positionsAndLengths != null && positionsAndLengths.Length > 0) { Assert.AreEqual(positionsAndLengths[index * 2], span.Position); Assert.AreEqual(positionsAndLengths[(index * 2) + 1], span.Length); } }); }); var hitCount = searchResult.Entries.Aggregate(0, (c, entry) => c += entry.Spans.Count); Assert.AreEqual(occurrenceCount, hitCount); }