mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-26 11:59:35 +00:00
Add pyupgrade's --keep-runtime-typing option (#965)
This commit is contained in:
parent
ced7868559
commit
b8e7d86696
9 changed files with 63 additions and 4 deletions
20
README.md
20
README.md
|
@ -1845,6 +1845,26 @@ has no `self` or `cls` argument.
|
||||||
staticmethod-decorators = ["staticmethod", "stcmthd"]
|
staticmethod-decorators = ["staticmethod", "stcmthd"]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `pyupgrade`
|
||||||
|
|
||||||
|
#### [`keep_runtime_typing`](#keep_runtime_typing)
|
||||||
|
|
||||||
|
Whether to avoid PEP 585 (`List[int]` -> `list[int]`) and PEP 604 (`Optional[str]` -> `str | None`)
|
||||||
|
rewrites even if a file imports `from __future__ import annotations`. Note that this setting is
|
||||||
|
only applicable when the target Python version is below 3.9 and 3.10 respectively.
|
||||||
|
|
||||||
|
**Default value**: `false`
|
||||||
|
|
||||||
|
**Type**: `bool`
|
||||||
|
|
||||||
|
**Example usage**:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[tool.ruff.pep8-naming]
|
||||||
|
# Preserve types, even if a file imports `from __future__ import annotations`.
|
||||||
|
keep-runtime-typing = true
|
||||||
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|
|
@ -35,3 +35,6 @@ strip = true
|
||||||
[tool.isort]
|
[tool.isort]
|
||||||
profile = "black"
|
profile = "black"
|
||||||
known_third_party = ["fastapi", "pydantic", "starlette"]
|
known_third_party = ["fastapi", "pydantic", "starlette"]
|
||||||
|
|
||||||
|
[tool.ruff.pyupgrade]
|
||||||
|
|
||||||
|
|
|
@ -1197,6 +1197,7 @@ where
|
||||||
&& self.settings.enabled.contains(&CheckCode::U007)
|
&& self.settings.enabled.contains(&CheckCode::U007)
|
||||||
&& (self.settings.target_version >= PythonVersion::Py310
|
&& (self.settings.target_version >= PythonVersion::Py310
|
||||||
|| (self.settings.target_version >= PythonVersion::Py37
|
|| (self.settings.target_version >= PythonVersion::Py37
|
||||||
|
&& !self.settings.pyupgrade.keep_runtime_typing
|
||||||
&& self.annotations_future_enabled
|
&& self.annotations_future_enabled
|
||||||
&& self.in_deferred_annotation))
|
&& self.in_deferred_annotation))
|
||||||
{
|
{
|
||||||
|
@ -1239,6 +1240,7 @@ where
|
||||||
&& self.settings.enabled.contains(&CheckCode::U006)
|
&& self.settings.enabled.contains(&CheckCode::U006)
|
||||||
&& (self.settings.target_version >= PythonVersion::Py39
|
&& (self.settings.target_version >= PythonVersion::Py39
|
||||||
|| (self.settings.target_version >= PythonVersion::Py37
|
|| (self.settings.target_version >= PythonVersion::Py37
|
||||||
|
&& !self.settings.pyupgrade.keep_runtime_typing
|
||||||
&& self.annotations_future_enabled
|
&& self.annotations_future_enabled
|
||||||
&& self.in_deferred_annotation))
|
&& self.in_deferred_annotation))
|
||||||
&& typing::is_pep585_builtin(
|
&& typing::is_pep585_builtin(
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
//! Settings for the `pep8-naming` plugin.
|
//! Settings for the `flake8-bugbear` plugin.
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
mod checks;
|
mod checks;
|
||||||
pub mod fixes;
|
pub mod fixes;
|
||||||
pub mod plugins;
|
pub mod plugins;
|
||||||
|
pub mod settings;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
|
22
src/pyupgrade/settings.rs
Normal file
22
src/pyupgrade/settings.rs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
//! Settings for the `pyupgrade` plugin.
|
||||||
|
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||||
|
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
|
||||||
|
pub struct Options {
|
||||||
|
pub keep_runtime_typing: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Hash, Default)]
|
||||||
|
pub struct Settings {
|
||||||
|
pub keep_runtime_typing: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Settings {
|
||||||
|
pub fn from_options(options: Options) -> Self {
|
||||||
|
Self {
|
||||||
|
keep_runtime_typing: options.keep_runtime_typing.unwrap_or_default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ use crate::settings::pyproject::load_options;
|
||||||
use crate::settings::types::{FilePattern, PerFileIgnore, PythonVersion, SerializationFormat};
|
use crate::settings::types::{FilePattern, PerFileIgnore, PythonVersion, SerializationFormat};
|
||||||
use crate::{
|
use crate::{
|
||||||
flake8_annotations, flake8_bugbear, flake8_quotes, flake8_tidy_imports, fs, isort, mccabe,
|
flake8_annotations, flake8_bugbear, flake8_quotes, flake8_tidy_imports, fs, isort, mccabe,
|
||||||
pep8_naming,
|
pep8_naming, pyupgrade,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -44,6 +44,7 @@ pub struct Configuration {
|
||||||
pub isort: isort::settings::Settings,
|
pub isort: isort::settings::Settings,
|
||||||
pub mccabe: mccabe::settings::Settings,
|
pub mccabe: mccabe::settings::Settings,
|
||||||
pub pep8_naming: pep8_naming::settings::Settings,
|
pub pep8_naming: pep8_naming::settings::Settings,
|
||||||
|
pub pyupgrade: pyupgrade::settings::Settings,
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEFAULT_EXCLUDE: Lazy<Vec<FilePattern>> = Lazy::new(|| {
|
static DEFAULT_EXCLUDE: Lazy<Vec<FilePattern>> = Lazy::new(|| {
|
||||||
|
@ -164,6 +165,10 @@ impl Configuration {
|
||||||
.pep8_naming
|
.pep8_naming
|
||||||
.map(pep8_naming::settings::Settings::from_options)
|
.map(pep8_naming::settings::Settings::from_options)
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
|
pyupgrade: options
|
||||||
|
.pyupgrade
|
||||||
|
.map(pyupgrade::settings::Settings::from_options)
|
||||||
|
.unwrap_or_default(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ use crate::settings::configuration::Configuration;
|
||||||
use crate::settings::types::{FilePattern, PerFileIgnore, PythonVersion, SerializationFormat};
|
use crate::settings::types::{FilePattern, PerFileIgnore, PythonVersion, SerializationFormat};
|
||||||
use crate::{
|
use crate::{
|
||||||
flake8_annotations, flake8_bugbear, flake8_quotes, flake8_tidy_imports, fs, isort, mccabe,
|
flake8_annotations, flake8_bugbear, flake8_quotes, flake8_tidy_imports, fs, isort, mccabe,
|
||||||
pep8_naming,
|
pep8_naming, pyupgrade,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub mod configuration;
|
pub mod configuration;
|
||||||
|
@ -48,6 +48,7 @@ pub struct Settings {
|
||||||
pub isort: isort::settings::Settings,
|
pub isort: isort::settings::Settings,
|
||||||
pub mccabe: mccabe::settings::Settings,
|
pub mccabe: mccabe::settings::Settings,
|
||||||
pub pep8_naming: pep8_naming::settings::Settings,
|
pub pep8_naming: pep8_naming::settings::Settings,
|
||||||
|
pub pyupgrade: pyupgrade::settings::Settings,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Settings {
|
impl Settings {
|
||||||
|
@ -82,6 +83,7 @@ impl Settings {
|
||||||
mccabe: config.mccabe,
|
mccabe: config.mccabe,
|
||||||
line_length: config.line_length,
|
line_length: config.line_length,
|
||||||
pep8_naming: config.pep8_naming,
|
pep8_naming: config.pep8_naming,
|
||||||
|
pyupgrade: config.pyupgrade,
|
||||||
per_file_ignores: resolve_per_file_ignores(config.per_file_ignores, project_root)?,
|
per_file_ignores: resolve_per_file_ignores(config.per_file_ignores, project_root)?,
|
||||||
src: config.src,
|
src: config.src,
|
||||||
target_version: config.target_version,
|
target_version: config.target_version,
|
||||||
|
@ -110,6 +112,7 @@ impl Settings {
|
||||||
isort: isort::settings::Settings::default(),
|
isort: isort::settings::Settings::default(),
|
||||||
mccabe: mccabe::settings::Settings::default(),
|
mccabe: mccabe::settings::Settings::default(),
|
||||||
pep8_naming: pep8_naming::settings::Settings::default(),
|
pep8_naming: pep8_naming::settings::Settings::default(),
|
||||||
|
pyupgrade: pyupgrade::settings::Settings::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,6 +137,7 @@ impl Settings {
|
||||||
isort: isort::settings::Settings::default(),
|
isort: isort::settings::Settings::default(),
|
||||||
mccabe: mccabe::settings::Settings::default(),
|
mccabe: mccabe::settings::Settings::default(),
|
||||||
pep8_naming: pep8_naming::settings::Settings::default(),
|
pep8_naming: pep8_naming::settings::Settings::default(),
|
||||||
|
pyupgrade: pyupgrade::settings::Settings::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,6 +169,7 @@ impl Hash for Settings {
|
||||||
self.isort.hash(state);
|
self.isort.hash(state);
|
||||||
self.mccabe.hash(state);
|
self.mccabe.hash(state);
|
||||||
self.pep8_naming.hash(state);
|
self.pep8_naming.hash(state);
|
||||||
|
self.pyupgrade.hash(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ use crate::checks_gen::CheckCodePrefix;
|
||||||
use crate::settings::types::{PythonVersion, SerializationFormat};
|
use crate::settings::types::{PythonVersion, SerializationFormat};
|
||||||
use crate::{
|
use crate::{
|
||||||
flake8_annotations, flake8_bugbear, flake8_quotes, flake8_tidy_imports, isort, mccabe,
|
flake8_annotations, flake8_bugbear, flake8_quotes, flake8_tidy_imports, isort, mccabe,
|
||||||
pep8_naming,
|
pep8_naming, pyupgrade,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default)]
|
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||||
|
@ -37,6 +37,7 @@ pub struct Options {
|
||||||
pub isort: Option<isort::settings::Options>,
|
pub isort: Option<isort::settings::Options>,
|
||||||
pub mccabe: Option<mccabe::settings::Options>,
|
pub mccabe: Option<mccabe::settings::Options>,
|
||||||
pub pep8_naming: Option<pep8_naming::settings::Options>,
|
pub pep8_naming: Option<pep8_naming::settings::Options>,
|
||||||
|
pub pyupgrade: Option<pyupgrade::settings::Options>,
|
||||||
// Tables are required to go last.
|
// Tables are required to go last.
|
||||||
pub per_file_ignores: Option<FxHashMap<String, Vec<CheckCodePrefix>>>,
|
pub per_file_ignores: Option<FxHashMap<String, Vec<CheckCodePrefix>>>,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue