public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return(Task.Run(delegate { var files = AllFiles.ToList(); var matcher = StringMatcher.GetMatcher(pattern.Pattern, false); var savedMatches = new Dictionary <string, MatchResult> (); foreach (ProjectFile file in files) { if (token.IsCancellationRequested) { break; } int rank; string matchString = System.IO.Path.GetFileName(file.FilePath); if (MatchName(savedMatches, matcher, matchString, out rank)) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, matchString, rank, file, true)); } matchString = FileSearchResult.GetRelProjectPath(file); if (MatchName(savedMatches, matcher, matchString, out rank)) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, matchString, rank, file, true)); } } }, token)); }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return(Task.Run(async delegate { List <Tuple <string, string, ProjectFile> > files; //This lock is here in case user quickly types 5 letters which triggers 5 threads //we don't want to use all CPU doing same thing, instead 1st one will create cache, others will wait here //and then all will use cached version... bool locked = false; try { locked = await allFilesLock.WaitAsync(System.Threading.Timeout.Infinite, token).ConfigureAwait(false); files = allFilesCache = allFilesCache ?? GenerateAllFiles(); if (token.IsCancellationRequested) { return; } } finally { if (locked) { allFilesLock.Release(); } } var matcher = StringMatcher.GetMatcher(pattern.Pattern, false); var savedMatches = new Dictionary <string, MatchResult> (files.Count * 2); foreach (var file in files) { if (token.IsCancellationRequested) { break; } int rank1; int rank2; var match1 = MatchName(savedMatches, matcher, file.Item1, out rank1); var match2 = MatchName(savedMatches, matcher, file.Item2, out rank2); if (match1 && match2) { if (rank1 > rank2 || (rank1 == rank2 && String.CompareOrdinal(file.Item1, file.Item2) > 0)) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item1, rank1, file.Item3)); } else { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item2, rank2, file.Item3)); } } else if (match1) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item1, rank1, file.Item3)); } else if (match2) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item2, rank2, file.Item3)); } } }, token)); }
public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (IsProjectSelected ()) { searchResultCallback.ReportResult (new SearchPackageSearchResult (pattern)); } return SpecializedTasks.EmptyTask; }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (pattern.HasLineNumber) { return(Task.CompletedTask); } var route = new CommandTargetRoute(IdeApp.CommandService.LastCommandTarget); var matcher = StringMatcher.GetMatcher(pattern.Pattern, false); foreach (var cmd in GetAllCommands()) { if (token.IsCancellationRequested) { break; } var matchString = cmd.DisplayName; if (matcher.CalcMatchRank(matchString, out var rank)) { if ((cmd as ActionCommand)?.RuntimeAddin == currentRuntimeAddin) { rank += 1; // we prefer commands comming from the addin } searchResultCallback.ReportResult(new CommandResult(cmd, null, route, pattern.Pattern, matchString, rank)); } } return(Task.CompletedTask); }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return(Task.Run(delegate { try { if (pattern.HasLineNumber) { return; } CommandTargetRoute route = new CommandTargetRoute(MainToolbar.LastCommandTarget); var matcher = StringMatcher.GetMatcher(pattern.Pattern, false); foreach (var cmdTuple in allCommands) { token.ThrowIfCancellationRequested(); var cmd = cmdTuple.Item1; var matchString = cmdTuple.Item2; int rank; if (matcher.CalcMatchRank(matchString, out rank)) { searchResultCallback.ReportResult(new CommandResult(cmd, null, route, pattern.Pattern, matchString, rank)); } } } catch (OperationCanceledException) { } })); }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (IdeApp.ProjectOperations.CurrentSelectedSolution != null) { searchResultCallback.ReportResult(new SearchInSolutionSearchResult(pattern)); } return(SpecializedTasks.EmptyTask); }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (IsProjectSelected()) { searchResultCallback.ReportResult(new SearchPackageSearchResult(pattern)); } return(Task.CompletedTask); }
public override Task GetResults( ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (pattern.Tag == null || IsValidTag(pattern.Tag)) { searchResultCallback.ReportResult(new PortableClassLibrarySearchResult()); } return(Task.FromResult(1)); }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return(Task.Run(delegate { var files = allFilesCache = allFilesCache ?? GenerateAllFiles(); var matcher = StringMatcher.GetMatcher(pattern.Pattern, false); var savedMatches = new Dictionary <string, MatchResult> (); foreach (var file in files) { if (token.IsCancellationRequested) { break; } int rank1; int rank2; var match1 = MatchName(savedMatches, matcher, file.Item1, out rank1); var match2 = MatchName(savedMatches, matcher, file.Item2, out rank2); if (match1 && match2) { if (rank1 > rank2 || (rank1 == rank2 && String.CompareOrdinal(file.Item1, file.Item2) > 0)) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item1, rank1, file.Item3)); } else { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item2, rank2, file.Item3)); } } else if (match1) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item1, rank1, file.Item3)); } else if (match2) { searchResultCallback.ReportResult(new FileSearchResult(pattern.Pattern, file.Item2, rank2, file.Item3)); } } }, token)); }
public override Task GetResults( ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (pattern.Tag == null || IsValidTag(pattern.Tag)) { var command = new InstallPackageCommand(pattern.Pattern); var result = new InstallPackageSearchResult(command); if (result.CanBeDisplayed()) { searchResultCallback.ReportResult(result); } } return(Task.FromResult(0)); }
async Task GetResults( LanguageClientSession session, ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { SymbolInformation[] results = await session.GetWorkspaceSymbols(pattern.Pattern, token).ConfigureAwait(false); if (results != null && results.Length > 0) { foreach (var result in results) { var searchResult = new WorkspaceSymbolSearchResult(pattern.Pattern, result); searchResultCallback.ReportResult(searchResult); } } }
public override Task GetResults( ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (!CanSearch(pattern.Tag)) { return(Task.FromResult(0)); } return(Task.Factory.StartNew(() => { var dataSource = new PaketSearchDataSource(pattern); foreach (PaketSearchResult result in dataSource.GetResults()) { searchResultCallback.ReportResult(result); } })); }
void AllResults(ISearchResultCallback searchResultCallback, WorkerResult newResult, IReadOnlyList <DeclaredSymbolInfo> allTypes, CancellationToken token) { // Search Types newResult.filteredSymbols = new List <DeclaredSymbolInfo> (); foreach (var type in allTypes) { if (token.IsCancellationRequested) { newResult.filteredSymbols = null; return; } SearchResult curResult = newResult.CheckType(type); if (curResult != null) { newResult.filteredSymbols.Add(type); searchResultCallback.ReportResult(curResult); } } }
void AllResults(ISearchResultCallback searchResultCallback, WorkerResult lastResult, WorkerResult newResult, IEnumerable <DeclaredSymbolInfo> completeTypeList, CancellationToken token) { // Search Types newResult.filteredSymbols = new List <DeclaredSymbolInfo> (); bool startsWithLastFilter = lastResult.pattern != null && newResult.pattern.StartsWith(lastResult.pattern, StringComparison.Ordinal) && lastResult.filteredSymbols != null; var allTypes = startsWithLastFilter ? lastResult.filteredSymbols : completeTypeList; foreach (var type in allTypes) { if (token.IsCancellationRequested) { newResult.filteredSymbols = null; return; } SearchResult curResult = newResult.CheckType(type); if (curResult != null) { newResult.filteredSymbols.Add(type); searchResultCallback.ReportResult(curResult); } } }
public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { if (IdeApp.ProjectOperations.CurrentSelectedSolution != null) searchResultCallback.ReportResult (new SearchInSolutionSearchResult (pattern)); return SpecializedTasks.EmptyTask; }
void AllResults (ISearchResultCallback searchResultCallback, WorkerResult lastResult, WorkerResult newResult, IReadOnlyList<DeclaredSymbolInfo> completeTypeList, CancellationToken token) { // Search Types newResult.filteredSymbols = new List<DeclaredSymbolInfo> (); bool startsWithLastFilter = lastResult.pattern != null && newResult.pattern.StartsWith (lastResult.pattern, StringComparison.Ordinal) && lastResult.filteredSymbols != null; var allTypes = startsWithLastFilter ? lastResult.filteredSymbols : completeTypeList; foreach (var type in allTypes) { if (token.IsCancellationRequested) { newResult.filteredSymbols = null; return; } SearchResult curResult = newResult.CheckType (type); if (curResult != null) { newResult.filteredSymbols.Add (type); searchResultCallback.ReportResult (curResult); } } }
public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return Task.Run (delegate { List<Tuple<string, string, ProjectFile>> files; //This lock is here in case user quickly types 5 letters which triggers 5 threads //we don't want to use all CPU doing same thing, instead 1st one will create cache, others will wait here //and then all will use cached version... lock (allFilesLock) { files = allFilesCache = allFilesCache ?? GenerateAllFiles (); } var matcher = StringMatcher.GetMatcher (pattern.Pattern, false); var savedMatches = new Dictionary<string, MatchResult> (files.Count * 2); foreach (var file in files) { if (token.IsCancellationRequested) break; int rank1; int rank2; var match1 = MatchName (savedMatches, matcher, file.Item1, out rank1); var match2 = MatchName (savedMatches, matcher, file.Item2, out rank2); if (match1 && match2) { if (rank1 > rank2 || (rank1 == rank2 && String.CompareOrdinal (file.Item1, file.Item2) > 0)) { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item1, rank1, file.Item3)); } else { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item2, rank2, file.Item3)); } } else if (match1) { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item1, rank1, file.Item3)); } else if (match2) { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item2, rank2, file.Item3)); } } }, token); }
public override Task GetResults(ISearchResultCallback searchResultCallback, SearchPopupSearchPattern searchPattern, CancellationToken token) { if (string.IsNullOrEmpty(searchPattern.Pattern)) { return(Task.CompletedTask); } if (searchPattern.Tag != null && !tags.Contains(searchPattern.Tag) || searchPattern.HasLineNumber) { return(Task.CompletedTask); } return(Task.Run(async delegate { try { var kinds = GetTagKinds(searchPattern.Tag); // Maybe use language services instead of AbstractNavigateToSearchService var aggregatedResults = await Task.WhenAll(TypeSystemService.AllWorkspaces .Select(ws => ws.CurrentSolution) .SelectMany(sol => sol.Projects) .Select(async proj => { using (proj.Solution.Services.CacheService?.EnableCaching(proj.Id)) { var searchService = TryGetNavigateToSearchService(proj); if (searchService == null) { return ImmutableArray <INavigateToSearchResult> .Empty; } return await searchService.SearchProjectAsync(proj, searchPattern.Pattern, kinds ?? searchService.KindsProvided, token).ConfigureAwait(false); } }) ).ConfigureAwait(false); foreach (var results in aggregatedResults) { foreach (var result in results) { int laneLength = result.NameMatchSpans.Length; int index = laneLength > 0 ? result.NameMatchSpans [0].Start : -1; int rank = 0; if (result.MatchKind == NavigateToMatchKind.Exact) { rank = int.MaxValue; } else { int patternLength = searchPattern.Pattern.Length; rank = searchPattern.Pattern.Length - result.Name.Length; rank -= index; rank -= laneLength * 100; // Favor matches with less splits. That is, 'abc def' is better than 'ab c def'. int baseRank = (patternLength - laneLength - 1) * 5000; // First matching letter close to the begining is better // The more matched letters the better rank = baseRank - (index + (laneLength - patternLength)); // rank up matches which start with a filter substring if (index == 0) { rank += result.NameMatchSpans [0].Length * 50; } } if (!result.IsCaseSensitive) { rank /= 2; } searchResultCallback.ReportResult(new DeclaredSymbolInfoResult( searchPattern.Pattern, result.Name, rank, result )); } } } catch { token.ThrowIfCancellationRequested(); throw; } }, token)); }
void AllResults(ISearchResultCallback searchResultCallback, WorkerResult lastResult, WorkerResult newResult, IReadOnlyList <DeclaredSymbolInfo> completeTypeList, CancellationToken token) { if (newResult.isGotoFilePattern) { return; } uint x = 0; // Search Types newResult.filteredSymbols = new List <DeclaredSymbolInfo> (); bool startsWithLastFilter = lastResult.pattern != null && newResult.pattern.StartsWith(lastResult.pattern, StringComparison.Ordinal) && lastResult.filteredSymbols != null; var allTypes = startsWithLastFilter ? lastResult.filteredSymbols : completeTypeList; foreach (var type in allTypes) { if (unchecked (x++) % 100 == 0 && token.IsCancellationRequested) { newResult.filteredSymbols = null; return; } if (type.Kind == DeclaredSymbolInfoKind.Constructor || type.Kind == DeclaredSymbolInfoKind.Module || type.Kind == DeclaredSymbolInfoKind.Indexer) { continue; } if (newResult.Tag != null) { if ((newResult.Tag == "type" || newResult.Tag == "t") && type.Kind != DeclaredSymbolInfoKind.Class && type.Kind != DeclaredSymbolInfoKind.Struct && type.Kind != DeclaredSymbolInfoKind.Interface && type.Kind != DeclaredSymbolInfoKind.Enum && type.Kind != DeclaredSymbolInfoKind.Delegate) { continue; } if (newResult.Tag == "class" && type.Kind != DeclaredSymbolInfoKind.Class) { continue; } if (newResult.Tag == "struct" && type.Kind != DeclaredSymbolInfoKind.Struct) { continue; } if (newResult.Tag == "interface" && type.Kind != DeclaredSymbolInfoKind.Interface) { continue; } if (newResult.Tag == "enum" && type.Kind != DeclaredSymbolInfoKind.Enum) { continue; } if (newResult.Tag == "delegate" && type.Kind != DeclaredSymbolInfoKind.Delegate) { continue; } if ((newResult.Tag == "member" || newResult.Tag == "m") && type.Kind != DeclaredSymbolInfoKind.Method && type.Kind != DeclaredSymbolInfoKind.Property && type.Kind != DeclaredSymbolInfoKind.Field && type.Kind != DeclaredSymbolInfoKind.Event) { continue; } if (newResult.Tag == "method" && type.Kind != DeclaredSymbolInfoKind.Method) { continue; } if (newResult.Tag == "property" && type.Kind != DeclaredSymbolInfoKind.Property) { continue; } if (newResult.Tag == "field" && type.Kind != DeclaredSymbolInfoKind.Field) { continue; } if (newResult.Tag == "event" && type.Kind != DeclaredSymbolInfoKind.Event) { continue; } } SearchResult curResult = newResult.CheckType(type); if (curResult != null) { newResult.filteredSymbols.Add(type); newResult.results.AddResult(curResult); searchResultCallback.ReportResult(curResult); } } }
public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return Task.Run (delegate { try { if (pattern.HasLineNumber) return; CommandTargetRoute route = new CommandTargetRoute (MainToolbar.LastCommandTarget); var matcher = StringMatcher.GetMatcher (pattern.Pattern, false); foreach (var cmdTuple in allCommands) { token.ThrowIfCancellationRequested (); var cmd = cmdTuple.Item1; var matchString = cmdTuple.Item2; int rank; if (matcher.CalcMatchRank (matchString, out rank)) searchResultCallback.ReportResult (new CommandResult (cmd, null, route, pattern.Pattern, matchString, rank)); } } catch (OperationCanceledException) { } }); }
void AllResults (ISearchResultCallback searchResultCallback, WorkerResult lastResult, WorkerResult newResult, IReadOnlyList<DeclaredSymbolInfo> completeTypeList, CancellationToken token) { if (newResult.isGotoFilePattern) return; uint x = 0; // Search Types newResult.filteredSymbols = new List<DeclaredSymbolInfo> (); bool startsWithLastFilter = lastResult.pattern != null && newResult.pattern.StartsWith (lastResult.pattern, StringComparison.Ordinal) && lastResult.filteredSymbols != null; var allTypes = startsWithLastFilter ? lastResult.filteredSymbols : completeTypeList; foreach (var type in allTypes) { if (unchecked(x++) % 100 == 0 && token.IsCancellationRequested) { newResult.filteredSymbols = null; return; } if (type.Kind == DeclaredSymbolInfoKind.Constructor || type.Kind == DeclaredSymbolInfoKind.Module || type.Kind == DeclaredSymbolInfoKind.Indexer) continue; if (newResult.Tag != null) { if ((newResult.Tag == "type" || newResult.Tag == "t") && type.Kind != DeclaredSymbolInfoKind.Class && type.Kind != DeclaredSymbolInfoKind.Struct && type.Kind != DeclaredSymbolInfoKind.Interface && type.Kind != DeclaredSymbolInfoKind.Enum && type.Kind != DeclaredSymbolInfoKind.Delegate) continue; if (newResult.Tag == "class" && type.Kind != DeclaredSymbolInfoKind.Class) continue; if (newResult.Tag == "struct" && type.Kind != DeclaredSymbolInfoKind.Struct) continue; if (newResult.Tag == "interface" && type.Kind != DeclaredSymbolInfoKind.Interface) continue; if (newResult.Tag == "enum" && type.Kind != DeclaredSymbolInfoKind.Enum) continue; if (newResult.Tag == "delegate" && type.Kind != DeclaredSymbolInfoKind.Delegate) continue; if ((newResult.Tag == "member" || newResult.Tag == "m") && type.Kind != DeclaredSymbolInfoKind.Method && type.Kind != DeclaredSymbolInfoKind.Property && type.Kind != DeclaredSymbolInfoKind.Field && type.Kind != DeclaredSymbolInfoKind.Event) continue; if (newResult.Tag == "method" && type.Kind != DeclaredSymbolInfoKind.Method) continue; if (newResult.Tag == "property" && type.Kind != DeclaredSymbolInfoKind.Property) continue; if (newResult.Tag == "field" && type.Kind != DeclaredSymbolInfoKind.Field) continue; if (newResult.Tag == "event" && type.Kind != DeclaredSymbolInfoKind.Event) continue; } SearchResult curResult = newResult.CheckType (type); if (curResult != null) { newResult.filteredSymbols.Add (type); newResult.results.AddResult (curResult); searchResultCallback.ReportResult (curResult); } } }
public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { var files = AllFiles.ToList (); return Task.Run (delegate { var matcher = StringMatcher.GetMatcher (pattern.Pattern, false); savedMatches = new Dictionary<string, MatchResult> (); foreach (ProjectFile file in files) { if (token.IsCancellationRequested) break; int rank; string matchString = System.IO.Path.GetFileName (file.FilePath); if (MatchName (matcher, matchString, out rank)) searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, matchString, rank, file, true)); matchString = FileSearchResult.GetRelProjectPath (file); if (MatchName (matcher, matchString, out rank)) searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, matchString, rank, file, true)); } savedMatches = null; }); }
public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { return Task.Run (delegate { var files = allFilesCache = allFilesCache ?? GenerateAllFiles (); var matcher = StringMatcher.GetMatcher (pattern.Pattern, false); var savedMatches = new Dictionary<string, MatchResult> (); foreach (var file in files) { if (token.IsCancellationRequested) break; int rank1; int rank2; var match1 = MatchName (savedMatches, matcher, file.Item1, out rank1); var match2 = MatchName (savedMatches, matcher, file.Item2, out rank2); if (match1 && match2) { if (rank1 > rank2 || (rank1 == rank2 && String.CompareOrdinal (file.Item1, file.Item2) > 0)) { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item1, rank1, file.Item3)); } else { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item2, rank2, file.Item3)); } } else if (match1) { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item1, rank1, file.Item3)); } else if (match2) { searchResultCallback.ReportResult (new FileSearchResult (pattern.Pattern, file.Item2, rank2, file.Item3)); } } }, token); }