Merge with 3.2 #12510

This commit is contained in:
Terry Jan Reedy 2012-06-03 01:06:38 -04:00
commit a317eef897

View File

@ -67,18 +67,18 @@ class CallTips:
if not sur_paren:
return
hp.set_index(sur_paren[0])
name = hp.get_expression()
if not name:
expression = hp.get_expression()
if not expression:
return
if not evalfuncs and (name.find('(') != -1):
if not evalfuncs and (expression.find('(') != -1):
return
argspec = self.fetch_tip(name)
argspec = self.fetch_tip(expression)
if not argspec:
return
self.active_calltip = self._calltip_window()
self.active_calltip.showtip(argspec, sur_paren[0], sur_paren[1])
def fetch_tip(self, name):
def fetch_tip(self, expression):
"""Return the argument list and docstring of a function or class.
If there is a Python subprocess, get the calltip there. Otherwise,
@ -94,25 +94,27 @@ class CallTips:
"""
try:
rpcclt = self.editwin.flist.pyshell.interp.rpcclt
except:
except AttributeError:
rpcclt = None
if rpcclt:
return rpcclt.remotecall("exec", "get_the_calltip",
(name,), {})
(expression,), {})
else:
entity = self.get_entity(name)
entity = self.get_entity(expression)
return get_argspec(entity)
def get_entity(self, name):
"Lookup name in a namespace spanning sys.modules and __main.dict__."
if name:
def get_entity(self, expression):
"""Return the object corresponding to expression evaluated
in a namespace spanning sys.modules and __main.dict__.
"""
if expression:
namespace = sys.modules.copy()
namespace.update(__main__.__dict__)
try:
return eval(name, namespace)
# any exception is possible if evalfuncs True in open_calltip
# at least Syntax, Name, Attribute, Index, and Key E. if not
except:
return eval(expression, namespace)
except BaseException:
# An uncaught exception closes idle, and eval can raise any
# exception, especially if user classes are involved.
return None
def _find_constructor(class_ob):