diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index 2be77fb9..c9bf4621 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -192,7 +192,7 @@ def _name_to_types(evaluator, context, tree_name): elif typ == 'expr_stmt': types = _remove_statements(evaluator, context, node, tree_name) elif typ == 'with_stmt': - types = context.eval_node(node.node_from_name(tree_name)) + types = context.eval_node(node.get_context_manager_from_name(tree_name)) elif typ in ('import_from', 'import_name'): types = imports.infer_import(context, tree_name) elif typ in ('funcdef', 'classdef'): diff --git a/jedi/parser/python/tree.py b/jedi/parser/python/tree.py index e2fb4b7b..efb96125 100644 --- a/jedi/parser/python/tree.py +++ b/jedi/parser/python/tree.py @@ -789,12 +789,11 @@ class WithStmt(Flow): names += _defined_names(with_item.children[2]) return names - def node_from_name(self, name): - node = name - while True: - node = node.parent - if node.type == 'with_item': - return node.children[0] + def get_context_manager_from_name(self, name): + node = name.parent + if node.type != 'with_item': + raise ValueError('The name is not actually part of a with statement.') + return node.children[0] class Import(PythonBaseNode):