Exemplo n.º 1
0
        public void GenericMethodCompletions()
        {
            // http://pytools.codeplex.com/workitem/661
            var fact       = IronPythonInterpreter;
            var replEval   = new PythonReplEvaluator(fact, PythonToolsTestUtilities.CreateMockServiceProvider(), new ReplTestReplOptions());
            var replWindow = new MockReplWindow(replEval);

            replEval.Initialize(replWindow).Wait();
            var execute = replEval.ExecuteText("from System.Threading.Tasks import Task");

            execute.Wait();
            Assert.AreEqual(execute.Result, ExecutionResult.Success);
            replWindow.ClearScreen();

            execute = replEval.ExecuteText("def func1(): print 'hello world'\r\n\r\n");
            execute.Wait();
            replWindow.ClearScreen();

            Assert.AreEqual(execute.Result, ExecutionResult.Success);

            execute = replEval.ExecuteText("t = Task.Factory.StartNew(func1)");
            execute.Wait();
            Assert.AreEqual(execute.Result, ExecutionResult.Success);

            using (var analyzer = new VsProjectAnalyzer(PythonToolsTestUtilities.CreateMockServiceProvider(), fact, new[] { fact })) {
                replWindow.TextView.TextBuffer.Properties.AddProperty(typeof(VsProjectAnalyzer), analyzer);

                var names = replEval.GetMemberNames("t");
                foreach (var name in names)
                {
                    Debug.WriteLine(name.Name);
                }
            }
        }
Exemplo n.º 2
0
        public override CompletionSet GetCompletions(IGlyphService glyphService)
        {
            var start1 = _stopwatch.ElapsedMilliseconds;

            MemberResult[] members;

            IReplEvaluator      eval;
            PythonReplEvaluator dlrEval = null;

            if (_snapshot.TextBuffer.Properties.TryGetProperty <IReplEvaluator>(typeof(IReplEvaluator), out eval))
            {
                dlrEval = eval as PythonReplEvaluator;
            }

            var analysis = GetAnalysisEntry();

            if (analysis != null)
            {
                members = analysis.GetMembers(
                    Text,
                    _snapshot.GetLineNumberFromPosition(_pos) + 1,
                    _intersectMembers).ToArray();
            }
            else
            {
                members = new MemberResult[0];
            }

            if (dlrEval != null && _snapshot.TextBuffer.GetAnalyzer().ShouldEvaluateForCompletion(Text))
            {
                string text = Text;
                if (Text.EndsWith("."))
                {
                    text = Text.Substring(0, Text.Length - 1);
                }

                if (members.Length == 0)
                {
                    members = dlrEval.GetMemberNames(TextBuffer.GetAnalyzer(), text);
                    if (members == null)
                    {
                        members = new MemberResult[0];
                    }
                }
                else
                {
                    // prefer analysis members over live members but merge the two together.
                    Dictionary <string, MemberResult> memberDict = new Dictionary <string, MemberResult>();
                    var replMembers = dlrEval.GetMemberNames(TextBuffer.GetAnalyzer(), text);
                    if (replMembers != null)
                    {
                        foreach (var member in replMembers)
                        {
                            memberDict[member.Name] = member;
                        }

                        foreach (var member in members)
                        {
                            memberDict[member.Name] = member;
                        }

                        members = memberDict.Values.ToArray();
                    }
                }
            }

            members = DoFilterCompletions(members);
            Array.Sort(members, ModuleSort);

            var end = _stopwatch.ElapsedMilliseconds;

            if (/*Logging &&*/ (end - start1) > TooMuchTime)
            {
                Trace.WriteLine(String.Format("{0} lookup time {1} for {2} members", this, end - start1, members.Length));
            }

            var start = _stopwatch.ElapsedMilliseconds;

            var result = new PythonCompletionSet(
                Text,
                Text,
                _snapshot.CreateTrackingSpan(_pos, 0, SpanTrackingMode.EdgeInclusive),
                TransformMembers(glyphService, members),
                new Completion[0]);

            end = _stopwatch.ElapsedMilliseconds;

            if (/*Logging &&*/ (end - start1) > TooMuchTime)
            {
                Trace.WriteLine(String.Format("{0} completion set time {1} total time {2}", this, end - start, end - start1));
            }

            return(result);
        }