diff --git a/jedi/evaluate/context/instance.py b/jedi/evaluate/context/instance.py index 809ff568..ba0b5cf5 100644 --- a/jedi/evaluate/context/instance.py +++ b/jedi/evaluate/context/instance.py @@ -504,7 +504,7 @@ class SelfAttributeFilter(ClassFilter): if trailer.type == 'trailer' \ and len(trailer.parent.children) == 2 \ and trailer.children[0] == '.': - if name.is_definition() and self._access_possible(name): + if name.is_definition() and self._access_possible(name, from_instance=True): # TODO filter non-self assignments. yield name diff --git a/jedi/evaluate/context/klass.py b/jedi/evaluate/context/klass.py index e9b884c0..ae89f8c4 100644 --- a/jedi/evaluate/context/klass.py +++ b/jedi/evaluate/context/klass.py @@ -109,7 +109,7 @@ class ClassFilter(ParserTreeFilter): node = get_cached_parent_scope(self._used_names, node) return False - def _access_possible(self, name, from_instance): + def _access_possible(self, name, from_instance=False): # Filter for ClassVar variables # TODO this is not properly done, yet. It just checks for the string # ClassVar in the annotation, which can be quite imprecise. If we @@ -212,6 +212,7 @@ class ClassMixin(object): if not is_instance: from jedi.evaluate.compiled import builtin_from_name type_ = builtin_from_name(self.evaluator, u'type') + assert isinstance(type_, ClassContext) if type_ != self: yield next(type_.get_filters()) diff --git a/jedi/evaluate/filters.py b/jedi/evaluate/filters.py index e3c4f41d..be77631c 100644 --- a/jedi/evaluate/filters.py +++ b/jedi/evaluate/filters.py @@ -77,7 +77,7 @@ class AbstractUsedNamesFilter(AbstractFilter): def get(self, name, **filter_kwargs): return self._convert_names(self._filter( _get_definition_names(self._used_names, name), - **filter_kwargs, + **filter_kwargs )) def _convert_names(self, names): @@ -89,7 +89,7 @@ class AbstractUsedNamesFilter(AbstractFilter): for name_key in self._used_names for name in self._filter( _get_definition_names(self._used_names, name_key), - **filter_kwargs, + **filter_kwargs ) )