python / mypy

Optional static typing for Python
https://www.mypy-lang.org/
Other
18.53k stars 2.83k forks source link

Allow nesting of Annotated with TypedDict special forms inside TypedDicts #18165

Closed brianschubert closed 3 days ago

brianschubert commented 3 days ago

This is allowed per the typing spec.

Updates the TypeAnalyzer to remember whether TypedDict special forms are allowed when visiting Annotated types.

brianschubert commented 3 days ago

With this, mypy passes the typeddicts_readonly and typeddicts_required conformance tests:

diff --git a/conformance/results/mypy/typeddicts_readonly.toml b/conformance/results/mypy/typeddicts_readonly.toml
index 6dc58bb..ccc3d4b 100644
--- a/conformance/results/mypy/typeddicts_readonly.toml
+++ b/conformance/results/mypy/typeddicts_readonly.toml
@@ -7,11 +7,9 @@ typeddicts_readonly.py:24: error: ReadOnly TypedDict key "members" TypedDict is
 typeddicts_readonly.py:36: error: ReadOnly TypedDict key "members" TypedDict is mutated  [typeddict-readonly-mutated]
 typeddicts_readonly.py:50: error: ReadOnly TypedDict key "title" TypedDict is mutated  [typeddict-readonly-mutated]
 typeddicts_readonly.py:51: error: ReadOnly TypedDict key "year" TypedDict is mutated  [typeddict-readonly-mutated]
-typeddicts_readonly.py:56: error: NotRequired[] can be only used in a TypedDict definition  [valid-type]
 typeddicts_readonly.py:60: error: ReadOnly TypedDict key "title" TypedDict is mutated  [typeddict-readonly-mutated]
+typeddicts_readonly.py:61: error: ReadOnly TypedDict key "year" TypedDict is mutated  [typeddict-readonly-mutated]
 """
-conformance_automated = "Fail"
+conformance_automated = "Pass"
 errors_diff = """
-Line 61: Expected 1 errors
-Line 56: Unexpected errors ['typeddicts_readonly.py:56: error: NotRequired[] can be only used in a TypedDict definition  [valid-type]']
 """
diff --git a/conformance/results/mypy/typeddicts_required.toml b/conformance/results/mypy/typeddicts_required.toml
index 7cf6994..acc0431 100644
--- a/conformance/results/mypy/typeddicts_required.toml
+++ b/conformance/results/mypy/typeddicts_required.toml
@@ -7,11 +7,7 @@ typeddicts_required.py:12: error: Required[] can be only used in a TypedDict def
 typeddicts_required.py:19: error: NotRequired[] can be only used in a TypedDict definition  [valid-type]
 typeddicts_required.py:62: error: "Required[]" type cannot be nested  [valid-type]
 typeddicts_required.py:63: error: "NotRequired[]" type cannot be nested  [valid-type]
-typeddicts_required.py:68: error: Required[] can be only used in a TypedDict definition  [valid-type]
-typeddicts_required.py:70: error: Required[] can be only used in a TypedDict definition  [valid-type]
 """
-conformance_automated = "Fail"
+conformance_automated = "Pass"
 errors_diff = """
-Line 68: Unexpected errors ['typeddicts_required.py:68: error: Required[] can be only used in a TypedDict definition  [valid-type]']
-Line 70: Unexpected errors ['typeddicts_required.py:70: error: Required[] can be only used in a TypedDict definition  [valid-type]']
 """
diff --git a/conformance/results/mypy/version.toml b/conformance/results/mypy/version.toml
index bdefc8c..842fec5 100644
--- a/conformance/results/mypy/version.toml
+++ b/conformance/results/mypy/version.toml
@@ -1,2 +1,2 @@
-version = "mypy 1.13.0"
-test_duration = 2.7
+version = "mypy 1.14.0+dev.ec6dc1bc20da15dc0d8dd916d487dd3cbb7f6b69"
+test_duration = 7.0
github-actions[bot] commented 3 days ago

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

github-actions[bot] commented 3 days ago

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅