mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-28 21:05:08 +00:00
Error if nursery rules are selected without preview (#9683)
Extends #9682 to error if the nursery selector is used or nursery rules are selected without preview. Part of #7992 — we will remove this in 0.3.0 instead so we can provide nice errors in 0.2.0. # Conflicts: # crates/ruff/tests/integration_test.rs # crates/ruff_workspace/src/configuration.rs
This commit is contained in:
parent
6aa643346f
commit
a0f32dfa55
3 changed files with 46 additions and 93 deletions
|
@ -887,10 +887,12 @@ impl LintConfiguration {
|
|||
for (kind, selector) in selection.selectors_by_kind() {
|
||||
#[allow(deprecated)]
|
||||
if matches!(selector, RuleSelector::Nursery) {
|
||||
if preview.mode.is_enabled() {
|
||||
return Err(anyhow!("The `NURSERY` selector is deprecated and cannot be used with preview mode enabled."));
|
||||
}
|
||||
warn_user_once!("The `NURSERY` selector has been deprecated. Use the `--preview` flag instead.");
|
||||
let suggestion = if preview.mode.is_disabled() {
|
||||
" Use the `--preview` flag instead."
|
||||
} else {
|
||||
" Unstable rules should be selected individually or by their respective groups."
|
||||
};
|
||||
return Err(anyhow!("The `NURSERY` selector was removed.{suggestion}"));
|
||||
};
|
||||
|
||||
// Only warn for the following selectors if used to enable rules
|
||||
|
@ -928,9 +930,24 @@ impl LintConfiguration {
|
|||
);
|
||||
}
|
||||
|
||||
for selection in deprecated_nursery_selectors {
|
||||
let (prefix, code) = selection.prefix_and_code();
|
||||
warn_user!("Selection of nursery rule `{prefix}{code}` without the `--preview` flag is deprecated.",);
|
||||
let deprecated_nursery_selectors = deprecated_nursery_selectors.iter().collect::<Vec<_>>();
|
||||
match deprecated_nursery_selectors.as_slice() {
|
||||
[] => (),
|
||||
[selection] => {
|
||||
let (prefix, code) = selection.prefix_and_code();
|
||||
return Err(anyhow!("Selection of unstable rule `{prefix}{code}` without the `--preview` flag is not allowed."));
|
||||
}
|
||||
[..] => {
|
||||
let mut message = "Selection of unstable rules without the `--preview` flag is not allowed. Enable preview or remove selection of:".to_string();
|
||||
for selection in deprecated_nursery_selectors {
|
||||
let (prefix, code) = selection.prefix_and_code();
|
||||
message.push_str("\n\t- ");
|
||||
message.push_str(prefix);
|
||||
message.push_str(code);
|
||||
}
|
||||
message.push('\n');
|
||||
return Err(anyhow!(message));
|
||||
}
|
||||
}
|
||||
|
||||
for selection in ignored_preview_selectors {
|
||||
|
@ -1363,52 +1380,6 @@ mod tests {
|
|||
use ruff_linter::RuleSelector;
|
||||
use std::str::FromStr;
|
||||
|
||||
const NURSERY_RULES: &[Rule] = &[
|
||||
Rule::MissingCopyrightNotice,
|
||||
Rule::IndentationWithInvalidMultiple,
|
||||
Rule::NoIndentedBlock,
|
||||
Rule::UnexpectedIndentation,
|
||||
Rule::IndentationWithInvalidMultipleComment,
|
||||
Rule::NoIndentedBlockComment,
|
||||
Rule::UnexpectedIndentationComment,
|
||||
Rule::OverIndented,
|
||||
Rule::WhitespaceAfterOpenBracket,
|
||||
Rule::WhitespaceBeforeCloseBracket,
|
||||
Rule::WhitespaceBeforePunctuation,
|
||||
Rule::WhitespaceBeforeParameters,
|
||||
Rule::MultipleSpacesBeforeOperator,
|
||||
Rule::MultipleSpacesAfterOperator,
|
||||
Rule::TabBeforeOperator,
|
||||
Rule::TabAfterOperator,
|
||||
Rule::MissingWhitespaceAroundOperator,
|
||||
Rule::MissingWhitespaceAroundArithmeticOperator,
|
||||
Rule::MissingWhitespaceAroundBitwiseOrShiftOperator,
|
||||
Rule::MissingWhitespaceAroundModuloOperator,
|
||||
Rule::MissingWhitespace,
|
||||
Rule::MultipleSpacesAfterComma,
|
||||
Rule::TabAfterComma,
|
||||
Rule::UnexpectedSpacesAroundKeywordParameterEquals,
|
||||
Rule::MissingWhitespaceAroundParameterEquals,
|
||||
Rule::TooFewSpacesBeforeInlineComment,
|
||||
Rule::NoSpaceAfterInlineComment,
|
||||
Rule::NoSpaceAfterBlockComment,
|
||||
Rule::MultipleLeadingHashesForBlockComment,
|
||||
Rule::MultipleSpacesAfterKeyword,
|
||||
Rule::MultipleSpacesBeforeKeyword,
|
||||
Rule::TabAfterKeyword,
|
||||
Rule::TabBeforeKeyword,
|
||||
Rule::MissingWhitespaceAfterKeyword,
|
||||
Rule::CompareToEmptyString,
|
||||
Rule::NoSelfUse,
|
||||
Rule::EqWithoutHash,
|
||||
Rule::BadDunderMethodName,
|
||||
Rule::RepeatedAppend,
|
||||
Rule::DeleteFullSlice,
|
||||
Rule::CheckAndRemoveFromSet,
|
||||
Rule::QuadraticListSummation,
|
||||
Rule::NurseryTestRule,
|
||||
];
|
||||
|
||||
const PREVIEW_RULES: &[Rule] = &[
|
||||
Rule::AndOrTernary,
|
||||
Rule::AssignmentInAssert,
|
||||
|
@ -1811,9 +1782,8 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn nursery_select_code() -> Result<()> {
|
||||
// Backwards compatible behavior allows selection of nursery rules with their exact code
|
||||
// when preview is disabled
|
||||
let actual = resolve_rules(
|
||||
// We do not allow selection of nursery rules when preview is disabled
|
||||
assert!(resolve_rules(
|
||||
[RuleSelection {
|
||||
select: Some(vec![Flake8Copyright::_001.into()]),
|
||||
..RuleSelection::default()
|
||||
|
@ -1822,9 +1792,8 @@ mod tests {
|
|||
mode: PreviewMode::Disabled,
|
||||
..PreviewOptions::default()
|
||||
}),
|
||||
)?;
|
||||
let expected = RuleSet::from_rule(Rule::MissingCopyrightNotice);
|
||||
assert_eq!(actual, expected);
|
||||
)
|
||||
.is_err());
|
||||
|
||||
let actual = resolve_rules(
|
||||
[RuleSelection {
|
||||
|
@ -1843,10 +1812,9 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
#[allow(deprecated)]
|
||||
fn select_nursery() -> Result<()> {
|
||||
// Backwards compatible behavior allows selection of nursery rules with the nursery selector
|
||||
// when preview is disabled
|
||||
let actual = resolve_rules(
|
||||
fn select_nursery() {
|
||||
// We no longer allow use of the NURSERY selector and should error in both cases
|
||||
assert!(resolve_rules(
|
||||
[RuleSelection {
|
||||
select: Some(vec![RuleSelector::Nursery]),
|
||||
..RuleSelection::default()
|
||||
|
@ -1855,11 +1823,8 @@ mod tests {
|
|||
mode: PreviewMode::Disabled,
|
||||
..PreviewOptions::default()
|
||||
}),
|
||||
)?;
|
||||
let expected = RuleSet::from_rules(NURSERY_RULES);
|
||||
assert_eq!(actual, expected);
|
||||
|
||||
// When preview is enabled, use of NURSERY is banned
|
||||
)
|
||||
.is_err());
|
||||
assert!(resolve_rules(
|
||||
[RuleSelection {
|
||||
select: Some(vec![RuleSelector::Nursery]),
|
||||
|
@ -1871,8 +1836,6 @@ mod tests {
|
|||
}),
|
||||
)
|
||||
.is_err());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue