Skip to content

Commit 5378cb1

Browse files
committed
Prevent final reassignment in match case
1 parent 2e5d7ee commit 5378cb1

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

mypy/checker.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5577,6 +5577,8 @@ def infer_variable_types_from_type_maps(
55775577
previous_type, _, _ = self.check_lvalue(expr)
55785578
if previous_type is not None:
55795579
already_exists = True
5580+
if isinstance(expr.node, Var) and expr.node.is_final:
5581+
self.msg.cant_assign_to_final(expr.name, False, expr)
55805582
if self.check_subtype(
55815583
typ,
55825584
previous_type,

test-data/unit/check-python310.test

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2839,3 +2839,16 @@ match value_type:
28392839
case _:
28402840
assert_never(value_type)
28412841
[builtins fixtures/tuple.pyi]
2842+
2843+
2844+
[case testAssignmentToFinalInMatchCaseNotAllowed]
2845+
# flags: --python-version 3.10
2846+
from typing import Final
2847+
2848+
def scope() -> None:
2849+
FOO: Final = 8
2850+
2851+
val = 8
2852+
match val:
2853+
case FOO: # E: Cannot assign to final name "FOO"
2854+
pass

0 commit comments

Comments
 (0)