private async Task <LSP.CompletionItem[]> GetLiveCompletionsAsync( SnapshotPoint triggerPoint, CompletionTrigger trigger, IPythonInteractiveIntellisense eval, CancellationToken token ) { await TaskScheduler.Default; string expression = GetExpressionAtPoint(triggerPoint, eval.LanguageVersion); if (!string.IsNullOrEmpty(expression)) { var members = await eval.GetMemberNamesAsync(expression, token); var completions = members.Select(c => new LSP.CompletionItem { Label = c.Name, InsertText = c.Completion, Documentation = c.Documentation, Kind = LSP.CompletionItemKind.Variable, }).ToArray(); return(completions); } return(new LSP.CompletionItem[0]); }
protected IEnumerable <CompletionResult> GetModules(string[] package, bool modulesOnly = true) { var analysis = GetAnalysisEntry(); if (analysis == null) { return(Enumerable.Empty <CompletionResult>()); } IPythonInteractiveIntellisense pyReplEval = null; IInteractiveEvaluator eval; if (TextBuffer.Properties.TryGetProperty(typeof(IInteractiveEvaluator), out eval)) { pyReplEval = eval as IPythonInteractiveIntellisense; } IEnumerable <KeyValuePair <string, string> > replScopes = null; if (pyReplEval != null) { replScopes = pyReplEval.GetAvailableScopesAndPaths(); } if (package == null) { package = new string[0]; } var modules = Enumerable.Empty <CompletionResult>(); if (analysis != null && (pyReplEval == null || !pyReplEval.LiveCompletionsOnly)) { var analyzer = analysis.Analyzer; IEnumerable <CompletionResult> result; if (package.Length > 0) { result = analyzer.WaitForRequest(analyzer.GetModuleMembersAsync(analysis, package, !modulesOnly), "GetSubmodules"); } else { result = analyzer.WaitForRequest(analyzer.GetModulesResult(true), "GetModules"); } if (result != null) { modules = modules.Concat(result).Distinct(CompletionComparer.MemberEquality); } } if (replScopes != null) { modules = GetModulesFromReplScope(replScopes, package) .Concat(modules) .Distinct(CompletionComparer.MemberEquality); } return(modules); }
private async Task <LSP.CompletionItem[]> GetAnalysisAndLiveCompletionsAsync( SnapshotPoint triggerPoint, CompletionTrigger trigger, IPythonInteractiveIntellisense eval, CancellationToken token ) { var analysisCompletionsTask = eval.GetAnalysisCompletions(triggerPoint, trigger != null ? GetContextFromTrigger(trigger) : null, token); var liveCompletionsTask = GetLiveCompletionsAsync(triggerPoint, trigger, eval, token); await Task.WhenAll(analysisCompletionsTask, liveCompletionsTask); var completions = MergeCompletions(analysisCompletionsTask.Result, liveCompletionsTask.Result); return(completions); }