private static int SmartSearch(SmartSearchOptions options) { InitSearch(options); SearchConfiguration config = LoadConfiguration(); string path = Directory.GetCurrentDirectory(); Project project = config.Projects.FirstOrDefault( p => path.StartsWith(p.Path, StringComparison.InvariantCultureIgnoreCase)); if (project == null) { throw new ArgumentException($"Current path is not under any known project. Please edit '{ConfigFilePath}'."); } FileFilter fileFilter = config.FileFilters.FirstOrDefault(filter => filter.Name.Equals(options.FileFilterName, StringComparison.InvariantCultureIgnoreCase)); if (fileFilter == null) { throw new ArgumentException($"File filter named '{options.FileFilterName}' does not exist. Please edit '{ConfigFilePath}'."); } var fileSelector = ExtensibleFileSelectorBuilder.NewFileSelector() .WithExcludedExtensions(config.ExcludedExtensions) .WithExcludedPaths(config.ExcludedPaths) .WithRegexFilter(fileFilter.Regex) .WithExclusionRegex(fileFilter.Exclusion) .WithMaxSize(config.MaxFileSize) .Build(); SmartContentSelector contentSelector = new SmartContentSelector(options.Query, options.CaseSensitive); string indexDirectory = _configPathResolver.GetIndexDir(project.Name, fileFilter.Index); var luceneSearcher = new LuceneSearcher(indexDirectory) { MaxSearchResults = Int32.MaxValue }; foreach (var result in luceneSearcher.SearchContentInFolder(path, fileSelector, contentSelector)) { _console.PrintSearchResult(result); } return(0); }