From 4bff397318761572de017697e25f655ddb6815f8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 13 Sep 2023 14:54:28 -0500 Subject: [PATCH] Move `FURB145` from nursery to preview (#7364) Moves the new rule from nursery to preview for the upcoming release. Adds new test coverage for selection of a single preview rule and fixes a bug where preview rules were incorrectly selectable with exact codes. --- crates/ruff/src/codes.rs | 3 +- crates/ruff/src/rule_selector.rs | 2 +- crates/ruff_workspace/src/configuration.rs | 32 ++++++++++++++++++++-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/crates/ruff/src/codes.rs b/crates/ruff/src/codes.rs index 75a315fe79..694050cc8b 100644 --- a/crates/ruff/src/codes.rs +++ b/crates/ruff/src/codes.rs @@ -916,8 +916,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Refurb, "131") => (RuleGroup::Nursery, rules::refurb::rules::DeleteFullSlice), #[allow(deprecated)] (Refurb, "132") => (RuleGroup::Nursery, rules::refurb::rules::CheckAndRemoveFromSet), - #[allow(deprecated)] - (Refurb, "145") => (RuleGroup::Nursery, rules::refurb::rules::SliceCopy), + (Refurb, "145") => (RuleGroup::Preview, rules::refurb::rules::SliceCopy), _ => return None, }) diff --git a/crates/ruff/src/rule_selector.rs b/crates/ruff/src/rule_selector.rs index 6584fe1524..362dcb72b2 100644 --- a/crates/ruff/src/rule_selector.rs +++ b/crates/ruff/src/rule_selector.rs @@ -212,7 +212,7 @@ impl RuleSelector { // Always include rules that are not in preview or the nursery !(rule.is_preview() || rule.is_nursery()) // Backwards compatibility allows selection of nursery rules by exact code or dedicated group - || (matches!(self, RuleSelector::Rule { .. }) || matches!(self, RuleSelector::Nursery { .. }) && rule.is_nursery()) + || ((matches!(self, RuleSelector::Rule { .. }) || matches!(self, RuleSelector::Nursery { .. })) && rule.is_nursery()) // Enabling preview includes all preview or nursery rules || preview.is_enabled() }) diff --git a/crates/ruff_workspace/src/configuration.rs b/crates/ruff_workspace/src/configuration.rs index 1b8adf69ca..5fd1e8b659 100644 --- a/crates/ruff_workspace/src/configuration.rs +++ b/crates/ruff_workspace/src/configuration.rs @@ -764,7 +764,7 @@ pub fn resolve_src(src: &[String], project_root: &Path) -> Result> #[cfg(test)] mod tests { use crate::configuration::{Configuration, RuleSelection}; - use ruff::codes::{Flake8Copyright, Pycodestyle}; + use ruff::codes::{Flake8Copyright, Pycodestyle, Refurb}; use ruff::registry::{Linter, Rule, RuleSet}; use ruff::settings::types::PreviewMode; use ruff::RuleSelector; @@ -811,10 +811,11 @@ mod tests { Rule::RepeatedAppend, Rule::DeleteFullSlice, Rule::CheckAndRemoveFromSet, - Rule::SliceCopy, Rule::QuadraticListSummation, ]; + const PREVIEW_RULES: &[Rule] = &[Rule::SliceCopy]; + #[allow(clippy::needless_pass_by_value)] fn resolve_rules( selections: impl IntoIterator, @@ -1100,6 +1101,29 @@ mod tests { assert_eq!(actual, expected); } + #[test] + fn select_rule_preview() { + let actual = resolve_rules( + [RuleSelection { + select: Some(vec![Refurb::_145.into()]), + ..RuleSelection::default() + }], + Some(PreviewMode::Disabled), + ); + let expected = RuleSet::empty(); + assert_eq!(actual, expected); + + let actual = resolve_rules( + [RuleSelection { + select: Some(vec![Refurb::_145.into()]), + ..RuleSelection::default() + }], + Some(PreviewMode::Enabled), + ); + let expected = RuleSet::from_rule(Rule::SliceCopy); + assert_eq!(actual, expected); + } + #[test] fn select_preview() { let actual = resolve_rules( @@ -1119,7 +1143,9 @@ mod tests { }], Some(PreviewMode::Enabled), ); - let expected = RuleSet::from_rules(NURSERY_RULES); + + let expected = + RuleSet::from_rules(NURSERY_RULES).union(&RuleSet::from_rules(PREVIEW_RULES)); assert_eq!(actual, expected); }