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.
This commit is contained in:
Zanie Blue 2023-09-13 14:54:28 -05:00 committed by GitHub
parent 5347df4728
commit 4bff397318
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 6 deletions

View file

@ -916,8 +916,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> {
(Refurb, "131") => (RuleGroup::Nursery, rules::refurb::rules::DeleteFullSlice), (Refurb, "131") => (RuleGroup::Nursery, rules::refurb::rules::DeleteFullSlice),
#[allow(deprecated)] #[allow(deprecated)]
(Refurb, "132") => (RuleGroup::Nursery, rules::refurb::rules::CheckAndRemoveFromSet), (Refurb, "132") => (RuleGroup::Nursery, rules::refurb::rules::CheckAndRemoveFromSet),
#[allow(deprecated)] (Refurb, "145") => (RuleGroup::Preview, rules::refurb::rules::SliceCopy),
(Refurb, "145") => (RuleGroup::Nursery, rules::refurb::rules::SliceCopy),
_ => return None, _ => return None,
}) })

View file

@ -212,7 +212,7 @@ impl RuleSelector {
// Always include rules that are not in preview or the nursery // Always include rules that are not in preview or the nursery
!(rule.is_preview() || rule.is_nursery()) !(rule.is_preview() || rule.is_nursery())
// Backwards compatibility allows selection of nursery rules by exact code or dedicated group // 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 // Enabling preview includes all preview or nursery rules
|| preview.is_enabled() || preview.is_enabled()
}) })

View file

@ -764,7 +764,7 @@ pub fn resolve_src(src: &[String], project_root: &Path) -> Result<Vec<PathBuf>>
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::configuration::{Configuration, RuleSelection}; use crate::configuration::{Configuration, RuleSelection};
use ruff::codes::{Flake8Copyright, Pycodestyle}; use ruff::codes::{Flake8Copyright, Pycodestyle, Refurb};
use ruff::registry::{Linter, Rule, RuleSet}; use ruff::registry::{Linter, Rule, RuleSet};
use ruff::settings::types::PreviewMode; use ruff::settings::types::PreviewMode;
use ruff::RuleSelector; use ruff::RuleSelector;
@ -811,10 +811,11 @@ mod tests {
Rule::RepeatedAppend, Rule::RepeatedAppend,
Rule::DeleteFullSlice, Rule::DeleteFullSlice,
Rule::CheckAndRemoveFromSet, Rule::CheckAndRemoveFromSet,
Rule::SliceCopy,
Rule::QuadraticListSummation, Rule::QuadraticListSummation,
]; ];
const PREVIEW_RULES: &[Rule] = &[Rule::SliceCopy];
#[allow(clippy::needless_pass_by_value)] #[allow(clippy::needless_pass_by_value)]
fn resolve_rules( fn resolve_rules(
selections: impl IntoIterator<Item = RuleSelection>, selections: impl IntoIterator<Item = RuleSelection>,
@ -1100,6 +1101,29 @@ mod tests {
assert_eq!(actual, expected); 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] #[test]
fn select_preview() { fn select_preview() {
let actual = resolve_rules( let actual = resolve_rules(
@ -1119,7 +1143,9 @@ mod tests {
}], }],
Some(PreviewMode::Enabled), 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); assert_eq!(actual, expected);
} }