From 5db075348ab4e16fdf038e81e72aebc4687ad681 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sat, 13 Dec 2025 20:13:42 +0100 Subject: [PATCH 1/2] Improve MappingPattern rest location --- mypy/fastparse.py | 2 +- test-data/unit/check-python310.test | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mypy/fastparse.py b/mypy/fastparse.py index ee14cea02746..4d778ee066fc 100644 --- a/mypy/fastparse.py +++ b/mypy/fastparse.py @@ -1799,7 +1799,7 @@ def visit_MatchMapping(self, n: ast3.MatchMapping) -> MappingPattern: if n.rest is None: rest = None else: - rest = NameExpr(n.rest) + rest = self.set_line(NameExpr(n.rest), n) node = MappingPattern(keys, values, rest) return self.set_line(node, n) diff --git a/test-data/unit/check-python310.test b/test-data/unit/check-python310.test index 6a6409f7aee6..c42b3e617d97 100644 --- a/test-data/unit/check-python310.test +++ b/test-data/unit/check-python310.test @@ -3194,3 +3194,14 @@ def fun(val: str | None): case types.NoneType(): reveal_type(val) # N: Revealed type is "None" [builtins fixtures/tuple.pyi] + +[case testMatchMappingRestErrorLocation] +data: list[int] +match data: + case [1, *rest]: + ... +config: dict[str, object] +match config: + case {"a": 1, **rest}: # E: Incompatible types in capture pattern (pattern captures type "dict[str, object]", variable has type "list[int]") + ... +[builtins fixtures/dict.pyi] From e808d9e7ee6ce4f0df497ac3d6b08fac2a76d5c8 Mon Sep 17 00:00:00 2001 From: Shantanu Jain Date: Sat, 13 Dec 2025 13:40:13 -0800 Subject: [PATCH 2/2] explicit type --- test-data/unit/check-python310.test | 1 + 1 file changed, 1 insertion(+) diff --git a/test-data/unit/check-python310.test b/test-data/unit/check-python310.test index c42b3e617d97..26cb20151c00 100644 --- a/test-data/unit/check-python310.test +++ b/test-data/unit/check-python310.test @@ -3196,6 +3196,7 @@ def fun(val: str | None): [builtins fixtures/tuple.pyi] [case testMatchMappingRestErrorLocation] +rest: list[int] data: list[int] match data: case [1, *rest]: