@@ -12,64 +12,121 @@ We’ve just uploaded mypy 1.10 to the Python Package Index ([PyPI](https://pypi
1212
1313You can read the full documentation for this release on [ Read the Docs] ( http://mypy.readthedocs.io ) .
1414
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)
1916
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:
4420
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
5023
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 ) )
5390
5491#### 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 ) )
66102
67103#### 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 ) )
73130
74131#### Acknowledgements
75132Thanks to all mypy contributors who contributed to this release:
0 commit comments