Commit ae21d46
committed
fix: allow Final[T] instance fields in dataclasses to depend on type variables
PEP 591 and the dataclass spec say that a Final field declared in a
dataclass body is an *instance attribute*, not a class attribute, unless
explicitly annotated with ClassVar. The checker was unconditionally
raising 'Final name declared in class body cannot depend on type
variables' for any Final[T] in a generic class body, which is correct
for plain classes but wrong for dataclasses.
fix: when the active class has 'dataclass_tag' in its metadata and the
lvalue is a Var that is not marked is_classvar, skip the error.
non-dataclass classes and explicit ClassVar fields are unaffected.
fixes #216371 parent 3179030 commit ae21d46
2 files changed
Lines changed: 46 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3398 | 3398 | | |
3399 | 3399 | | |
3400 | 3400 | | |
3401 | | - | |
| 3401 | + | |
3402 | 3402 | | |
3403 | | - | |
| 3403 | + | |
| 3404 | + | |
| 3405 | + | |
| 3406 | + | |
| 3407 | + | |
| 3408 | + | |
| 3409 | + | |
| 3410 | + | |
| 3411 | + | |
| 3412 | + | |
| 3413 | + | |
| 3414 | + | |
| 3415 | + | |
3404 | 3416 | | |
3405 | 3417 | | |
3406 | 3418 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1322 | 1322 | | |
1323 | 1323 | | |
1324 | 1324 | | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
| 1333 | + | |
| 1334 | + | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
| 1351 | + | |
| 1352 | + | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
| 1356 | + | |
0 commit comments