From 09f7930104e1eb6d04cd02330a0ac9bc9d766dc3 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 27 Nov 2015 13:07:54 +0100 Subject: [PATCH] Start implementing py__iter__ for all classes. --- jedi/evaluate/finder.py | 3 ++- jedi/evaluate/iterable.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index 703ed0dd..ddd53ce0 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -301,7 +301,8 @@ def _name_to_types(evaluator, name, scope): types = set() typ = name.get_definition() if typ.isinstance(tree.ForStmt, tree.CompFor): - for_types = iterable.get_iterator_types(evaluator, typ.children[3]) + container_types = evaluator.eval_element(typ.children[3]) + for_types = common.unite(iterable.py__iter__(evaluator, container_types)) types |= check_tuple_assignments(for_types, name) elif isinstance(typ, tree.Param): types |= _eval_param(evaluator, typ, scope) diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index e253422e..9a15d273 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -474,6 +474,16 @@ def unpack_tuple_to_dict(evaluator, types, exprlist): raise NotImplementedError +def py__iter__(evaluator, types): + for typ in types: + for result in typ.py__iter__(): + yield result + + +def py__iter__types(evaluator, types): + return unite(py__iter__(evaluator, types)) + + def get_iterator_types(evaluator, element): """Returns the types of any iterator (arrays, yields, __iter__, etc).""" iterators = []