1
0
forked from VimPlug/jedi

use py__mro__ in a classes scope_names_generator

This commit is contained in:
Dave Halter
2014-08-11 20:59:29 +02:00
parent 526af7ccbe
commit 242072976a
2 changed files with 18 additions and 21 deletions

View File

@@ -114,7 +114,7 @@ class CompiledObject(Base):
else: else:
return type_names + self.instance_names() return type_names + self.instance_names()
def scope_names_generator(self, position=None): def scope_names_generator(self, position=None, add_class_vars=True):
yield self, self.get_defined_names() yield self, self.get_defined_names()
@underscore_memoization @underscore_memoization

View File

@@ -176,10 +176,9 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
""" """
yield self, self.get_self_attributes() yield self, self.get_self_attributes()
names = [] for scope, names in self.base.scope_names_generator(add_class_vars=False):
for var in self.base.instance_names(): yield self, [get_instance_el(self._evaluator, self, var, True)
names.append(get_instance_el(self._evaluator, self, var, True)) for var in names]
yield self, names
def get_index_types(self, index_array): def get_index_types(self, index_array):
@@ -331,8 +330,7 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)):
def py__call__(self, evaluator, params): def py__call__(self, evaluator, params):
return [Instance(evaluator, self, params)] return [Instance(evaluator, self, params)]
@memoize_default(default=()) def scope_names_generator(self, position=None, add_class_vars=True):
def instance_names(self):
def in_iterable(name, iterable): def in_iterable(name, iterable):
""" checks if the name is in the variable 'iterable'. """ """ checks if the name is in the variable 'iterable'. """
for i in iterable: for i in iterable:
@@ -342,19 +340,18 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)):
return True return True
return False return False
result = self.base.get_defined_names() all_names = []
super_result = [] for cls in self.py__mro__(self._evaluator):
# TODO mro! names = []
for cls in self.py_bases(): if isinstance(cls, compiled.CompiledObject):
# Get the inherited names. x = cls.instance_names()
for i in cls.instance_names(): else:
if not in_iterable(i, result): x = reversed(cls.base.get_defined_names())
super_result.append(i) for n in x:
result += super_result if not in_iterable(n, all_names):
return result names.append(n)
yield cls, names
def scope_names_generator(self, position=None): if add_class_vars:
yield self, self.instance_names()
yield self, compiled.type_names yield self, compiled.type_names
def get_subscope_by_name(self, name): def get_subscope_by_name(self, name):