Skip to content

Commit be2c49b

Browse files
committed
Merge remote-tracking branch 'upstream/master' into bugfix/st-paramspec-missing-args
2 parents 63995e3 + fe15ee6 commit be2c49b

File tree

359 files changed

+10669
-3511
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

359 files changed

+10669
-3511
lines changed

.github/workflows/docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
with:
3939
python-version: '3.8'
4040
- name: Install tox
41-
run: pip install --upgrade 'setuptools!=50' tox==4.11.0
41+
run: pip install tox==4.11.0
4242
- name: Setup tox environment
4343
run: tox run -e ${{ env.TOXENV }} --notest
4444
- name: Test

.github/workflows/mypy_primer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
fetch-depth: 0
4040
- uses: actions/setup-python@v5
4141
with:
42-
python-version: "3.10"
42+
python-version: "3.12"
4343
- name: Install dependencies
4444
run: |
4545
python -m pip install -U pip

.github/workflows/test.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,24 @@ jobs:
147147
- name: Test
148148
run: tox run -e ${{ matrix.toxenv }} --skip-pkg-install -- ${{ matrix.tox_extra_args }}
149149

150+
python-nightly:
151+
runs-on: ubuntu-latest
152+
name: Test suite with Python nightly
153+
steps:
154+
- uses: actions/checkout@v3
155+
- uses: actions/setup-python@v4
156+
with:
157+
python-version: '3.13-dev'
158+
- name: Install tox
159+
run: pip install setuptools==68.2.2 tox==4.11.0
160+
- name: Setup tox environment
161+
run: tox run -e py --notest
162+
- name: Test
163+
run: tox run -e py --skip-pkg-install -- "-n 4"
164+
continue-on-error: true
165+
- name: Mark as a success
166+
run: exit 0
167+
150168
python_32bits:
151169
runs-on: ubuntu-latest
152170
name: Test mypyc suite with 32-bit Python

CHANGELOG.md

Lines changed: 246 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,248 @@
33
## Next release
44

55

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+
6248

7249
## Mypy 1.10
8250

@@ -163,8 +405,11 @@ This feature was contributed by Shantanu (PR [16756](https://github.com/python/m
163405

164406
#### Typeshed Updates
165407

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
167411

412+
- Fix error reporting on cached run after uninstallation of third party library (Shantanu, PR [17420](https://github.com/python/mypy/pull/17420))
168413

169414
#### Acknowledgements
170415
Thanks to all mypy contributors who contributed to this release:

docs/source/command_line.rst

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,7 @@ format into the specified directory.
10081008
Enabling incomplete/experimental features
10091009
*****************************************
10101010

1011-
.. option:: --enable-incomplete-feature {PreciseTupleTypes}
1011+
.. option:: --enable-incomplete-feature {PreciseTupleTypes, NewGenericSyntax, InlineTypedDict}
10121012

10131013
Some features may require several mypy releases to implement, for example
10141014
due to their complexity, potential for backwards incompatibility, or
@@ -1055,6 +1055,27 @@ List of currently incomplete/experimental features:
10551055
# Without PreciseTupleTypes: tuple[int, ...]
10561056
# With PreciseTupleTypes: tuple[()] | tuple[int] | tuple[int, int]
10571057
1058+
* ``NewGenericSyntax``: this feature enables support for syntax defined
1059+
by :pep:`695`. For example:
1060+
1061+
.. code-block:: python
1062+
1063+
class Container[T]: # defines a generic class
1064+
content: T
1065+
1066+
def first[T](items: list[T]) -> T: # defines a generic function
1067+
return items[0]
1068+
1069+
type Items[T] = list[tuple[T, T]] # defines a generic type alias
1070+
1071+
* ``InlineTypedDict``: this feature enables non-standard syntax for inline
1072+
:ref:`TypedDicts <typeddict>`, for example:
1073+
1074+
.. code-block:: python
1075+
1076+
def test_values() -> {"int": int, "str": str}:
1077+
return {"int": 42, "str": "test"}
1078+
10581079
10591080
Miscellaneous
10601081
*************

docs/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
# show_authors = False
9393

9494
# The name of the Pygments (syntax highlighting) style to use.
95-
pygments_style = "sphinx"
95+
# pygments_style = "sphinx"
9696

9797
# A list of ignored prefixes for module index sorting.
9898
# modindex_common_prefix = []

docs/source/error_code_list.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ comment:
11841184

11851185
.. code-block:: python
11861186
1187-
class MyClass
1187+
class MyClass:
11881188
@special # type: ignore[prop-decorator]
11891189
@property
11901190
def magic(self) -> str:

0 commit comments

Comments
 (0)