private static bool MatchesFilterText(CompletionHelper helper, CompletionItem item, SourceText text, Dictionary <TextSpan, string> textSpanToText) { var filterText = GetFilterText(item, text, textSpanToText); if (string.IsNullOrEmpty(filterText)) { return(true); } return(helper.MatchesFilterText(item, filterText)); }
public async Task <CompletionResult> GetCompletionData(int position, char?triggerChar, bool useSignatureHelp) { IList <ICompletionDataEx> completionData = null; IOverloadProviderEx overloadProvider = null; var useHardSelection = true; var document = _workspace.CurrentSolution.GetDocument(_documentId); if (useSignatureHelp || triggerChar != null) { var signatureHelpProvider = _roslynHost.GetService <ISignatureHelpProvider>(); var isSignatureHelp = useSignatureHelp || signatureHelpProvider.IsTriggerCharacter(triggerChar.Value); if (isSignatureHelp) { var signatureHelp = await signatureHelpProvider.GetItemsAsync( document, position, new SignatureHelpTriggerInfo( useSignatureHelp ? SignatureHelpTriggerReason.InvokeSignatureHelpCommand : SignatureHelpTriggerReason.TypeCharCommand, triggerChar)) .ConfigureAwait(false); if (signatureHelp != null) { overloadProvider = new RoslynOverloadProvider(signatureHelp); } } } if (overloadProvider == null) { var completionService = CompletionService.GetService(document); var completionTrigger = GetCompletionTrigger(triggerChar); var data = await completionService.GetCompletionsAsync( document, position, completionTrigger ).ConfigureAwait(false); if (data != null && data.Items.Any()) { useHardSelection = data.SuggestionModeItem == null; var helper = CompletionHelper.GetHelper(document, completionService); var text = await document.GetTextAsync().ConfigureAwait(false); var textSpanToText = new Dictionary <TextSpan, string>(); completionData = data.Items .Where(item => MatchesFilterText(helper, item, text, textSpanToText)) .Select(item => new RoslynCompletionData(document, item, triggerChar, _snippetService.SnippetManager)) .ToArray <ICompletionDataEx>(); } else { completionData = Array.Empty <ICompletionDataEx>(); } } return(new CompletionResult(completionData, overloadProvider, useHardSelection)); }