From 16684b110ed3195ed08fe8e621a52449e330b0eb Mon Sep 17 00:00:00 2001 From: Zanie Date: Thu, 1 Feb 2024 09:40:06 -0600 Subject: [PATCH] Add test for redirected prefix --- crates/ruff/tests/integration_test.rs | 17 +++++++++ crates/ruff_linter/src/codes.rs | 2 + crates/ruff_linter/src/linter.rs | 3 ++ crates/ruff_linter/src/rule_redirects.rs | 4 ++ .../src/rules/ruff/rules/test_rules.rs | 37 +++++++++++++++++++ 5 files changed, 63 insertions(+) diff --git a/crates/ruff/tests/integration_test.rs b/crates/ruff/tests/integration_test.rs index a2efd4a472bec6..109239da4d96a7 100644 --- a/crates/ruff/tests/integration_test.rs +++ b/crates/ruff/tests/integration_test.rs @@ -1180,6 +1180,23 @@ fn redirect_indirect() { "###); } +#[test] +fn redirect_prefix() { + // Selection using a redirected prefix should switch to all rules in the + // new prefix + let mut cmd = RuffCheck::default().args(["--select", "RUF96"]).build(); + assert_cmd_snapshot!(cmd, @r###" + success: false + exit_code: 1 + ----- stdout ----- + -:1:1: RUF950 Hey this is a test rule that was redirected from another. + Found 1 error. + + ----- stderr ----- + warning: `RUF96` has been remapped to `RUF95`. + "###); +} + #[test] fn deprecated_direct() { // Selection of a deprecated rule without preview enabled should still work diff --git a/crates/ruff_linter/src/codes.rs b/crates/ruff_linter/src/codes.rs index 55332ed7e316e5..f318e6e7a3ed09 100644 --- a/crates/ruff_linter/src/codes.rs +++ b/crates/ruff_linter/src/codes.rs @@ -963,6 +963,8 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Ruff, "940") => (RuleGroup::Removed, rules::ruff::rules::RedirectedFromTestRule), #[cfg(feature = "test-rules")] (Ruff, "950") => (RuleGroup::Stable, rules::ruff::rules::RedirectedToTestRule), + #[cfg(feature = "test-rules")] + (Ruff, "960") => (RuleGroup::Removed, rules::ruff::rules::RedirectedFromPrefixTestRule), // flake8-django diff --git a/crates/ruff_linter/src/linter.rs b/crates/ruff_linter/src/linter.rs index e737ad8bd3e60d..0196aeb9336286 100644 --- a/crates/ruff_linter/src/linter.rs +++ b/crates/ruff_linter/src/linter.rs @@ -252,6 +252,9 @@ pub fn check_path( Rule::RedirectedFromTestRule => { test_rules::RedirectedFromTestRule::diagnostic(locator, indexer) } + Rule::RedirectedFromPrefixTestRule => { + test_rules::RedirectedFromPrefixTestRule::diagnostic(locator, indexer) + } _ => unreachable!("All test rules must have an implementation"), }; if let Some(diagnostic) = diagnostic { diff --git a/crates/ruff_linter/src/rule_redirects.rs b/crates/ruff_linter/src/rule_redirects.rs index a795d6a8f8a6e9..8cd7cb401dcf98 100644 --- a/crates/ruff_linter/src/rule_redirects.rs +++ b/crates/ruff_linter/src/rule_redirects.rs @@ -101,7 +101,11 @@ static REDIRECTS: Lazy> = Lazy::new(|| { ("RUF011", "B035"), ("TCH006", "TCH010"), ("TRY200", "B904"), + // Test redirect by exact code #[cfg(feature = "test-rules")] ("RUF940", "RUF950"), + // Test redirect by prefix + #[cfg(feature = "test-rules")] + ("RUF96", "RUF95"), ]) }); diff --git a/crates/ruff_linter/src/rules/ruff/rules/test_rules.rs b/crates/ruff_linter/src/rules/ruff/rules/test_rules.rs index 54ee73a8bbac9c..d148dff835d957 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/test_rules.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/test_rules.rs @@ -45,6 +45,7 @@ pub(crate) const TEST_RULES: &[Rule] = &[ Rule::AnotherRemovedTestRule, Rule::RedirectedFromTestRule, Rule::RedirectedToTestRule, + Rule::RedirectedFromPrefixTestRule, ]; pub(crate) trait TestRule { @@ -512,3 +513,39 @@ impl TestRule for RedirectedToTestRule { )) } } + +/// ## What it does +/// Fake rule for testing. +/// +/// ## Why is this bad? +/// Tests must pass! +/// +/// ## Example +/// ```python +/// foo +/// ``` +/// +/// Use instead: +/// ```python +/// bar +/// ``` +#[violation] +pub struct RedirectedFromPrefixTestRule; + +impl Violation for RedirectedFromPrefixTestRule { + const FIX_AVAILABILITY: FixAvailability = FixAvailability::None; + + #[derive_message_formats] + fn message(&self) -> String { + format!("Hey this is a test rule that was redirected to another by prefix.") + } +} + +impl TestRule for RedirectedFromPrefixTestRule { + fn diagnostic(_locator: &Locator, _indexer: &Indexer) -> Option { + Some(Diagnostic::new( + RedirectedFromPrefixTestRule, + ruff_text_size::TextRange::default(), + )) + } +}