Skip to content

Commit 0e44707

Browse files
committed
Add --preview / --no-preview to ruff check
1 parent eb552da commit 0e44707

File tree

6 files changed

+28
-0
lines changed

6 files changed

+28
-0
lines changed

crates/ruff/src/settings/defaults.rs

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ impl Default for Settings {
8484
line_length: LineLength::default(),
8585
logger_objects: vec![],
8686
namespace_packages: vec![],
87+
preview_mode: false,
8788
per_file_ignores: vec![],
8889
project_root: path_dedot::CWD.clone(),
8990
respect_gitignore: true,

crates/ruff/src/settings/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ pub struct Settings {
5555
pub per_file_ignores: Vec<(GlobMatcher, GlobMatcher, RuleSet)>,
5656

5757
pub target_version: PythonVersion,
58+
pub preview_mode: bool,
5859

5960
// Resolver settings
6061
pub exclude: FilePatternSet,

crates/ruff_cli/src/args.rs

+10
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ pub struct CheckCommand {
115115
/// The minimum Python version that should be supported.
116116
#[arg(long, value_enum)]
117117
pub target_version: Option<PythonVersion>,
118+
/// Enable preview mode
119+
#[arg(long, overrides_with("no_preview"))]
120+
preview: bool,
121+
#[clap(long, overrides_with("preview"), hide = true)]
122+
no_preview: bool,
118123
/// Path to the `pyproject.toml` or `ruff.toml` file to use for
119124
/// configuration.
120125
#[arg(long, conflicts_with = "isolated")]
@@ -458,6 +463,7 @@ impl CheckCommand {
458463
ignore: self.ignore,
459464
line_length: self.line_length,
460465
per_file_ignores: self.per_file_ignores,
466+
preview_mode: resolve_bool_arg(self.preview, self.no_preview),
461467
respect_gitignore: resolve_bool_arg(
462468
self.respect_gitignore,
463469
self.no_respect_gitignore,
@@ -569,6 +575,7 @@ pub struct Overrides {
569575
pub ignore: Option<Vec<RuleSelector>>,
570576
pub line_length: Option<LineLength>,
571577
pub per_file_ignores: Option<Vec<PatternPrefixPair>>,
578+
pub preview_mode: Option<bool>,
572579
pub respect_gitignore: Option<bool>,
573580
pub select: Option<Vec<RuleSelector>>,
574581
pub show_source: Option<bool>,
@@ -632,6 +639,9 @@ impl ConfigProcessor for Overrides {
632639
if let Some(line_length) = &self.line_length {
633640
config.line_length = Some(*line_length);
634641
}
642+
if let Some(preview_mode) = &self.preview_mode {
643+
config.preview_mode = Some(*preview_mode);
644+
}
635645
if let Some(per_file_ignores) = &self.per_file_ignores {
636646
config.per_file_ignores = Some(collect_per_file_ignores(per_file_ignores.clone()));
637647
}

crates/ruff_wasm/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ impl Workspace {
128128
external: Some(Vec::default()),
129129
ignore: Some(Vec::default()),
130130
line_length: Some(LineLength::default()),
131+
preview_mode: Some(false),
131132
select: Some(defaults::PREFIXES.to_vec()),
132133
tab_size: Some(TabSize::default()),
133134
target_version: Some(PythonVersion::default()),

crates/ruff_workspace/src/configuration.rs

+4
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ pub struct Configuration {
6767
pub line_length: Option<LineLength>,
6868
pub logger_objects: Option<Vec<String>>,
6969
pub namespace_packages: Option<Vec<PathBuf>>,
70+
pub preview_mode: Option<bool>,
7071
pub required_version: Option<Version>,
7172
pub respect_gitignore: Option<bool>,
7273
pub show_fixes: Option<bool>,
@@ -174,6 +175,7 @@ impl Configuration {
174175
.collect()
175176
}),
176177
logger_objects: self.logger_objects.unwrap_or_default(),
178+
preview_mode: self.preview_mode.unwrap_or_default(),
177179
typing_modules: self.typing_modules.unwrap_or_default(),
178180
// Plugins
179181
flake8_annotations: self
@@ -387,6 +389,7 @@ impl Configuration {
387389
.namespace_packages
388390
.map(|namespace_package| resolve_src(&namespace_package, project_root))
389391
.transpose()?,
392+
preview_mode: options.preview_mode,
390393
per_file_ignores: options.per_file_ignores.map(|per_file_ignores| {
391394
per_file_ignores
392395
.into_iter()
@@ -676,6 +679,7 @@ impl Configuration {
676679
show_fixes: self.show_fixes.or(config.show_fixes),
677680
src: self.src.or(config.src),
678681
target_version: self.target_version.or(config.target_version),
682+
preview_mode: self.preview_mode.or(config.preview_mode),
679683
task_tags: self.task_tags.or(config.task_tags),
680684
typing_modules: self.typing_modules.or(config.typing_modules),
681685
// Plugins

crates/ruff_workspace/src/options.rs

+11
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,17 @@ pub struct Options {
482482
/// field (e.g., `requires-python = ">=3.8"`). If Ruff is configured via
483483
/// `ruff.toml` or `.ruff.toml`, no such inference will be performed.
484484
pub target_version: Option<PythonVersion>,
485+
#[option(
486+
default = "false",
487+
value_type = "bool",
488+
example = r#"
489+
# Enable preview mode
490+
preview-mode = true
491+
"#
492+
)]
493+
/// Whether to enable preview mode. When preview mode is enabled, Ruff will
494+
/// use unstable rules and fixes.
495+
pub preview_mode: Option<bool>,
485496
#[option(
486497
default = r#"["TODO", "FIXME", "XXX"]"#,
487498
value_type = "list[str]",

0 commit comments

Comments
 (0)