@@ -12,64 +12,121 @@ We’ve just uploaded mypy 1.10 to the Python Package Index ([PyPI](https://pypi
12
12
13
13
You can read the full documentation for this release on [ Read the Docs] ( http://mypy.readthedocs.io ) .
14
14
15
- ** TODO**
16
- - Implement TypeIs (PEP 742) (Jelle Zijlstra, PR [ 16898] ( https://github.com/python/mypy/pull/16898 ) )
17
- - Error handling for recursive TypeVar defaults (PEP 696) (Marc Mueller, PR [ 16925] ( https://github.com/python/mypy/pull/16925 ) )
18
- - Add basic support for recursive TypeVar defaults (PEP 696) (Marc Mueller, PR [ 16878] ( https://github.com/python/mypy/pull/16878 ) )
15
+ #### Support TypeIs (PEP 742)
19
16
20
- #### Other Notable Changes and Fixes
21
- - fix: incorrect returned type of access descriptors on unions of types (Matthieu Devlin, PR [ 16604] ( https://github.com/python/mypy/pull/16604 ) )
22
- - Fix crash when expanding invalid Unpack in a ` Callable ` alias (Ali Hamdan, PR [ 17028] ( https://github.com/python/mypy/pull/17028 ) )
23
- - Fix string formatting for string enums (roberfi, PR [ 16555] ( https://github.com/python/mypy/pull/16555 ) )
24
- - Narrow individual items when matching a tuple to a sequence pattern (Loïc Simon, PR [ 16905] ( https://github.com/python/mypy/pull/16905 ) )
25
- - Add TypeGuard and TypeIs traversing in TypeTraverserVisitor (Evgeniy Slobodkin, PR [ 17071] ( https://github.com/python/mypy/pull/17071 ) )
26
- - Improve error message for bound typevar in TypeAliasType (Ali Hamdan, PR [ 17053] ( https://github.com/python/mypy/pull/17053 ) )
27
- - Fix TypedDict init from Type with optional keys (Marc Mueller, PR [ 17068] ( https://github.com/python/mypy/pull/17068 ) )
28
- - Improve yield from inference for unions of generators (Shantanu, PR [ 16717] ( https://github.com/python/mypy/pull/16717 ) )
29
- - Support ` TypeAliasType ` in a class scope (Ali Hamdan, PR [ 17038] ( https://github.com/python/mypy/pull/17038 ) )
30
- - attrs: Fix emulating hash method logic (Hashem, PR [ 17016] ( https://github.com/python/mypy/pull/17016 ) )
31
- - Use lower-case generics more consistently in error messages (Jukka Lehtosalo, PR [ 17035] ( https://github.com/python/mypy/pull/17035 ) )
32
- - Revert "Revert use of ` ParamSpec ` for ` functools.wraps ` " (Tamir Duberstein, PR [ 16942] ( https://github.com/python/mypy/pull/16942 ) )
33
- - Support ` TypeAliasType ` (Ali Hamdan, PR [ 16926] ( https://github.com/python/mypy/pull/16926 ) )
34
- - Fix type narrowing for types.EllipsisType (Shantanu, PR [ 17003] ( https://github.com/python/mypy/pull/17003 ) )
35
- - Disallow all super calls to methods with trivial bodies (Shantanu, PR [ 16756] ( https://github.com/python/mypy/pull/16756 ) )
36
- - Fix single item enum match type exhaustion (Oskari Lehto, PR [ 16966] ( https://github.com/python/mypy/pull/16966 ) )
37
- - Fix inference with UninhabitedType (Marc Mueller, PR [ 16994] ( https://github.com/python/mypy/pull/16994 ) )
38
- - Allow TypedDict initialization from Type (Marc Mueller, PR [ 16963] ( https://github.com/python/mypy/pull/16963 ) )
39
- - Fix override checking for decorated property (Shantanu, PR [ 16856] ( https://github.com/python/mypy/pull/16856 ) )
40
- - Fix duplicate word in protocols.rst (hesam, PR [ 16950] ( https://github.com/python/mypy/pull/16950 ) )
41
- - Workaround parenthesised context manager issue (Shantanu, PR [ 16949] ( https://github.com/python/mypy/pull/16949 ) )
42
- - Fix narrowing on match with function subject (Edward Paget, PR [ 16503] ( https://github.com/python/mypy/pull/16503 ) )
43
- - Allow inferring +int to be a Literal (Spencer Brown, PR [ 16910] ( https://github.com/python/mypy/pull/16910 ) )
17
+ Mypy now supports ` TypeIs ` ([ PEP 742] ( https://peps.python.org/pep-0742/ ) ), which allows
18
+ functions to narrow the type of a value, similar to ` isinstance() ` . Unlike ` TypeGuard ` ,
19
+ ` TypeIs ` can narrow in both the ` if ` and ` else ` branches of an if statement:
44
20
45
- #### Stubgen Improvements
46
- - stubgen: Preserve empty tuple annotation (Ali Hamdan, PR [ 16907] ( https://github.com/python/mypy/pull/16907 ) )
47
- - stubgen: Add support for PEP 570 positional-only parameters (Ali Hamdan, PR [ 16904] ( https://github.com/python/mypy/pull/16904 ) )
48
- - stubgen: Replace obsolete typing aliases with builtin containers (Ali Hamdan, PR [ 16780] ( https://github.com/python/mypy/pull/16780 ) )
49
- - stubgen: Fix generated dataclass ` __init__ ` signature (Ali Hamdan, PR [ 16906] ( https://github.com/python/mypy/pull/16906 ) )
21
+ ``` python
22
+ from typing_extensions import TypeIs
50
23
51
- #### Stubtest Improvements
52
- - stubtest: correct type annotations in _ Arguments (Sam Xifaras, PR [ 16897] ( https://github.com/python/mypy/pull/16897 ) )
24
+ def is_str (s : object ) -> TypeIs[str ]:
25
+ return isinstance (s, str )
26
+
27
+ def f (o : str | int ) -> None :
28
+ if is_str(o):
29
+ # Type of o is 'str'
30
+ ...
31
+ else :
32
+ # Type of o is 'int'
33
+ ...
34
+ ```
35
+
36
+ ` TypeIs ` will be added to the ` typing ` module in Python 3.13, but it
37
+ can be used on earlier Python versions by importing it from
38
+ ` typing_extensions ` .
39
+
40
+ This feature was contributed by Jelle Zijlstra (PR [ 16898] ( https://github.com/python/mypy/pull/16898 ) ).
41
+
42
+ #### Support TypeVar Defaults (PEP 696)
43
+
44
+ [ PEP 696] ( https://peps.python.org/pep-0696/ ) adds support for type parameter defaults.
45
+ Example:
46
+
47
+ ``` python
48
+ from typing import Generic
49
+ from typing_extensions import TypeVar
50
+
51
+ T = TypeVar(" T" , default = int )
52
+
53
+ class C (Generic[T]):
54
+ ...
55
+
56
+ x: C = ...
57
+ y: C[str ] = ...
58
+ reveal_type(x) # C[int], because of the default
59
+ reveal_type(y) # C[str]
60
+ ```
61
+
62
+ TypeVar defaults will be added to the ` typing ` module in Python 3.13, but they
63
+ can be used with earlier Python releases by importing ` TypeVar ` from
64
+ ` typing_extensions ` .
65
+
66
+ This feature was contributed by Marc Mueller (PR [ 16878] ( https://github.com/python/mypy/pull/16878 )
67
+ and PR [ 16925] ( https://github.com/python/mypy/pull/16925 ) ).
68
+
69
+ #### Detect Additional Unsafe Uses of super()
70
+
71
+ Mypy will reject unsafe uses of ` super() ` more consistently, when the target has a
72
+ trivial (empty) body. Example:
73
+
74
+ ``` python
75
+ class Proto (Protocol ):
76
+ def method (self ) -> int : ...
77
+
78
+ class Sub (Proto ):
79
+ def method (self ) -> int :
80
+ return super ().meth() # Error (unsafe)
81
+ ```
82
+
83
+ This feature was contributed by Shantanu (PR [ 16756] ( https://github.com/python/mypy/pull/16756 ) ).
84
+
85
+ #### Stubgen Improvements
86
+ - Preserve empty tuple annotation (Ali Hamdan, PR [ 16907] ( https://github.com/python/mypy/pull/16907 ) )
87
+ - Add support for PEP 570 positional-only parameters (Ali Hamdan, PR [ 16904] ( https://github.com/python/mypy/pull/16904 ) )
88
+ - Replace obsolete typing aliases with builtin containers (Ali Hamdan, PR [ 16780] ( https://github.com/python/mypy/pull/16780 ) )
89
+ - Fix generated dataclass ` __init__ ` signature (Ali Hamdan, PR [ 16906] ( https://github.com/python/mypy/pull/16906 ) )
53
90
54
91
#### Mypyc Improvements
55
- - [ mypyc] Refactor: add two list primitive ops (Jukka Lehtosalo, PR [ 17058] ( https://github.com/python/mypy/pull/17058 ) )
56
- - [ mypyc] Refactor: use primitive op for initializing list item (Jukka Lehtosalo, PR [ 17056] ( https://github.com/python/mypy/pull/17056 ) )
57
- - [ mypyc] Refactor: move tagged int related code to mypyc.lower.int_ops (Jukka Lehtosalo, PR [ 17052] ( https://github.com/python/mypy/pull/17052 ) )
58
- - [ mypyc] Implement lowering for remaining tagged integer comparisons (Jukka Lehtosalo, PR [ 17040] ( https://github.com/python/mypy/pull/17040 ) )
59
- - [ mypyc] Implement lowering pass and add primitives for int (in)equality (Jukka Lehtosalo, PR [ 17027] ( https://github.com/python/mypy/pull/17027 ) )
60
- - [ mypyc] Optimize away some bool/bit registers (Jukka Lehtosalo, PR [ 17022] ( https://github.com/python/mypy/pull/17022 ) )
61
- - [ mypyc] Provide an easier way to define IR-to-IR transforms (Jukka Lehtosalo, PR [ 16998] ( https://github.com/python/mypy/pull/16998 ) )
62
- - [ mypyc] Remangle redefined names produced by async with (Richard Si, PR [ 16408] ( https://github.com/python/mypy/pull/16408 ) )
63
- - [ mypyc] Optimize TYPE_CHECKING to False at Runtime (Srinivas Lade, PR [ 16263] ( https://github.com/python/mypy/pull/16263 ) )
64
- - [ mypyc] Fix compilation of unreachable comprehensions (Richard Si, PR [ 15721] ( https://github.com/python/mypy/pull/15721 ) )
65
- - [ mypyc] Don't crash on non-inlinable final local reads (Richard Si, PR [ 15719] ( https://github.com/python/mypy/pull/15719 ) )
92
+
93
+ - Provide an easier way to define IR-to-IR transforms (Jukka Lehtosalo, PR [ 16998] ( https://github.com/python/mypy/pull/16998 ) )
94
+ - Implement lowering pass and add primitives for int (in)equality (Jukka Lehtosalo, PR [ 17027] ( https://github.com/python/mypy/pull/17027 ) )
95
+ - Implement lowering for remaining tagged integer comparisons (Jukka Lehtosalo, PR [ 17040] ( https://github.com/python/mypy/pull/17040 ) )
96
+ - Optimize away some bool/bit registers (Jukka Lehtosalo, PR [ 17022] ( https://github.com/python/mypy/pull/17022 ) )
97
+ - Remangle redefined names produced by async with (Richard Si, PR [ 16408] ( https://github.com/python/mypy/pull/16408 ) )
98
+ - Optimize TYPE_CHECKING to False at Runtime (Srinivas Lade, PR [ 16263] ( https://github.com/python/mypy/pull/16263 ) )
99
+ - Fix compilation of unreachable comprehensions (Richard Si, PR [ 15721] ( https://github.com/python/mypy/pull/15721 ) )
100
+ - Don't crash on non-inlinable final local reads (Richard Si, PR [ 15719] ( https://github.com/python/mypy/pull/15719 ) )
101
+ - Support ` TypeAliasType ` (Ali Hamdan, PR [ 16926] ( https://github.com/python/mypy/pull/16926 ) )
66
102
67
103
#### Documentation Improvements
68
- - Update running_mypy.rst add closing bracket (Roman Solomatin, PR [ 17046] ( https://github.com/python/mypy/pull/17046 ) )
69
- - Docs: docstrings in checker.py, ast_helpers.py (Ihor, PR [ 16908] ( https://github.com/python/mypy/pull/16908 ) )
70
- - docs: Add missing ClassVar import (youkaichao, PR [ 16962] ( https://github.com/python/mypy/pull/16962 ) )
71
- - Docs: Update ` TypedDict ` import statements (Riccardo Di Maio, PR [ 16958] ( https://github.com/python/mypy/pull/16958 ) )
72
- - Docs: adding missing ` mutable-override ` to section title (James Braza, PR [ 16886] ( https://github.com/python/mypy/pull/16886 ) )
104
+ - Import ` TypedDict ` from ` typing ` instead of ` typing_extensions ` (Riccardo Di Maio, PR [ 16958] ( https://github.com/python/mypy/pull/16958 ) )
105
+ - Add missing ` mutable-override ` to section title (James Braza, PR [ 16886] ( https://github.com/python/mypy/pull/16886 ) )
106
+
107
+ #### Error Reporting Improvements
108
+
109
+ - Improve error message for bound TypeVar in TypeAliasType (Ali Hamdan, PR [ 17053] ( https://github.com/python/mypy/pull/17053 ) )
110
+ - Use lower-case generics more consistently in error messages (Jukka Lehtosalo, PR [ 17035] ( https://github.com/python/mypy/pull/17035 ) )
111
+
112
+ #### Other Notable Changes and Fixes
113
+ - Fix incorrect inferred type when accessing descriptor on union type (Matthieu Devlin, PR [ 16604] ( https://github.com/python/mypy/pull/16604 ) )
114
+ - Fix crash when expanding invalid ` Unpack ` in a ` Callable ` alias (Ali Hamdan, PR [ 17028] ( https://github.com/python/mypy/pull/17028 ) )
115
+ - Fix false positive when string formatting with string enum (roberfi, PR [ 16555] ( https://github.com/python/mypy/pull/16555 ) )
116
+ - Narrow individual items when matching a tuple to a sequence pattern (Loïc Simon, PR [ 16905] ( https://github.com/python/mypy/pull/16905 ) )
117
+ - Fix false positive from type variable within TypeGuard or TypeIs (Evgeniy Slobodkin, PR [ 17071] ( https://github.com/python/mypy/pull/17071 ) )
118
+ - Improve ` yield from ` inference for unions of generators (Shantanu, PR [ 16717] ( https://github.com/python/mypy/pull/16717 ) )
119
+ - Support ` TypeAliasType ` in a class scope (Ali Hamdan, PR [ 17038] ( https://github.com/python/mypy/pull/17038 ) )
120
+ - Fix emulating hash method logic in ` attrs ` classes (Hashem, PR [ 17016] ( https://github.com/python/mypy/pull/17016 ) )
121
+ - Add reverted typeshed commit that uses ` ParamSpec ` for ` functools.wraps ` (Tamir Duberstein, PR [ 16942] ( https://github.com/python/mypy/pull/16942 ) )
122
+ - Fix type narrowing for ` types.EllipsisType ` (Shantanu, PR [ 17003] ( https://github.com/python/mypy/pull/17003 ) )
123
+ - Fix single item enum match type exhaustion (Oskari Lehto, PR [ 16966] ( https://github.com/python/mypy/pull/16966 ) )
124
+ - Improve type inference with empty collections (Marc Mueller, PR [ 16994] ( https://github.com/python/mypy/pull/16994 ) )
125
+ - Fix override checking for decorated property (Shantanu, PR [ 16856] ( https://github.com/python/mypy/pull/16856 ) )
126
+ - Fix narrowing on match with function subject (Edward Paget, PR [ 16503] ( https://github.com/python/mypy/pull/16503 ) )
127
+ - Allow ` +N ` within ` Literal[...] ` (Spencer Brown, PR [ 16910] ( https://github.com/python/mypy/pull/16910 ) )
128
+ - Experimental: Support TypedDict within ` type[...] ` (Marc Mueller, PR [ 16963] ( https://github.com/python/mypy/pull/16963 ) )
129
+ - Experimtental: Fix issue with TypedDict with optional keys in ` type[...] ` (Marc Mueller, PR [ 17068] ( https://github.com/python/mypy/pull/17068 ) )
73
130
74
131
#### Acknowledgements
75
132
Thanks to all mypy contributors who contributed to this release:
0 commit comments