|
3 | 3 | ## Next release |
4 | 4 |
|
5 | 5 |
|
| 6 | +## Mypy 1.11 |
| 7 | + |
| 8 | +We’ve just uploaded mypy 1.11 to the Python Package Index ([PyPI](https://pypi.org/project/mypy/)). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows: |
| 9 | + |
| 10 | + python3 -m pip install -U mypy |
| 11 | + |
| 12 | +You can read the full documentation for this release on [Read the Docs](http://mypy.readthedocs.io). |
| 13 | + |
| 14 | +#### Support Python 3.12 Syntax for Generics (PEP 695) |
| 15 | + |
| 16 | +Mypy now supports the new type parameter syntax introduced in Python 3.12 ([PEP 695](https://peps.python.org/pep-0695/)). |
| 17 | +This feature is still experimental and must be enabled with the `--enable-incomplete-feature=NewGenericSyntax` flag, or with `enable_incomplete_feature = NewGenericSyntax` in the mypy configuration file. |
| 18 | +We plan to enable this by default in the next mypy feature release. |
| 19 | + |
| 20 | +This example demonstrates the new syntax: |
| 21 | + |
| 22 | +```python |
| 23 | +# Generic function |
| 24 | +def f[T](x: T) -> T: ... |
| 25 | + |
| 26 | +reveal_type(f(1)) # Revealed type is 'int' |
| 27 | + |
| 28 | +# Generic class |
| 29 | +class C[T]: |
| 30 | + def __init__(self, x: T) -> None: |
| 31 | + self.x = x |
| 32 | + |
| 33 | +c = C('a') |
| 34 | +reveal_type(c.x) # Revealed type is 'str' |
| 35 | + |
| 36 | +# Type alias |
| 37 | +type A[T] = C[list[T]] |
| 38 | +``` |
| 39 | + |
| 40 | +This feature was contributed by Jukka Lehtosalo. |
| 41 | + |
| 42 | + |
| 43 | +#### Support for `functools.partial` |
| 44 | + |
| 45 | +Mypy now type checks uses of `functools.partial`. Previously mypy would accept arbitrary arguments. |
| 46 | + |
| 47 | +This example will now produce an error: |
| 48 | + |
| 49 | +```python |
| 50 | +from functools import partial |
| 51 | + |
| 52 | +def f(a: int, b: str) -> None: ... |
| 53 | + |
| 54 | +g = partial(f, 1) |
| 55 | + |
| 56 | +# Argument has incompatible type "int"; expected "str" |
| 57 | +g(11) |
| 58 | +``` |
| 59 | + |
| 60 | +This feature was contributed by Shantanu (PR [16939](https://github.com/python/mypy/pull/16939)). |
| 61 | + |
| 62 | + |
| 63 | +#### Stricter Checks for Untyped Overrides |
| 64 | + |
| 65 | +Past mypy versions didn't check if untyped methods were compatible with overridden methods. This would result in false negatives. Now mypy performs these checks when using `--check-untyped-defs`. |
| 66 | + |
| 67 | +For example, this now generates an error if using `--check-untyped-defs`: |
| 68 | + |
| 69 | +```python |
| 70 | +class Base: |
| 71 | + def f(self, x: int = 0) -> None: ... |
| 72 | + |
| 73 | +class Derived(Base): |
| 74 | + # Signature incompatible with "Base" |
| 75 | + def f(self): ... |
| 76 | +``` |
| 77 | + |
| 78 | +This feature was contributed by Steven Troxler (PR [17276](https://github.com/python/mypy/pull/17276)). |
| 79 | + |
| 80 | + |
| 81 | +#### Type Inference Improvements |
| 82 | + |
| 83 | +The new polymorphic inference algorithm introduced in mypy 1.5 is now used in more situations. This improves type inference involving generic higher-order functions, in particular. |
| 84 | + |
| 85 | +This feature was contributed by Ivan Levkivskyi (PR [17348](https://github.com/python/mypy/pull/17348)). |
| 86 | + |
| 87 | +Mypy now uses unions of tuple item types in certain contexts to enable more precise inferred types. Example: |
| 88 | + |
| 89 | +```python |
| 90 | +for x in (1, 'x'): |
| 91 | + # Previously inferred as 'object' |
| 92 | + reveal_type(x) # Revealed type is 'int | str' |
| 93 | +``` |
| 94 | + |
| 95 | +This was also contributed by Ivan Levkivskyi (PR [17408](https://github.com/python/mypy/pull/17408)). |
| 96 | + |
| 97 | + |
| 98 | +#### Improvements to Detection of Overlapping Overloads |
| 99 | + |
| 100 | +The details of how mypy checks if two `@overload` signatures are unsafely overlapping were overhauled. This both fixes some false positives, and allows mypy to detect additional unsafe signatures. |
| 101 | + |
| 102 | +This feature was contributed by Ivan Levkivskyi (PR [17392](https://github.com/python/mypy/pull/17392)). |
| 103 | + |
| 104 | + |
| 105 | +#### Better Support for Type Hints in Expressions |
| 106 | + |
| 107 | +Mypy now allows more expressions that evaluate to valid type annotations in all expression contexts. The inferred types of these expressions are also sometimes more precise. Previously they were often `object`. |
| 108 | + |
| 109 | +This example uses a union type that includes a callable type as an expression, and it no longer generates an error: |
| 110 | + |
| 111 | +```python |
| 112 | +from typing import Callable |
| 113 | + |
| 114 | +print(Callable[[], int] | None) # No error |
| 115 | +``` |
| 116 | + |
| 117 | +This feature was contributed by Jukka Lehtosalo (PR [17404](https://github.com/python/mypy/pull/17404)). |
| 118 | + |
| 119 | + |
| 120 | +#### Mypyc Improvements |
| 121 | + |
| 122 | +Mypyc now supports the new syntax for generics introduced in Python 3.12 (see above). Another notable improvement is signficantly faster basic operations on `int` values. |
| 123 | + |
| 124 | + * Support Python 3.12 syntax for generic functions and classes (Jukka Lehtosalo, PR [17357](https://github.com/python/mypy/pull/17357)) |
| 125 | + * Support Python 3.12 type alias syntax (Jukka Lehtosalo, PR [17384](https://github.com/python/mypy/pull/17384)) |
| 126 | + * Fix ParamSpec (Shantanu, PR [17309](https://github.com/python/mypy/pull/17309)) |
| 127 | + * Inline fast paths of integer unboxing operations (Jukka Lehtosalo, PR [17266](https://github.com/python/mypy/pull/17266)) |
| 128 | + * Inline tagged integer arithmetic and bitwise operations (Jukka Lehtosalo, PR [17265](https://github.com/python/mypy/pull/17265)) |
| 129 | + * Allow specifying primitives as pure (Jukka Lehtosalo, PR [17263](https://github.com/python/mypy/pull/17263)) |
| 130 | + |
| 131 | + |
| 132 | +#### Changes to Stubtest |
| 133 | + * Ignore `_ios_support` (Alex Waygood, PR [17270](https://github.com/python/mypy/pull/17270)) |
| 134 | + * Improve support for Python 3.13 (Shantanu, PR [17261](https://github.com/python/mypy/pull/17261)) |
| 135 | + |
| 136 | + |
| 137 | +#### Changes to Stubgen |
| 138 | + * Gracefully handle invalid `Optional` and recognize aliases to PEP 604 unions (Ali Hamdan, PR [17386](https://github.com/python/mypy/pull/17386)) |
| 139 | + * Fix for Python 3.13 (Jelle Zijlstra, PR [17290](https://github.com/python/mypy/pull/17290)) |
| 140 | + * Preserve enum value initialisers (Shantanu, PR [17125](https://github.com/python/mypy/pull/17125)) |
| 141 | + |
| 142 | + |
| 143 | +#### Miscellaneous New Features |
| 144 | + * Add error format support and JSON output option via `--output json` (Tushar Sadhwani, PR [11396](https://github.com/python/mypy/pull/11396)) |
| 145 | + * Support `enum.member` in Python 3.11+ (Nikita Sobolev, PR [17382](https://github.com/python/mypy/pull/17382)) |
| 146 | + * Support `enum.nonmember` in Python 3.11+ (Nikita Sobolev, PR [17376](https://github.com/python/mypy/pull/17376)) |
| 147 | + * Support `namedtuple.__replace__` in Python 3.13 (Shantanu, PR [17259](https://github.com/python/mypy/pull/17259)) |
| 148 | + * Support `rename=True` in collections.namedtuple (Jelle Zijlstra, PR [17247](https://github.com/python/mypy/pull/17247)) |
| 149 | + * Add support for `__spec__` (Shantanu, PR [14739](https://github.com/python/mypy/pull/14739)) |
| 150 | + |
| 151 | + |
| 152 | +#### Changes to Error Reporting |
| 153 | + * Mention `--enable-incomplete-feature=NewGenericSyntax` in messages (Shantanu, PR [17462](https://github.com/python/mypy/pull/17462)) |
| 154 | + * Do not report plugin-generated methods with `explicit-override` (sobolevn, PR [17433](https://github.com/python/mypy/pull/17433)) |
| 155 | + * Use and display namespaces for function type variables (Ivan Levkivskyi, PR [17311](https://github.com/python/mypy/pull/17311)) |
| 156 | + * Fix false positive for Final local scope variable in Protocol (GiorgosPapoutsakis, PR [17308](https://github.com/python/mypy/pull/17308)) |
| 157 | + * Use Never in more messages, use ambiguous in join (Shantanu, PR [17304](https://github.com/python/mypy/pull/17304)) |
| 158 | + * Log full path to config file in verbose output (dexterkennedy, PR [17180](https://github.com/python/mypy/pull/17180)) |
| 159 | + * Added `[prop-decorator]` code for unsupported property decorators (#14461) (Christopher Barber, PR [16571](https://github.com/python/mypy/pull/16571)) |
| 160 | + * Suppress second error message with `:=` and `[truthy-bool]` (Nikita Sobolev, PR [15941](https://github.com/python/mypy/pull/15941)) |
| 161 | + * Generate error for assignment of functional Enum to variable of different name (Shantanu, PR [16805](https://github.com/python/mypy/pull/16805)) |
| 162 | + * Fix error reporting on cached run after uninstallation of third party library (Shantanu, PR [17420](https://github.com/python/mypy/pull/17420)) |
| 163 | + |
| 164 | + |
| 165 | +#### Fixes for Crashes |
| 166 | + * Fix daemon crash on invalid type in TypedDict (Ivan Levkivskyi, PR [17495](https://github.com/python/mypy/pull/17495)) |
| 167 | + * Fix crash and bugs related to `partial()` (Ivan Levkivskyi, PR [17423](https://github.com/python/mypy/pull/17423)) |
| 168 | + * Fix crash when overriding with unpacked TypedDict (Ivan Levkivskyi, PR [17359](https://github.com/python/mypy/pull/17359)) |
| 169 | + * Fix crash on TypedDict unpacking for ParamSpec (Ivan Levkivskyi, PR [17358](https://github.com/python/mypy/pull/17358)) |
| 170 | + * Fix crash involving recursive union of tuples (Ivan Levkivskyi, PR [17353](https://github.com/python/mypy/pull/17353)) |
| 171 | + * Fix crash on invalid callable property override (Ivan Levkivskyi, PR [17352](https://github.com/python/mypy/pull/17352)) |
| 172 | + * Fix crash on unpacking self in NamedTuple (Ivan Levkivskyi, PR [17351](https://github.com/python/mypy/pull/17351)) |
| 173 | + * Fix crash on recursive alias with an optional type (Ivan Levkivskyi, PR [17350](https://github.com/python/mypy/pull/17350)) |
| 174 | + * Fix crash on type comment inside generic definitions (Bénédikt Tran, PR [16849](https://github.com/python/mypy/pull/16849)) |
| 175 | + |
| 176 | + |
| 177 | +#### Changes to Documentation |
| 178 | + * Use inline config in documentation for optional error codes (Shantanu, PR [17374](https://github.com/python/mypy/pull/17374)) |
| 179 | + * Use lower-case generics in documentation (Seo Sanghyeon, PR [17176](https://github.com/python/mypy/pull/17176)) |
| 180 | + * Add documentation for show-error-code-links (GiorgosPapoutsakis, PR [17144](https://github.com/python/mypy/pull/17144)) |
| 181 | + * Update CONTRIBUTING.md to include commands for Windows (GiorgosPapoutsakis, PR [17142](https://github.com/python/mypy/pull/17142)) |
| 182 | + |
| 183 | + |
| 184 | +#### Other Notable Improvements and Fixes |
| 185 | + * Fix ParamSpec inference against TypeVarTuple (Ivan Levkivskyi, PR [17431](https://github.com/python/mypy/pull/17431)) |
| 186 | + * Fix explicit type for `partial` (Ivan Levkivskyi, PR [17424](https://github.com/python/mypy/pull/17424)) |
| 187 | + * Always allow lambda calls (Ivan Levkivskyi, PR [17430](https://github.com/python/mypy/pull/17430)) |
| 188 | + * Fix isinstance checks with PEP 604 unions containing None (Shantanu, PR [17415](https://github.com/python/mypy/pull/17415)) |
| 189 | + * Fix self-referential upper bound in new-style type variables (Ivan Levkivskyi, PR [17407](https://github.com/python/mypy/pull/17407)) |
| 190 | + * Consider overlap between instances and callables (Ivan Levkivskyi, PR [17389](https://github.com/python/mypy/pull/17389)) |
| 191 | + * Allow new-style self-types in classmethods (Ivan Levkivskyi, PR [17381](https://github.com/python/mypy/pull/17381)) |
| 192 | + * Fix isinstance with type aliases to PEP 604 unions (Shantanu, PR [17371](https://github.com/python/mypy/pull/17371)) |
| 193 | + * Properly handle unpacks in overlap checks (Ivan Levkivskyi, PR [17356](https://github.com/python/mypy/pull/17356)) |
| 194 | + * Fix type application for classes with generic constructors (Ivan Levkivskyi, PR [17354](https://github.com/python/mypy/pull/17354)) |
| 195 | + * Update `typing_extensions` to >=4.6.0 to fix Python 3.12 error (Ben Brown, PR [17312](https://github.com/python/mypy/pull/17312)) |
| 196 | + * Avoid "does not return" error in lambda (Shantanu, PR [17294](https://github.com/python/mypy/pull/17294)) |
| 197 | + * Fix bug with descriptors in non-strict-optional mode (Max Murin, PR [17293](https://github.com/python/mypy/pull/17293)) |
| 198 | + * Don’t leak unreachability from lambda body to surrounding scope (Anders Kaseorg, PR [17287](https://github.com/python/mypy/pull/17287)) |
| 199 | + * Fix issues with non-ASCII characters on Windows (Alexander Leopold Shon, PR [17275](https://github.com/python/mypy/pull/17275)) |
| 200 | + * Fix for type narrowing of negative integer literals (gilesgc, PR [17256](https://github.com/python/mypy/pull/17256)) |
| 201 | + * Fix confusion between .py and .pyi files in mypy daemon (Valentin Stanciu, PR [17245](https://github.com/python/mypy/pull/17245)) |
| 202 | + * Fix type of `tuple[X, Y]` expression (urnest, PR [17235](https://github.com/python/mypy/pull/17235)) |
| 203 | + * Don't forget that a `TypedDict` was wrapped in `Unpack` after a `name-defined` error occurred (Christoph Tyralla, PR [17226](https://github.com/python/mypy/pull/17226)) |
| 204 | + * Mark annotated argument as having an explicit, not inferred type (bzoracler, PR [17217](https://github.com/python/mypy/pull/17217)) |
| 205 | + * Don't consider Enum private attributes as enum members (Ali Hamdan, PR [17182](https://github.com/python/mypy/pull/17182)) |
| 206 | + * Fix Literal strings containing pipe characters (Jelle Zijlstra, PR [17148](https://github.com/python/mypy/pull/17148)) |
| 207 | + |
| 208 | + |
| 209 | +#### Typeshed Updates |
| 210 | + |
| 211 | +Please see [git log](https://github.com/python/typeshed/commits/main?after=6dda799d8ad1d89e0f8aad7ac41d2d34bd838ace+0&branch=main&path=stdlib) for full list of standard library typeshed stub changes. |
| 212 | + |
| 213 | + |
| 214 | +#### Acknowledgements |
| 215 | +Thanks to all mypy contributors who contributed to this release: |
| 216 | + |
| 217 | +- Alex Waygood |
| 218 | +- Alexander Leopold Shon |
| 219 | +- Ali Hamdan |
| 220 | +- Anders Kaseorg |
| 221 | +- Ben Brown |
| 222 | +- Bénédikt Tran |
| 223 | +- bzoracler |
| 224 | +- Christoph Tyralla |
| 225 | +- Christopher Barber |
| 226 | +- dexterkennedy |
| 227 | +- gilesgc |
| 228 | +- GiorgosPapoutsakis |
| 229 | +- Ivan Levkivskyi |
| 230 | +- Jelle Zijlstra |
| 231 | +- Jukka Lehtosalo |
| 232 | +- Marc Mueller |
| 233 | +- Matthieu Devlin |
| 234 | +- Michael R. Crusoe |
| 235 | +- Nikita Sobolev |
| 236 | +- Seo Sanghyeon |
| 237 | +- Shantanu |
| 238 | +- sobolevn |
| 239 | +- Steven Troxler |
| 240 | +- Tadeu Manoel |
| 241 | +- Tamir Duberstein |
| 242 | +- Tushar Sadhwani |
| 243 | +- urnest |
| 244 | +- Valentin Stanciu |
| 245 | + |
| 246 | +I’d also like to thank my employer, Dropbox, for supporting mypy development. |
| 247 | + |
6 | 248 |
|
7 | 249 | ## Mypy 1.10 |
8 | 250 |
|
@@ -163,8 +405,11 @@ This feature was contributed by Shantanu (PR [16756](https://github.com/python/m |
163 | 405 |
|
164 | 406 | #### Typeshed Updates |
165 | 407 |
|
166 | | -Please see [git log](https://github.com/python/typeshed/commits/main?after=7c8e82fe483a40ec4cb0a2505cfdb0f3e7cc81d9+0&branch=main&path=stdlib) for full list of standard library typeshed stub changes. |
| 408 | +Please see [git log](https://github.com/python/typeshed/commits/main?after=6dda799d8ad1d89e0f8aad7ac41d2d34bd838ace+0&branch=main&path=stdlib) for full list of standard library typeshed stub changes. |
| 409 | + |
| 410 | +#### Mypy 1.10.1 |
167 | 411 |
|
| 412 | +- Fix error reporting on cached run after uninstallation of third party library (Shantanu, PR [17420](https://github.com/python/mypy/pull/17420)) |
168 | 413 |
|
169 | 414 | #### Acknowledgements |
170 | 415 | Thanks to all mypy contributors who contributed to this release: |
|
0 commit comments