diff --git a/mypy/types.py b/mypy/types.py index e8651d6eba79c..f7d2b4dd19313 100644 --- a/mypy/types.py +++ b/mypy/types.py @@ -7,7 +7,7 @@ from typing import ( Any, TypeVar, Dict, List, Tuple, cast, Set, Optional, Union, Iterable, NamedTuple, - Sequence, Iterator + Sequence ) from typing_extensions import ClassVar, Final, TYPE_CHECKING, overload, TypeAlias as _TypeAlias @@ -1168,7 +1168,7 @@ def max_possible_positional_args(self) -> int: return sys.maxsize return sum([kind.is_positional() for kind in self.arg_kinds]) - def formal_arguments(self, include_star_args: bool = False) -> Iterator[FormalArgument]: + def formal_arguments(self, include_star_args: bool = False) -> List[FormalArgument]: """Yields the formal arguments corresponding to this callable, ignoring *arg and **kwargs. To handle *args and **kwargs, use the 'callable.var_args' and 'callable.kw_args' fields, @@ -1176,6 +1176,7 @@ def formal_arguments(self, include_star_args: bool = False) -> Iterator[FormalAr If you really want to include star args in the yielded output, set the 'include_star_args' parameter to 'True'.""" + args = [] done_with_positional = False for i in range(len(self.arg_types)): kind = self.arg_kinds[i] @@ -1186,11 +1187,14 @@ def formal_arguments(self, include_star_args: bool = False) -> Iterator[FormalAr required = kind.is_required() pos = None if done_with_positional else i - yield FormalArgument( + arg = FormalArgument( self.arg_names[i], pos, self.arg_types[i], - required) + required + ) + args.append(arg) + return args def argument_by_name(self, name: Optional[str]) -> Optional[FormalArgument]: if name is None: