示例#1
0
        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]);
        }
示例#2
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);
        }
示例#3
0
        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);
        }