diff --git a/jedi/api/completion.py b/jedi/api/completion.py index eaddef9f..fb15031b 100644 --- a/jedi/api/completion.py +++ b/jedi/api/completion.py @@ -1,5 +1,3 @@ -from itertools import chain - from jedi.parser import token from jedi.parser import tree from jedi import debug @@ -10,7 +8,6 @@ from jedi.evaluate import imports from jedi.api import keywords from jedi.evaluate import compiled from jedi.evaluate.helpers import call_of_leaf -from jedi.evaluate.finder import global_names_dict_generator, filter_definition_names from jedi.evaluate.filters import get_global_filters @@ -198,13 +195,8 @@ class Completion: completion_names = [] debug.dbg('trailer completion scopes: %s', scopes) for s in scopes: - names = [] - for names_dict in s.names_dicts(search_global=False): - names += chain.from_iterable(names_dict.values()) - - completion_names += filter_definition_names( - names, self._module.get_statement_for_position(self._position) - ) + for filter in s.get_filters(search_global=False): + completion_names += filter.values() return completion_names def _parse_dotted_names(self, nodes): diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index eb5c97b7..26bf98dc 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -157,7 +157,7 @@ class CompiledObject(Base): def names_dicts(self, search_global, is_instance=False): return self._names_dict_ensure_one_dict(is_instance) - def get_filters(self, search_global, is_instance=False, until_position=None): + def get_filters(self, search_global=False, is_instance=False, until_position=None): yield self._ensure_one_filter(is_instance) @memoize_method diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 763f50a0..d417b858 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -554,7 +554,8 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)): else: for scope in self.py__mro__(): if isinstance(scope, compiled.CompiledObject): - raise NotImplementedError + for filter in scope.get_filters(): + yield filter else: yield ParserTreeFilter(self._evaluator, self.base)