Skip to content

Commit 993afe5

Browse files
committed
Merge arg types from *args and **args
1 parent 1f509ec commit 993afe5

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

mypy/typeops.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,15 +464,16 @@ def callable_corresponding_argument(
464464

465465
# def right(a: int = ...) -> None: ...
466466
# def left(__a: int = ..., *, a: int = ...) -> None: ...
467-
from mypy.subtypes import is_equivalent
467+
from mypy.meet import meet_types
468468

469469
if (
470470
not (by_name.required or by_pos.required)
471471
and by_pos.name is None
472472
and by_name.pos is None
473-
and is_equivalent(by_name.typ, by_pos.typ)
474473
):
475-
return FormalArgument(by_name.name, by_pos.pos, by_name.typ, False)
474+
return FormalArgument(
475+
by_name.name, by_pos.pos, meet_types(by_pos.typ, by_name.typ), False
476+
)
476477
return by_name if by_name is not None else by_pos
477478

478479

test-data/unit/check-overloading.test

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6768,3 +6768,19 @@ class D(Generic[T]):
67686768
a: D[str] # E: Type argument "str" of "D" must be a subtype of "C"
67696769
reveal_type(a.f(1)) # N: Revealed type is "builtins.int"
67706770
reveal_type(a.f("x")) # N: Revealed type is "builtins.str"
6771+
6772+
[case testOverloadWithTwoRelevantArgsWithDifferentType]
6773+
from typing import overload, Union
6774+
6775+
@overload
6776+
def set(year: int) -> None:
6777+
...
6778+
6779+
@overload
6780+
def set() -> None:
6781+
...
6782+
6783+
# no error here:
6784+
def set(*args: object, **kw: int) -> None:
6785+
pass
6786+
[builtins fixtures/tuple.pyi]

0 commit comments

Comments
 (0)