mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-28 12:55:05 +00:00
Add lint.preview
(#8002)
This commit is contained in:
parent
fe485d791c
commit
94b4bb0f57
4 changed files with 35 additions and 10 deletions
|
@ -395,9 +395,9 @@ pub struct FormatCommand {
|
||||||
#[arg(long, help_heading = "Miscellaneous")]
|
#[arg(long, help_heading = "Miscellaneous")]
|
||||||
pub stdin_filename: Option<PathBuf>,
|
pub stdin_filename: Option<PathBuf>,
|
||||||
|
|
||||||
/// Enable preview mode; checks will include unstable rules and fixes.
|
/// Enable preview mode; enables unstable formatting.
|
||||||
/// Use `--no-preview` to disable.
|
/// Use `--no-preview` to disable.
|
||||||
#[arg(long, overrides_with("no_preview"), hide = true)]
|
#[arg(long, overrides_with("no_preview"))]
|
||||||
preview: bool,
|
preview: bool,
|
||||||
#[clap(long, overrides_with("preview"), hide = true)]
|
#[clap(long, overrides_with("preview"), hide = true)]
|
||||||
no_preview: bool,
|
no_preview: bool,
|
||||||
|
@ -668,6 +668,8 @@ impl ConfigurationTransformer for CliOverrides {
|
||||||
}
|
}
|
||||||
if let Some(preview) = &self.preview {
|
if let Some(preview) = &self.preview {
|
||||||
config.preview = Some(*preview);
|
config.preview = Some(*preview);
|
||||||
|
config.lint.preview = Some(*preview);
|
||||||
|
config.format.preview = Some(*preview);
|
||||||
}
|
}
|
||||||
if let Some(per_file_ignores) = &self.per_file_ignores {
|
if let Some(per_file_ignores) = &self.per_file_ignores {
|
||||||
config.lint.per_file_ignores = Some(collect_per_file_ignores(per_file_ignores.clone()));
|
config.lint.per_file_ignores = Some(collect_per_file_ignores(per_file_ignores.clone()));
|
||||||
|
|
|
@ -151,14 +151,14 @@ impl Configuration {
|
||||||
}
|
}
|
||||||
|
|
||||||
let target_version = self.target_version.unwrap_or_default();
|
let target_version = self.target_version.unwrap_or_default();
|
||||||
let preview = self.preview.unwrap_or_default();
|
let global_preview = self.preview.unwrap_or_default();
|
||||||
|
|
||||||
let format = self.format;
|
let format = self.format;
|
||||||
let format_defaults = FormatterSettings::default();
|
let format_defaults = FormatterSettings::default();
|
||||||
// TODO(micha): Support changing the tab-width but disallow changing the number of spaces
|
// TODO(micha): Support changing the tab-width but disallow changing the number of spaces
|
||||||
let formatter = FormatterSettings {
|
let formatter = FormatterSettings {
|
||||||
exclude: FilePatternSet::try_from_iter(format.exclude.unwrap_or_default())?,
|
exclude: FilePatternSet::try_from_iter(format.exclude.unwrap_or_default())?,
|
||||||
preview: match format.preview.unwrap_or(preview) {
|
preview: match format.preview.unwrap_or(global_preview) {
|
||||||
PreviewMode::Disabled => ruff_python_formatter::PreviewMode::Disabled,
|
PreviewMode::Disabled => ruff_python_formatter::PreviewMode::Disabled,
|
||||||
PreviewMode::Enabled => ruff_python_formatter::PreviewMode::Enabled,
|
PreviewMode::Enabled => ruff_python_formatter::PreviewMode::Enabled,
|
||||||
},
|
},
|
||||||
|
@ -176,6 +176,7 @@ impl Configuration {
|
||||||
};
|
};
|
||||||
|
|
||||||
let lint = self.lint;
|
let lint = self.lint;
|
||||||
|
let lint_preview = lint.preview.unwrap_or(global_preview);
|
||||||
|
|
||||||
Ok(Settings {
|
Ok(Settings {
|
||||||
cache_dir: self
|
cache_dir: self
|
||||||
|
@ -204,8 +205,9 @@ impl Configuration {
|
||||||
},
|
},
|
||||||
|
|
||||||
linter: LinterSettings {
|
linter: LinterSettings {
|
||||||
rules: lint.as_rule_table(preview),
|
rules: lint.as_rule_table(lint_preview),
|
||||||
exclude: FilePatternSet::try_from_iter(lint.exclude.unwrap_or_default())?,
|
exclude: FilePatternSet::try_from_iter(lint.exclude.unwrap_or_default())?,
|
||||||
|
preview: lint_preview,
|
||||||
target_version,
|
target_version,
|
||||||
project_root: project_root.to_path_buf(),
|
project_root: project_root.to_path_buf(),
|
||||||
allowed_confusables: lint
|
allowed_confusables: lint
|
||||||
|
@ -234,7 +236,7 @@ impl Configuration {
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|selector| {
|
.flat_map(|selector| {
|
||||||
selector.rules(&PreviewOptions {
|
selector.rules(&PreviewOptions {
|
||||||
mode: preview,
|
mode: lint_preview,
|
||||||
require_explicit: false,
|
require_explicit: false,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -244,7 +246,7 @@ impl Configuration {
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|selector| {
|
.flat_map(|selector| {
|
||||||
selector.rules(&PreviewOptions {
|
selector.rules(&PreviewOptions {
|
||||||
mode: preview,
|
mode: lint_preview,
|
||||||
require_explicit: false,
|
require_explicit: false,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -257,7 +259,6 @@ impl Configuration {
|
||||||
.task_tags
|
.task_tags
|
||||||
.unwrap_or_else(|| TASK_TAGS.iter().map(ToString::to_string).collect()),
|
.unwrap_or_else(|| TASK_TAGS.iter().map(ToString::to_string).collect()),
|
||||||
logger_objects: lint.logger_objects.unwrap_or_default(),
|
logger_objects: lint.logger_objects.unwrap_or_default(),
|
||||||
preview,
|
|
||||||
typing_modules: lint.typing_modules.unwrap_or_default(),
|
typing_modules: lint.typing_modules.unwrap_or_default(),
|
||||||
// Plugins
|
// Plugins
|
||||||
flake8_annotations: lint
|
flake8_annotations: lint
|
||||||
|
@ -511,6 +512,7 @@ impl Configuration {
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct LintConfiguration {
|
pub struct LintConfiguration {
|
||||||
pub exclude: Option<Vec<FilePattern>>,
|
pub exclude: Option<Vec<FilePattern>>,
|
||||||
|
pub preview: Option<PreviewMode>,
|
||||||
|
|
||||||
// Rule selection
|
// Rule selection
|
||||||
pub extend_per_file_ignores: Vec<PerFileIgnore>,
|
pub extend_per_file_ignores: Vec<PerFileIgnore>,
|
||||||
|
@ -570,6 +572,7 @@ impl LintConfiguration {
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}),
|
}),
|
||||||
|
preview: options.preview.map(PreviewMode::from),
|
||||||
|
|
||||||
rule_selections: vec![RuleSelection {
|
rule_selections: vec![RuleSelection {
|
||||||
select: options.common.select,
|
select: options.common.select,
|
||||||
|
@ -887,6 +890,7 @@ impl LintConfiguration {
|
||||||
pub fn combine(self, config: Self) -> Self {
|
pub fn combine(self, config: Self) -> Self {
|
||||||
Self {
|
Self {
|
||||||
exclude: self.exclude.or(config.exclude),
|
exclude: self.exclude.or(config.exclude),
|
||||||
|
preview: self.preview.or(config.preview),
|
||||||
rule_selections: config
|
rule_selections: config
|
||||||
.rule_selections
|
.rule_selections
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|
|
@ -141,7 +141,7 @@ pub struct Options {
|
||||||
pub required_version: Option<Version>,
|
pub required_version: Option<Version>,
|
||||||
|
|
||||||
/// Whether to enable preview mode. When preview mode is enabled, Ruff will
|
/// Whether to enable preview mode. When preview mode is enabled, Ruff will
|
||||||
/// use unstable rules and fixes.
|
/// use unstable rules, fixes, and formatting.
|
||||||
#[option(
|
#[option(
|
||||||
default = "false",
|
default = "false",
|
||||||
value_type = "bool",
|
value_type = "bool",
|
||||||
|
@ -412,6 +412,18 @@ pub struct LintOptions {
|
||||||
"#
|
"#
|
||||||
)]
|
)]
|
||||||
pub exclude: Option<Vec<String>>,
|
pub exclude: Option<Vec<String>>,
|
||||||
|
|
||||||
|
/// Whether to enable preview mode. When preview mode is enabled, Ruff will
|
||||||
|
/// use unstable rules and fixes.
|
||||||
|
#[option(
|
||||||
|
default = "false",
|
||||||
|
value_type = "bool",
|
||||||
|
example = r#"
|
||||||
|
# Enable preview features.
|
||||||
|
preview = true
|
||||||
|
"#
|
||||||
|
)]
|
||||||
|
pub preview: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: This struct should be inlined into [`LintOptions`] once support for the top-level lint settings
|
// Note: This struct should be inlined into [`LintOptions`] once support for the top-level lint settings
|
||||||
|
|
9
ruff.schema.json
generated
9
ruff.schema.json
generated
|
@ -491,7 +491,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preview": {
|
"preview": {
|
||||||
"description": "Whether to enable preview mode. When preview mode is enabled, Ruff will use unstable rules and fixes.",
|
"description": "Whether to enable preview mode. When preview mode is enabled, Ruff will use unstable rules, fixes, and formatting.",
|
||||||
"type": [
|
"type": [
|
||||||
"boolean",
|
"boolean",
|
||||||
"null"
|
"null"
|
||||||
|
@ -1941,6 +1941,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"preview": {
|
||||||
|
"description": "Whether to enable preview mode. When preview mode is enabled, Ruff will use unstable rules and fixes.",
|
||||||
|
"type": [
|
||||||
|
"boolean",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
"pycodestyle": {
|
"pycodestyle": {
|
||||||
"description": "Options for the `pycodestyle` plugin.",
|
"description": "Options for the `pycodestyle` plugin.",
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue