diff --git a/jedi/api/classes.py b/jedi/api/classes.py index c774e233..d1566700 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -361,9 +361,10 @@ class BaseDefinition(object): context = self._name.parent_context if context is None: return None - - # TODO private access! - return Definition(self._inference_state, context._value.name) + while context.name is None: + # Happens for comprehension contexts + context = context.parent_context + return Definition(self._inference_state, context.name) def __repr__(self): return "<%s %sname=%r, description=%r>" % ( diff --git a/jedi/inference/context.py b/jedi/inference/context.py index ac314e7d..711f1bb2 100644 --- a/jedi/inference/context.py +++ b/jedi/inference/context.py @@ -134,6 +134,12 @@ class AbstractContext(object): def py__name__(self): return self._value.py__name__() + @property + def name(self): + if self._value is None: + return None + return self._value.name + def get_qualified_names(self): return self._value.get_qualified_names() @@ -223,6 +229,7 @@ class ClassContext(AbstractContext): class CompForContext(AbstractContext): def __init__(self, parent_context, comp_for): + self._value = None self._parent_context = parent_context self.inference_state = parent_context.inference_state self._tree_node = comp_for