@@ -2467,6 +2467,79 @@ f(b=4) # E: Missing positional argument "a" in call to "f"
24672467def f(a, b, c, d=None) -> None: pass
24682468f(1, d=3) # E: Missing positional arguments "b", "c" in call to "f"
24692469
2470+ [case testMissingArgumentsErrorFromTypedDict]
2471+ from typing import Optional,TypedDict
2472+
2473+ class DA(TypedDict):
2474+ a: int
2475+ class DB(TypedDict):
2476+ b: int
2477+ class DC(TypedDict):
2478+ c: int
2479+
2480+ class DAB(DA, DB): pass
2481+ class DAC(DA, DC): pass
2482+ class DBC(DB, DC): pass
2483+ class DABC(DA, DB, DC): pass
2484+
2485+ da: DA
2486+ db: DB
2487+ dc: DC
2488+ dab: DAB
2489+ dac: DAC
2490+ dbc: DBC
2491+ dabc: DABC
2492+
2493+ def f(a: int, b: int, c: int, d: Optional[int] = None) -> None: pass
2494+
2495+ f(**da) # E: Missing named argument "b" for "f" \
2496+ # E: Missing named argument "c" for "f"
2497+ f(**db) # E: Missing named argument "c" for "f" \
2498+ # E: Missing positional argument "a" in call to "f"
2499+ f(**dc) # E: Missing positional arguments "a", "b" in call to "f"
2500+ f(**dab) # E: Missing named argument "c" for "f"
2501+ f(**dac) # E: Missing named argument "b" for "f"
2502+ f(**dbc) # E: Missing positional argument "a" in call to "f"
2503+ f(**dabc)
2504+
2505+ def g(a: int, /, b: int, c: int) -> None: pass
2506+
2507+ g(**da) # E: Extra argument "a" from **args for "g"
2508+ g(0, **da) # E: Extra argument "a" from **args for "g"
2509+ g(**db) # E: Missing named argument "c" for "g" \
2510+ # E: Too few arguments for "g"
2511+ g(0, **db) # E: Missing named argument "c" for "g"
2512+ g(**dc) # E: Too few arguments for "g"
2513+ g(0, **dc) # E: Missing positional argument "b" in call to "g"
2514+ g(**dab) # E: Extra argument "a" from **args for "g"
2515+ g(0, **dab) # E: Extra argument "a" from **args for "g"
2516+ g(**dac) # E: Extra argument "a" from **args for "g"
2517+ g(0, **dac) # E: Extra argument "a" from **args for "g"
2518+ g(**dbc) # E: Too few arguments for "g"
2519+ g(0, **dbc)
2520+ g(**dabc) # E: Extra argument "a" from **args for "g"
2521+
2522+ def h(a: int, b: int, /, c: int) -> None: pass
2523+
2524+ h(**da) # E: Extra argument "a" from **args for "h"
2525+ h(0, **da) # E: Extra argument "a" from **args for "h"
2526+ h(0, 1, **da) # E: Extra argument "a" from **args for "h"
2527+ h(**db) # E: Extra argument "b" from **args for "h"
2528+ h(0, **db) # E: Extra argument "b" from **args for "h"
2529+ h(0, 1, **db) # E: Extra argument "b" from **args for "h"
2530+ h(**dc) # E: Too few arguments for "h"
2531+ h(0, **dc) # E: Too few arguments for "h"
2532+ h(0, 1, **dc)
2533+ h(**dab) # E: Extra argument "b" from **args for "h"
2534+ h(0, **dab) # E: Extra argument "b" from **args for "h"
2535+ h(**dac) # E: Extra argument "a" from **args for "h"
2536+ h(0, **dac) # E: Extra argument "a" from **args for "h"
2537+ h(**dbc) # E: Extra argument "b" from **args for "h"
2538+ h(0, **dbc) # E: Extra argument "b" from **args for "h"
2539+ h(**dabc) # E: Extra argument "b" from **args for "h"
2540+ [builtins fixtures/dict.pyi]
2541+ [typing fixtures/typing-typeddict.pyi]
2542+
24702543[case testReturnTypeLineNumberWithDecorator]
24712544def dec(f): pass
24722545
0 commit comments