public async Task<CompletionResult> GetCompletionData(int position, char? triggerChar, bool useSignatureHelp) { IList<ICompletionDataEx> completionData = null; IOverloadProviderEx overloadProvider = null; bool? isCompletion = null; var document = _roslynHost.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); } } else { isCompletion = await CompletionService.IsCompletionTriggerCharacterAsync(document, position - 1).ConfigureAwait(false); } } if (overloadProvider == null && isCompletion != false) { var data = await CompletionService.GetCompletionListAsync( document, position, triggerChar != null ? CompletionTriggerInfo.CreateTypeCharTriggerInfo(triggerChar.Value) : CompletionTriggerInfo.CreateInvokeCompletionTriggerInfo() ).ConfigureAwait(false); completionData = data?.Items.Select(item => new RoslynCompletionData(item)).ToArray<ICompletionDataEx>() ?? (IList<ICompletionDataEx>)new List<ICompletionDataEx>(); } return new CompletionResult(completionData, overloadProvider); }
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)); }