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); } } }
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); }