Commit eb41eb1
authored
Let --allow-redefinition-new widen global in function with None init (#21285)
Now this infers an optional type, for backward compat with
`--allow-redefinition-old`:
```py
# mypy: allow-redefinition-new
x = None
def foo() -> None:
global x
x = 1 # Ok
# Type of "x" is "int | None" here
```
There are a few non-trivial things. The implementation propagates the
widened type to the global scope, since otherwise `x` would have type
`None` at top level after the function. We also only allow widening if
the original type is `None`, to make reasoning about this easier.
Otherwise the type could be inferred from any number of functions. Also
this is sufficient to maintain backward compatibility.
I used coding agent assist with small incremental changes and careful
manual reviews.
See #21276 for additional context.1 parent f4db3cd commit eb41eb1
4 files changed
Lines changed: 200 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
424 | 424 | | |
425 | 425 | | |
426 | 426 | | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
427 | 430 | | |
428 | 431 | | |
429 | 432 | | |
| |||
488 | 491 | | |
489 | 492 | | |
490 | 493 | | |
| 494 | + | |
491 | 495 | | |
492 | 496 | | |
493 | 497 | | |
| |||
496 | 500 | | |
497 | 501 | | |
498 | 502 | | |
| 503 | + | |
499 | 504 | | |
500 | 505 | | |
501 | 506 | | |
| |||
1616 | 1621 | | |
1617 | 1622 | | |
1618 | 1623 | | |
| 1624 | + | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
1619 | 1634 | | |
1620 | 1635 | | |
1621 | 1636 | | |
| |||
4897 | 4912 | | |
4898 | 4913 | | |
4899 | 4914 | | |
| 4915 | + | |
4900 | 4916 | | |
4901 | 4917 | | |
4902 | 4918 | | |
4903 | 4919 | | |
4904 | 4920 | | |
4905 | 4921 | | |
4906 | 4922 | | |
| 4923 | + | |
| 4924 | + | |
| 4925 | + | |
| 4926 | + | |
4907 | 4927 | | |
4908 | 4928 | | |
4909 | 4929 | | |
| |||
4932 | 4952 | | |
4933 | 4953 | | |
4934 | 4954 | | |
4935 | | - | |
| 4955 | + | |
4936 | 4956 | | |
4937 | 4957 | | |
4938 | 4958 | | |
4939 | 4959 | | |
4940 | 4960 | | |
4941 | 4961 | | |
4942 | 4962 | | |
| 4963 | + | |
| 4964 | + | |
| 4965 | + | |
| 4966 | + | |
| 4967 | + | |
| 4968 | + | |
| 4969 | + | |
| 4970 | + | |
| 4971 | + | |
| 4972 | + | |
| 4973 | + | |
| 4974 | + | |
| 4975 | + | |
| 4976 | + | |
| 4977 | + | |
| 4978 | + | |
4943 | 4979 | | |
4944 | 4980 | | |
4945 | 4981 | | |
| |||
8337 | 8373 | | |
8338 | 8374 | | |
8339 | 8375 | | |
8340 | | - | |
| 8376 | + | |
| 8377 | + | |
| 8378 | + | |
| 8379 | + | |
| 8380 | + | |
| 8381 | + | |
| 8382 | + | |
| 8383 | + | |
| 8384 | + | |
| 8385 | + | |
8341 | 8386 | | |
8342 | 8387 | | |
8343 | 8388 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4350 | 4350 | | |
4351 | 4351 | | |
4352 | 4352 | | |
| 4353 | + | |
| 4354 | + | |
4353 | 4355 | | |
4354 | 4356 | | |
4355 | 4357 | | |
4356 | | - | |
| 4358 | + | |
4357 | 4359 | | |
4358 | 4360 | | |
4359 | 4361 | | |
4360 | 4362 | | |
4361 | 4363 | | |
4362 | | - | |
4363 | | - | |
| 4364 | + | |
| 4365 | + | |
4364 | 4366 | | |
4365 | 4367 | | |
4366 | 4368 | | |
4367 | | - | |
4368 | | - | |
4369 | | - | |
| 4369 | + | |
| 4370 | + | |
| 4371 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
168 | 168 | | |
169 | 169 | | |
170 | 170 | | |
171 | | - | |
| 171 | + | |
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | 175 | | |
176 | 176 | | |
177 | 177 | | |
178 | | - | |
179 | | - | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
180 | 227 | | |
181 | | - | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
182 | 241 | | |
183 | 242 | | |
184 | 243 | | |
| |||
641 | 700 | | |
642 | 701 | | |
643 | 702 | | |
| 703 | + | |
644 | 704 | | |
645 | 705 | | |
646 | 706 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6743 | 6743 | | |
6744 | 6744 | | |
6745 | 6745 | | |
6746 | | - | |
| 6746 | + | |
6747 | 6747 | | |
6748 | 6748 | | |
6749 | 6749 | | |
| |||
11682 | 11682 | | |
11683 | 11683 | | |
11684 | 11684 | | |
| 11685 | + | |
| 11686 | + | |
| 11687 | + | |
| 11688 | + | |
| 11689 | + | |
| 11690 | + | |
| 11691 | + | |
| 11692 | + | |
| 11693 | + | |
| 11694 | + | |
| 11695 | + | |
| 11696 | + | |
| 11697 | + | |
| 11698 | + | |
| 11699 | + | |
| 11700 | + | |
| 11701 | + | |
| 11702 | + | |
| 11703 | + | |
| 11704 | + | |
| 11705 | + | |
| 11706 | + | |
| 11707 | + | |
| 11708 | + | |
| 11709 | + | |
| 11710 | + | |
| 11711 | + | |
| 11712 | + | |
| 11713 | + | |
| 11714 | + | |
| 11715 | + | |
| 11716 | + | |
| 11717 | + | |
| 11718 | + | |
| 11719 | + | |
| 11720 | + | |
| 11721 | + | |
| 11722 | + | |
| 11723 | + | |
| 11724 | + | |
| 11725 | + | |
| 11726 | + | |
| 11727 | + | |
| 11728 | + | |
| 11729 | + | |
| 11730 | + | |
| 11731 | + | |
| 11732 | + | |
| 11733 | + | |
| 11734 | + | |
| 11735 | + | |
| 11736 | + | |
| 11737 | + | |
| 11738 | + | |
| 11739 | + | |
| 11740 | + | |
| 11741 | + | |
| 11742 | + | |
| 11743 | + | |
| 11744 | + | |
| 11745 | + | |
| 11746 | + | |
| 11747 | + | |
| 11748 | + | |
| 11749 | + | |
| 11750 | + | |
| 11751 | + | |
| 11752 | + | |
| 11753 | + | |
| 11754 | + | |
| 11755 | + | |
| 11756 | + | |
| 11757 | + | |
| 11758 | + | |
| 11759 | + | |
| 11760 | + | |
| 11761 | + | |
| 11762 | + | |
| 11763 | + | |
| 11764 | + | |
0 commit comments