(
arg_kinds: list[ArgKind], nodes: list[T], fail: Callable[[str, T], None]
)
| 5267 | |
| 5268 | |
| 5269 | def check_arg_kinds( |
| 5270 | arg_kinds: list[ArgKind], nodes: list[T], fail: Callable[[str, T], None] |
| 5271 | ) -> None: |
| 5272 | is_var_arg = False |
| 5273 | is_kw_arg = False |
| 5274 | seen_named = False |
| 5275 | seen_opt = False |
| 5276 | for kind, node in zip(arg_kinds, nodes): |
| 5277 | if kind == ARG_POS: |
| 5278 | if is_var_arg or is_kw_arg or seen_named or seen_opt: |
| 5279 | fail( |
| 5280 | "Required positional args may not appear after default, named or var args", |
| 5281 | node, |
| 5282 | ) |
| 5283 | break |
| 5284 | elif kind == ARG_OPT: |
| 5285 | if is_var_arg or is_kw_arg or seen_named: |
| 5286 | fail("Positional default args may not appear after named or var args", node) |
| 5287 | break |
| 5288 | seen_opt = True |
| 5289 | elif kind == ARG_STAR: |
| 5290 | if is_var_arg or is_kw_arg or seen_named: |
| 5291 | fail("Var args may not appear after named or var args", node) |
| 5292 | break |
| 5293 | is_var_arg = True |
| 5294 | elif kind == ARG_NAMED or kind == ARG_NAMED_OPT: |
| 5295 | seen_named = True |
| 5296 | if is_kw_arg: |
| 5297 | fail("A **kwargs argument must be the last argument", node) |
| 5298 | break |
| 5299 | elif kind == ARG_STAR2: |
| 5300 | if is_kw_arg: |
| 5301 | fail("You may only have one **kwargs argument", node) |
| 5302 | break |
| 5303 | is_kw_arg = True |
| 5304 | |
| 5305 | |
| 5306 | def check_param_names( |
no test coverage detected
searching dependent graphs…