diff --git a/mypy/argmap.py b/mypy/argmap.py index a1c4ef72ea40..28fad1f093dd 100644 --- a/mypy/argmap.py +++ b/mypy/argmap.py @@ -78,7 +78,7 @@ def map_actuals_to_formals( elif actual_kind.is_named(): assert actual_names is not None, "Internal error: named kinds without names given" name = actual_names[ai] - if name in formal_names: + if name in formal_names and formal_kinds[formal_names.index(name)] != nodes.ARG_STAR: formal_to_actual[formal_names.index(name)].append(ai) elif nodes.ARG_STAR2 in formal_kinds: formal_to_actual[formal_kinds.index(nodes.ARG_STAR2)].append(ai) diff --git a/test-data/unit/check-varargs.test b/test-data/unit/check-varargs.test index 65bbd8456d78..c59f07e92a4e 100644 --- a/test-data/unit/check-varargs.test +++ b/test-data/unit/check-varargs.test @@ -145,6 +145,14 @@ f(*it1, 1, *it2, 2) # E: Argument 3 to "f" has incompatible type "*Tuple[str]"; f(*it1, '') # E: Argument 2 to "f" has incompatible type "str"; expected "int" [builtins fixtures/for.pyi] +[case testCallVarArgsWithMatchingNamedArgument] +def foo(*args: int) -> None: ... # N: "foo" defined here +foo(args=1) # E: Unexpected keyword argument "args" for "foo" + +def bar(*args: int, **kwargs: str) -> None: ... +bar(args=1) # E: Argument "args" to "bar" has incompatible type "int"; expected "str" +[builtins fixtures/for.pyi] + -- Calling varargs function + type inference -- -----------------------------------------