diff --git a/jedi/inference/base_value.py b/jedi/inference/base_value.py index 42ce239c..37d17553 100644 --- a/jedi/inference/base_value.py +++ b/jedi/inference/base_value.py @@ -8,7 +8,7 @@ just one. """ from functools import reduce from operator import add -from parso.python.tree import ExprStmt, SyncCompFor +from parso.python.tree import ExprStmt, SyncCompFor, Name from jedi import debug from jedi._compatibility import zip_longest, unicode @@ -58,6 +58,17 @@ class HelperValueMixin(object): for lazy_value in self.iterate(contextualized_node, is_async) ) + def _get_value_filters(self, name_or_str): + origin_scope = name_or_str if isinstance(name_or_str, Name) else None + for f in self.get_filters(origin_scope=origin_scope): + yield f + # This covers the case where a stub files are incomplete. + if self.is_stub(): + from jedi.inference.gradual.conversion import convert_values + for c in convert_values(ValueSet({self})): + for f in c.get_filters(): + yield f + def py__getattribute__(self, name_or_str, name_context=None, position=None, analysis_errors=True): """ @@ -68,7 +79,7 @@ class HelperValueMixin(object): from jedi.inference import finder f = finder.NameFinder(self.inference_state, self, name_context, name_or_str, position, analysis_errors=analysis_errors) - filters = f.get_value_filters() + filters = self._get_value_filters(name_or_str) return f.find(filters, attribute_lookup=True) def goto(self, name_or_str, name_context=None, analysis_errors=True): @@ -80,7 +91,7 @@ class HelperValueMixin(object): from jedi.inference import finder f = finder.NameFinder(self.inference_state, self, name_context, name_or_str, analysis_errors=analysis_errors) - filters = f.get_value_filters() + filters = self._get_value_filters(name_or_str) return f.filter_name(filters) def py__await__(self): diff --git a/jedi/inference/finder.py b/jedi/inference/finder.py index ac8374ee..ece87d36 100644 --- a/jedi/inference/finder.py +++ b/jedi/inference/finder.py @@ -29,7 +29,6 @@ from jedi.inference.filters import get_global_filters from jedi.inference.names import TreeNameDefinition from jedi.inference.base_value import ValueSet, NO_VALUES from jedi.parser_utils import is_scope, get_parent_scope -from jedi.inference.gradual.conversion import convert_values class NameFinder(object): @@ -80,11 +79,8 @@ class NameFinder(object): return types - def _get_origin_scope(self): - return self._name if isinstance(self._name, tree.Name) else None - def get_global_filters(self): - origin_scope = self._get_origin_scope() + origin_scope = self._name if isinstance(self._name, tree.Name) else None position = self._position # For functions and classes the defaults don't belong to the @@ -106,16 +102,6 @@ class NameFinder(object): return get_global_filters(self._inference_state, self._context, position, origin_scope) - def get_value_filters(self): - origin_scope = self._get_origin_scope() - for f in self._context.get_filters(origin_scope=origin_scope): - yield f - # This covers the case where a stub files are incomplete. - if self._context.is_stub(): - for c in convert_values(ValueSet({self._context})): - for f in c.get_filters(): - yield f - def filter_name(self, filters): """ Searches names that are defined in a scope (the different