diff --git a/jedi/evaluate/docstrings.py b/jedi/evaluate/docstrings.py index 033d5c10..9c79bddd 100644 --- a/jedi/evaluate/docstrings.py +++ b/jedi/evaluate/docstrings.py @@ -164,7 +164,7 @@ def _execute_array_values(evaluator, array): """ if isinstance(array, Array): values = [] - for types in array.per_index_values(): + for types in array.py__iter__(): objects = set(chain.from_iterable(_execute_array_values(evaluator, typ) for typ in types)) values.append(AlreadyEvaluated(objects)) return [FakeSequence(evaluator, values, array.type)] diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index bc493c90..00ad24be 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -664,20 +664,28 @@ class FunctionExecution(Executed): yields_order[-1][1].append(yield_) else: yields_order.append((for_stmt, [yield_])) + elif for_stmt == self: + yields_order.append((None, [yield_])) else: yield self.get_return_types() return last_for_stmt = for_stmt + evaluator = self._evaluator for for_stmt, yields in yields_order: - for_types = self._evaluator.eval_element(for_stmt.get_input_node()) - ordered = iterable.ordered_elements_of_iterable(self._evaluator, for_types, []) - for index_types in ordered: - dct = {str(for_stmt.children[1]): index_types} - self._evaluator.predefined_if_name_dict_dict[for_stmt] = dct - for yield_in_same_for_stmt in yields: - yield self._evaluator.eval_element(yield_in_same_for_stmt.children[1]) - del self._evaluator.predefined_if_name_dict_dict[for_stmt] + if for_stmt is None: + # No for_stmt, just normal yields. + for yield_ in yields: + yield evaluator.eval_element(yield_.children[1]) + else: + for_types = evaluator.eval_element(for_stmt.get_input_node()) + ordered = iterable.ordered_elements_of_iterable(evaluator, for_types, []) + for index_types in ordered: + dct = {str(for_stmt.children[1]): index_types} + evaluator.predefined_if_name_dict_dict[for_stmt] = dct + for yield_in_same_for_stmt in yields: + yield evaluator.eval_element(yield_in_same_for_stmt.children[1]) + del evaluator.predefined_if_name_dict_dict[for_stmt] def names_dicts(self, search_global): yield self.names_dict diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 5f6418df..5988ca23 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -77,6 +77,7 @@ def argument_clinic(string, want_obj=False, want_scope=False, want_arguments=Fal def f(func): def wrapper(evaluator, obj, arguments): + debug.dbg('builtin start %s' % obj, color='MAGENTA') try: lst = list(arguments.eval_argument_clinic(clinic_args)) except ValueError: @@ -90,6 +91,8 @@ def argument_clinic(string, want_obj=False, want_scope=False, want_arguments=Fal if want_arguments: kwargs['arguments'] = arguments return func(evaluator, *lst, **kwargs) + finally: + debug.dbg('builtin end', color='MAGENTA') return wrapper return f