mirror of
https://github.com/python/cpython.git
synced 2024-12-15 21:04:00 +08:00
Merge with 3.2 #12510
This commit is contained in:
commit
a317eef897
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user