Add some additional Python 3.12 typing members to deprecated-import (#9445)

Closes https://github.com/astral-sh/ruff/issues/9443.
This commit is contained in:
Charlie Marsh 2024-01-09 12:52:01 -05:00 committed by GitHub
parent 381811b4a6
commit ad1ca72a35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 22 deletions

View file

@ -91,3 +91,12 @@ from typing_extensions import dataclass_transform
# UP035 # UP035
from backports.strenum import StrEnum from backports.strenum import StrEnum
# UP035
from typing_extensions import override
# UP035
from typing_extensions import Buffer
# UP035
from typing_extensions import get_original_bases

View file

@ -332,7 +332,12 @@ const BACKPORTS_STR_ENUM_TO_ENUM_311: &[&str] = &["StrEnum"];
// Members of `typing_extensions` that were moved to `typing`. // Members of `typing_extensions` that were moved to `typing`.
const TYPING_EXTENSIONS_TO_TYPING_312: &[&str] = &[ const TYPING_EXTENSIONS_TO_TYPING_312: &[&str] = &[
"NamedTuple", // Introduced in Python 3.12, but `typing_extensions` backports some bug fixes.
// "NamedTuple",
// Introduced in Python 3.12, but `typing_extensions` backports support for PEP 705.
// "TypedDict",
// Introduced in Python 3.8, but `typing_extensions` backports a ton of optimizations that were // Introduced in Python 3.8, but `typing_extensions` backports a ton of optimizations that were
// added in Python 3.12. // added in Python 3.12.
"Protocol", "Protocol",
@ -342,13 +347,20 @@ const TYPING_EXTENSIONS_TO_TYPING_312: &[&str] = &[
"SupportsFloat", "SupportsFloat",
"SupportsInt", "SupportsInt",
"SupportsRound", "SupportsRound",
"TypedDict", "TypeAliasType",
"Unpack", "Unpack",
// Introduced in Python 3.11, but `typing_extensions` backports the `frozen_default` argument, // Introduced in Python 3.11, but `typing_extensions` backports the `frozen_default` argument,
// which was introduced in Python 3.12. // which was introduced in Python 3.12.
"dataclass_transform", "dataclass_transform",
"override",
]; ];
// Members of `typing_extensions` that were moved to `collections.abc`.
const TYPING_EXTENSIONS_TO_COLLECTIONS_ABC_312: &[&str] = &["Buffer"];
// Members of `typing_extensions` that were moved to `types`.
const TYPING_EXTENSIONS_TO_TYPES_312: &[&str] = &["get_original_bases"];
struct ImportReplacer<'a> { struct ImportReplacer<'a> {
stmt: &'a Stmt, stmt: &'a Stmt,
module: &'a str, module: &'a str,
@ -417,6 +429,28 @@ impl<'a> ImportReplacer<'a> {
} }
} }
"typing_extensions" => { "typing_extensions" => {
// `typing_extensions` to `collections.abc`
let mut typing_extensions_to_collections_abc = vec![];
if self.version >= PythonVersion::Py312 {
typing_extensions_to_collections_abc
.extend(TYPING_EXTENSIONS_TO_COLLECTIONS_ABC_312);
}
if let Some(operation) =
self.try_replace(&typing_extensions_to_collections_abc, "collections.abc")
{
operations.push(operation);
}
// `typing_extensions` to `types`
let mut typing_extensions_to_types = vec![];
if self.version >= PythonVersion::Py312 {
typing_extensions_to_types.extend(TYPING_EXTENSIONS_TO_TYPES_312);
}
if let Some(operation) = self.try_replace(&typing_extensions_to_types, "types") {
operations.push(operation);
}
// `typing_extensions` to `typing`
let mut typing_extensions_to_typing = TYPING_EXTENSIONS_TO_TYPING.to_vec(); let mut typing_extensions_to_typing = TYPING_EXTENSIONS_TO_TYPING.to_vec();
if self.version >= PythonVersion::Py37 { if self.version >= PythonVersion::Py37 {
typing_extensions_to_typing.extend(TYPING_EXTENSIONS_TO_TYPING_37); typing_extensions_to_typing.extend(TYPING_EXTENSIONS_TO_TYPING_37);

View file

@ -995,26 +995,6 @@ UP035.py:77:1: UP035 [*] Import from `collections.abc` instead: `Callable`
79 79 | 79 79 |
80 80 | # OK 80 80 | # OK
UP035.py:87:1: UP035 [*] Import from `typing` instead: `NamedTuple`
|
86 | # OK: `typing_extensions` contains backported improvements.
87 | from typing_extensions import NamedTuple
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035
88 |
89 | # OK: `typing_extensions` supports `frozen_default` (backported from 3.12).
|
= help: Import from `typing`
Safe fix
84 84 | from typing_extensions import SupportsIndex
85 85 |
86 86 | # OK: `typing_extensions` contains backported improvements.
87 |-from typing_extensions import NamedTuple
87 |+from typing import NamedTuple
88 88 |
89 89 | # OK: `typing_extensions` supports `frozen_default` (backported from 3.12).
90 90 | from typing_extensions import dataclass_transform
UP035.py:90:1: UP035 [*] Import from `typing` instead: `dataclass_transform` UP035.py:90:1: UP035 [*] Import from `typing` instead: `dataclass_transform`
| |
89 | # OK: `typing_extensions` supports `frozen_default` (backported from 3.12). 89 | # OK: `typing_extensions` supports `frozen_default` (backported from 3.12).
@ -1040,6 +1020,8 @@ UP035.py:93:1: UP035 [*] Import from `enum` instead: `StrEnum`
92 | # UP035 92 | # UP035
93 | from backports.strenum import StrEnum 93 | from backports.strenum import StrEnum
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035
94 |
95 | # UP035
| |
= help: Import from `enum` = help: Import from `enum`
@ -1049,5 +1031,63 @@ UP035.py:93:1: UP035 [*] Import from `enum` instead: `StrEnum`
92 92 | # UP035 92 92 | # UP035
93 |-from backports.strenum import StrEnum 93 |-from backports.strenum import StrEnum
93 |+from enum import StrEnum 93 |+from enum import StrEnum
94 94 |
95 95 | # UP035
96 96 | from typing_extensions import override
UP035.py:96:1: UP035 [*] Import from `typing` instead: `override`
|
95 | # UP035
96 | from typing_extensions import override
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035
97 |
98 | # UP035
|
= help: Import from `typing`
Safe fix
93 93 | from backports.strenum import StrEnum
94 94 |
95 95 | # UP035
96 |-from typing_extensions import override
96 |+from typing import override
97 97 |
98 98 | # UP035
99 99 | from typing_extensions import Buffer
UP035.py:99:1: UP035 [*] Import from `collections.abc` instead: `Buffer`
|
98 | # UP035
99 | from typing_extensions import Buffer
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035
100 |
101 | # UP035
|
= help: Import from `collections.abc`
Safe fix
96 96 | from typing_extensions import override
97 97 |
98 98 | # UP035
99 |-from typing_extensions import Buffer
99 |+from collections.abc import Buffer
100 100 |
101 101 | # UP035
102 102 | from typing_extensions import get_original_bases
UP035.py:102:1: UP035 [*] Import from `types` instead: `get_original_bases`
|
101 | # UP035
102 | from typing_extensions import get_original_bases
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035
|
= help: Import from `types`
Safe fix
99 99 | from typing_extensions import Buffer
100 100 |
101 101 | # UP035
102 |-from typing_extensions import get_original_bases
102 |+from types import get_original_bases