Skip to content

Commit 12d5da4

Browse files
committed
Do not treat annotated self-assign as special
1 parent 1698432 commit 12d5da4

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

mypy/semanal.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3286,7 +3286,7 @@ def analyze_identity_global_assignment(self, s: AssignmentStmt) -> bool:
32863286
32873287
Return true if special casing was applied.
32883288
"""
3289-
if not isinstance(s.rvalue, NameExpr) or len(s.lvalues) != 1:
3289+
if not isinstance(s.rvalue, NameExpr) or len(s.lvalues) != 1 or s.type is not None:
32903290
# Not of form 'X = X'
32913291
return False
32923292
lvalue = s.lvalues[0]

test-data/unit/check-final.test

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,19 @@ class MyClass:
11731173
a: None
11741174
a: Final[int] = 1 # E: Cannot redefine an existing name as final # E: Name "a" already defined on line 5
11751175

1176+
[case testFinalCannotBeRedefinition]
1177+
from typing import Final
1178+
1179+
# This time travel is suboptimal but good enough for now?
1180+
a = 0 # E: Cannot assign to final name "a"
1181+
b = 0 # E: Cannot assign to final name "b"
1182+
1183+
a: Final = a # E: Cannot redefine an existing name as final
1184+
b: Final = 1 # E: Cannot redefine an existing name as final
1185+
1186+
a = 1 # E: Cannot assign to final name "a"
1187+
b = 1 # E: Cannot assign to final name "b"
1188+
11761189
[case testFinalOverrideAllowedForPrivate]
11771190
from typing import Final, final
11781191

0 commit comments

Comments
 (0)