public async Task <CompletionResult> GetCompletionData(int position, char?triggerChar, bool useSignatureHelp) { IList <ICompletionDataEx> completionData = null; IOverloadProviderEx overloadProvider = 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); } } } 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()) { 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, completionTrigger)) .Select(item => new RoslynCompletionData(document, item, triggerChar, _snippetService.SnippetManager)) .ToArray <ICompletionDataEx>(); } else { completionData = Array.Empty <ICompletionDataEx>(); } } return(new CompletionResult(completionData, overloadProvider)); }
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, _snippetService.SnippetManager)).ToArray <ICompletionDataEx>() ?? Array.Empty <ICompletionDataEx>(); } return(new CompletionResult(completionData, overloadProvider)); }