1
0
forked from VimPlug/jedi

builtins shouldn't be unique if called by compiled.create

This commit is contained in:
Dave Halter
2014-08-01 15:51:45 +02:00
parent 68cecad996
commit 6e5d80a6b2
2 changed files with 13 additions and 5 deletions

View File

@@ -45,6 +45,9 @@ class CompiledObject(Base):
self.obj.__call__ self.obj.__call__
return actual return actual
def py__mro__(self, evaluator):
return tuple(create(evaluator, cls) for cls in self.obj.__mro__)
@property @property
def doc(self): def doc(self):
return inspect.getdoc(self.obj) or '' return inspect.getdoc(self.obj) or ''
@@ -432,4 +435,10 @@ def create(evaluator, obj, parent=builtin, module=None):
faked.parent = parent faked.parent = parent
return faked return faked
try:
if obj.__module__ in ('builtins', '__builtin__'):
return builtin.get_by_name(obj.__name__)
except AttributeError:
pass
return CompiledObject(obj, parent) return CompiledObject(obj, parent)

View File

@@ -26,7 +26,6 @@ from jedi.evaluate import iterable
from jedi.evaluate import docstrings from jedi.evaluate import docstrings
from jedi.evaluate import helpers from jedi.evaluate import helpers
from jedi.evaluate import param from jedi.evaluate import param
from jedi.evaluate import imports
class Executed(pr.IsScope): class Executed(pr.IsScope):
@@ -280,10 +279,10 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)):
self.base = base self.base = base
@memoize_default(default=()) @memoize_default(default=())
def py_mro(self): def py__mro__(self, evaluator):
def add(cls): def add(cls):
if cls not in mro: if cls not in mro:
mro.add(cls) mro.append(cls)
mro = [self] mro = [self]
# TODO Do a proper mro resolution. Currently we are just listing # TODO Do a proper mro resolution. Currently we are just listing
@@ -292,9 +291,9 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)):
# TODO detect for TypeError: duplicate base class str, # TODO detect for TypeError: duplicate base class str,
# e.g. `class X(str, str): pass` # e.g. `class X(str, str): pass`
add(cls) add(cls)
for cls_new in cls.mro(): for cls_new in cls.py__mro__(evaluator):
add(cls_new) add(cls_new)
return mro return tuple(mro)
@memoize_default(default=()) @memoize_default(default=())
def py_bases(self): def py_bases(self):