-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Description
Feature
The following:
from typing import overload, Union
def fun(a: Union[int, str], *, b: bool) -> None:
pass
fun(1, True)says helpfully:
main.py:6: error: Too many positional arguments for "fun" [misc]
Found 1 error in 1 file (checked 1 source file)
In the following case however:
from typing import overload, Union
@overload
def fun(a: int, *, b: bool) -> None: ...
@overload
def fun(a: str, *, b: bool) -> None: ...
def fun(a: Union[int, str], *, b: bool) -> None:
pass
fun(1, True)we get:
main.py:12: error: No overload variant of "fun" matches argument types "int", "bool" [call-overload]
main.py:12: note: Possible overload variants:
main.py:12: note: def fun(a: int, *, b: bool) -> None
main.py:12: note: def fun(a: str, *, b: bool) -> None
Found 1 error in 1 file (checked 1 source file)
I think the error should also point out that the number of positional arguments is incorrect.
Pitch
I found myself confused by this a couple of times and have wasted good few hours trying to understand what's wrong with the call which is clearly correct, and just glancing straight past the * - something that's easy to do with a longer / more complicated function signature. I think it would save a meaningful amount of time for users and it feels like a simple change.