mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-02 06:42:02 +00:00
Fix bug where selection included deprecated rules during preview (#9746)
Cherry-picked from https://github.com/astral-sh/ruff/pull/9714 which is being abandoned for now because we need to invest more into our redirection infrastructure before it is feasible. Fixes a bug in the implementation where we improperly included deprecated rules in `RuleSelector.rules()` when preview is on. Includes some clean-up of error messages and the implementation. # Conflicts: # crates/ruff/tests/integration_test.rs
This commit is contained in:
parent
85a7edcc70
commit
e5008ca714
4 changed files with 36 additions and 33 deletions
|
@ -172,7 +172,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<Item = Rule> + '_ {
|
||||
match self {
|
||||
RuleSelector::All => RuleSelectorIter::All(Rule::iter()),
|
||||
|
@ -198,7 +198,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<Item = Rule> + 'a {
|
||||
let preview_enabled = preview.mode.is_enabled();
|
||||
let preview_require_explicit = preview.require_explicit;
|
||||
|
@ -207,16 +207,21 @@ impl RuleSelector {
|
|||
// Always include stable rules
|
||||
rule.is_stable()
|
||||
// Backwards compatibility allows selection of nursery rules by exact code or dedicated group
|
||||
|| ((matches!(self, RuleSelector::Rule { .. }) || matches!(self, RuleSelector::Nursery { .. })) && rule.is_nursery())
|
||||
|| ((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 && (matches!(self, RuleSelector::Rule { .. }) || !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 || matches!(self, RuleSelector::Rule { .. })))
|
||||
|| (rule.is_deprecated() && (!preview_enabled || self.is_exact()))
|
||||
// Removed rules are included if explicitly selected but will error downstream
|
||||
|| (rule.is_removed() && matches!(self, RuleSelector::Rule { .. }))
|
||||
|| (rule.is_removed() && self.is_exact())
|
||||
})
|
||||
}
|
||||
|
||||
/// Returns true if this selector is exact i.e. selects a single rule by code
|
||||
pub fn is_exact(&self) -> bool {
|
||||
matches!(self, Self::Rule { .. })
|
||||
}
|
||||
}
|
||||
|
||||
pub enum RuleSelectorIter {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue