From c46ae3a3cf56e9330b0f37b79f5103b4b7e16654 Mon Sep 17 00:00:00 2001 From: Sergey Chudov <41333030+WindowGenerator@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:38:40 +0400 Subject: [PATCH] Added ignoring deprecated rules for --select=ALL (#10497) Co-authored-by: Micha Reiser --- crates/ruff_linter/src/rule_selector.rs | 26 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/crates/ruff_linter/src/rule_selector.rs b/crates/ruff_linter/src/rule_selector.rs index 707fb4893c..0c70a49806 100644 --- a/crates/ruff_linter/src/rule_selector.rs +++ b/crates/ruff_linter/src/rule_selector.rs @@ -5,8 +5,8 @@ use serde::{Deserialize, Serialize}; use strum::IntoEnumIterator; use strum_macros::EnumIter; -use crate::codes::RuleCodePrefix; use crate::codes::RuleIter; +use crate::codes::{RuleCodePrefix, RuleGroup}; use crate::registry::{Linter, Rule, RuleNamespace}; use crate::rule_redirects::get_redirect; use crate::settings::types::PreviewMode; @@ -205,15 +205,23 @@ impl RuleSelector { 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; + self.all_rules().filter(move |rule| { - // Always include stable rules - rule.is_stable() - // Enabling preview includes all preview rules unless explicit selection is turned on - || (rule.is_preview() && 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 - || (rule.is_removed() && self.is_exact()) + match rule.group() { + // Always include stable rules + RuleGroup::Stable => true, + // Enabling preview includes all preview rules unless explicit selection is turned on + RuleGroup::Preview => { + preview_enabled && (self.is_exact() || !preview_require_explicit) + } + // Deprecated rules are excluded in preview mode and with 'All' option unless explicitly selected + RuleGroup::Deprecated => { + (!preview_enabled || self.is_exact()) + && !matches!(self, RuleSelector::All { .. }) + } + // Removed rules are included if explicitly selected but will error downstream + RuleGroup::Removed => self.is_exact(), + } }) }