From 4a5d711a6ebdf2adc2acfdd68518d3c739647ba6 Mon Sep 17 00:00:00 2001 From: Zanie Date: Tue, 30 Jan 2024 16:04:05 -0600 Subject: [PATCH] Fix bug where selection included deprecated rules during preview --- crates/ruff/tests/integration_test.rs | 22 ++++------------------ crates/ruff_linter/src/rule_selector.rs | 6 +++--- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/crates/ruff/tests/integration_test.rs b/crates/ruff/tests/integration_test.rs index 743c20762c..05937829d1 100644 --- a/crates/ruff/tests/integration_test.rs +++ b/crates/ruff/tests/integration_test.rs @@ -1235,16 +1235,9 @@ fn deprecated_indirect_redirect() { .pass_stdin(r###" x = eval(input("Enter a number: ")) "###), @r###" - success: false - exit_code: 1 + success: true + exit_code: 0 ----- stdout ----- - -:2:5: PGH001 No builtin `eval()` allowed - | - 2 | x = eval(input("Enter a number: ")) - | ^^^^ PGH001 - | - - Found 1 error. ----- stderr ----- "###); @@ -1325,16 +1318,9 @@ fn deprecated_indirect_redirect_preview_enabled() { .pass_stdin(r###" x = eval(input("Enter a number: ")) "###), @r###" - success: false - exit_code: 1 + success: true + exit_code: 0 ----- stdout ----- - -:2:5: PGH001 No builtin `eval()` allowed - | - 2 | x = eval(input("Enter a number: ")) - | ^^^^ PGH001 - | - - Found 1 error. ----- stderr ----- "###); diff --git a/crates/ruff_linter/src/rule_selector.rs b/crates/ruff_linter/src/rule_selector.rs index f5d49be9a4..36edde5c63 100644 --- a/crates/ruff_linter/src/rule_selector.rs +++ b/crates/ruff_linter/src/rule_selector.rs @@ -207,7 +207,7 @@ impl Visitor<'_> for SelectorVisitor { } impl RuleSelector { - /// Return all matching rules, regardless of whether they're in preview. + /// Return all matching rules, regardless of rule group filters like preview and deprecated. pub fn all_rules(&self) -> impl Iterator + '_ { match self { RuleSelector::All => RuleSelectorIter::All(Rule::iter()), @@ -233,7 +233,7 @@ impl RuleSelector { } } - /// Returns rules matching the selector, taking into account preview options enabled. + /// Returns rules matching the selector, taking into account rule groups like preview and deprecated. pub fn rules<'a>(&'a self, preview: &PreviewOptions) -> impl Iterator + 'a { let preview_enabled = preview.mode.is_enabled(); let preview_require_explicit = preview.require_explicit; @@ -245,7 +245,7 @@ impl RuleSelector { || ((self.is_exact() || matches!(self, RuleSelector::Nursery { .. })) && rule.is_nursery()) // Enabling preview includes all preview or nursery rules unless explicit selection // is turned on - || (preview_enabled && (self.is_exact() || !preview_require_explicit)) + || ((rule.is_preview() || rule.is_nursery()) && preview_enabled && (self.is_exact() || !preview_require_explicit)) // Deprecated rules are excluded in preview mode unless explicitly selected || (rule.is_deprecated() && (!preview_enabled || self.is_exact())) // Removed rules are included if explicitly selected but will error downstream