From 6e5d80a6b205deb5ab0a7ea33e80dd55d2b86230 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 1 Aug 2014 15:51:45 +0200 Subject: [PATCH] builtins shouldn't be unique if called by compiled.create --- jedi/evaluate/compiled/__init__.py | 9 +++++++++ jedi/evaluate/representation.py | 9 ++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index cca2f97d..ff6935c3 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -45,6 +45,9 @@ class CompiledObject(Base): self.obj.__call__ return actual + def py__mro__(self, evaluator): + return tuple(create(evaluator, cls) for cls in self.obj.__mro__) + @property def doc(self): return inspect.getdoc(self.obj) or '' @@ -432,4 +435,10 @@ def create(evaluator, obj, parent=builtin, module=None): faked.parent = parent return faked + try: + if obj.__module__ in ('builtins', '__builtin__'): + return builtin.get_by_name(obj.__name__) + except AttributeError: + pass + return CompiledObject(obj, parent) diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 06348b6e..17f114ad 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -26,7 +26,6 @@ from jedi.evaluate import iterable from jedi.evaluate import docstrings from jedi.evaluate import helpers from jedi.evaluate import param -from jedi.evaluate import imports class Executed(pr.IsScope): @@ -280,10 +279,10 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)): self.base = base @memoize_default(default=()) - def py_mro(self): + def py__mro__(self, evaluator): def add(cls): if cls not in mro: - mro.add(cls) + mro.append(cls) mro = [self] # 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, # e.g. `class X(str, str): pass` add(cls) - for cls_new in cls.mro(): + for cls_new in cls.py__mro__(evaluator): add(cls_new) - return mro + return tuple(mro) @memoize_default(default=()) def py_bases(self):