diff --git a/examples/generate_rules_table.rs b/examples/generate_rules_table.rs index 374c6c509e..54d5394114 100644 --- a/examples/generate_rules_table.rs +++ b/examples/generate_rules_table.rs @@ -1,56 +1,14 @@ /// Generate a Markdown-compatible table of supported lint rules. -use ruff::checks::{CheckKind, RejectedCmpop}; +use ruff::checks::{CheckCode, ALL_CHECK_CODES}; fn main() { - let mut check_kinds: Vec = vec![ - CheckKind::AmbiguousClassName("...".to_string()), - CheckKind::AmbiguousFunctionName("...".to_string()), - CheckKind::AmbiguousVariableName("...".to_string()), - CheckKind::AssertTuple, - CheckKind::BreakOutsideLoop, - CheckKind::ContinueOutsideLoop, - CheckKind::DefaultExceptNotLast, - CheckKind::DoNotAssignLambda, - CheckKind::DoNotUseBareExcept, - CheckKind::DuplicateArgumentName, - CheckKind::FStringMissingPlaceholders, - CheckKind::ForwardAnnotationSyntaxError("...".to_string()), - CheckKind::FutureFeatureNotDefined("...".to_string()), - CheckKind::IOError("...".to_string()), - CheckKind::IfTuple, - CheckKind::ImportStarNotPermitted("...".to_string()), - CheckKind::ImportStarUsage("...".to_string()), - CheckKind::InvalidPrintSyntax, - CheckKind::IsLiteral, - CheckKind::LateFutureImport, - CheckKind::LineTooLong(89, 88), - CheckKind::ModuleImportNotAtTopOfFile, - CheckKind::MultiValueRepeatedKeyLiteral, - CheckKind::MultiValueRepeatedKeyVariable("...".to_string()), - CheckKind::NoAssertEquals, - CheckKind::NoneComparison(RejectedCmpop::Eq), - CheckKind::NotInTest, - CheckKind::NotIsTest, - CheckKind::RaiseNotImplemented, - CheckKind::ReturnOutsideFunction, - CheckKind::SyntaxError("...".to_string()), - CheckKind::TooManyExpressionsInStarredAssignment, - CheckKind::TrueFalseComparison(true, RejectedCmpop::Eq), - CheckKind::TwoStarredExpressions, - CheckKind::TypeComparison, - CheckKind::UndefinedExport("...".to_string()), - CheckKind::UndefinedLocal("...".to_string()), - CheckKind::UndefinedName("...".to_string()), - CheckKind::UnusedImport("...".to_string()), - CheckKind::UnusedVariable("...".to_string()), - CheckKind::UselessObjectInheritance("...".to_string()), - CheckKind::YieldOutsideFunction, - ]; - check_kinds.sort_by_key(|check_kind| check_kind.code()); + let mut check_codes: Vec = ALL_CHECK_CODES.to_vec(); + check_codes.sort(); println!("| Code | Name | Message |"); println!("| ---- | ----- | ------- |"); - for check_kind in check_kinds { + for check_code in check_codes { + let check_kind = check_code.kind(); println!( "| {} | {} | {} |", check_kind.code().as_str(), diff --git a/resources/test/fixtures/pyproject.toml b/resources/test/fixtures/pyproject.toml index 9ccbf2bfb1..bce3f3116a 100644 --- a/resources/test/fixtures/pyproject.toml +++ b/resources/test/fixtures/pyproject.toml @@ -5,47 +5,3 @@ extend-exclude = [ "migrations", "./resources/test/fixtures/directory/also_excluded.py", ] -select = [ - "E402", - "E501", - "E711", - "E712", - "E713", - "E714", - "E721", - "E722", - "E731", - "E741", - "E742", - "E743", - "E902", - "E999", - "F401", - "F403", - "F404", - "F406", - "F407", - "F541", - "F601", - "F602", - "F621", - "F622", - "F631", - "F632", - "F633", - "F634", - "F701", - "F702", - "F704", - "F706", - "F707", - "F722", - "F821", - "F822", - "F823", - "F831", - "F841", - "F901", - "R001", - "R002", -] diff --git a/src/checks.rs b/src/checks.rs index 92271dccf5..731bb4a602 100644 --- a/src/checks.rs +++ b/src/checks.rs @@ -6,7 +6,52 @@ use regex::Regex; use rustpython_parser::ast::Location; use serde::{Deserialize, Serialize}; -#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Hash, PartialOrd, Ord)] +pub const ALL_CHECK_CODES: [CheckCode; 42] = [ + CheckCode::E402, + CheckCode::E501, + CheckCode::E711, + CheckCode::E712, + CheckCode::E713, + CheckCode::E714, + CheckCode::E721, + CheckCode::E722, + CheckCode::E731, + CheckCode::E741, + CheckCode::E742, + CheckCode::E743, + CheckCode::E902, + CheckCode::E999, + CheckCode::F401, + CheckCode::F403, + CheckCode::F404, + CheckCode::F406, + CheckCode::F407, + CheckCode::F541, + CheckCode::F601, + CheckCode::F602, + CheckCode::F621, + CheckCode::F622, + CheckCode::F631, + CheckCode::F632, + CheckCode::F633, + CheckCode::F634, + CheckCode::F701, + CheckCode::F702, + CheckCode::F704, + CheckCode::F706, + CheckCode::F707, + CheckCode::F722, + CheckCode::F821, + CheckCode::F822, + CheckCode::F823, + CheckCode::F831, + CheckCode::F841, + CheckCode::F901, + CheckCode::R001, + CheckCode::R002, +]; + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Hash, PartialOrd, Ord)] pub enum CheckCode { E402, E501, @@ -160,6 +205,54 @@ impl CheckCode { _ => &LintSource::AST, } } + + /// A placeholder representation of the CheckKind for the check. + pub fn kind(&self) -> CheckKind { + match self { + CheckCode::E742 => CheckKind::AmbiguousClassName("...".to_string()), + CheckCode::E743 => CheckKind::AmbiguousFunctionName("...".to_string()), + CheckCode::E741 => CheckKind::AmbiguousVariableName("...".to_string()), + CheckCode::F631 => CheckKind::AssertTuple, + CheckCode::F701 => CheckKind::BreakOutsideLoop, + CheckCode::F702 => CheckKind::ContinueOutsideLoop, + CheckCode::F707 => CheckKind::DefaultExceptNotLast, + CheckCode::E731 => CheckKind::DoNotAssignLambda, + CheckCode::E722 => CheckKind::DoNotUseBareExcept, + CheckCode::F831 => CheckKind::DuplicateArgumentName, + CheckCode::F541 => CheckKind::FStringMissingPlaceholders, + CheckCode::F722 => CheckKind::ForwardAnnotationSyntaxError("...".to_string()), + CheckCode::F407 => CheckKind::FutureFeatureNotDefined("...".to_string()), + CheckCode::E902 => CheckKind::IOError("...".to_string()), + CheckCode::F634 => CheckKind::IfTuple, + CheckCode::F406 => CheckKind::ImportStarNotPermitted("...".to_string()), + CheckCode::F403 => CheckKind::ImportStarUsage("...".to_string()), + CheckCode::F633 => CheckKind::InvalidPrintSyntax, + CheckCode::F632 => CheckKind::IsLiteral, + CheckCode::F404 => CheckKind::LateFutureImport, + CheckCode::E501 => CheckKind::LineTooLong(89, 88), + CheckCode::E402 => CheckKind::ModuleImportNotAtTopOfFile, + CheckCode::F601 => CheckKind::MultiValueRepeatedKeyLiteral, + CheckCode::F602 => CheckKind::MultiValueRepeatedKeyVariable("...".to_string()), + CheckCode::R002 => CheckKind::NoAssertEquals, + CheckCode::E711 => CheckKind::NoneComparison(RejectedCmpop::Eq), + CheckCode::E713 => CheckKind::NotInTest, + CheckCode::E714 => CheckKind::NotIsTest, + CheckCode::F901 => CheckKind::RaiseNotImplemented, + CheckCode::F706 => CheckKind::ReturnOutsideFunction, + CheckCode::E999 => CheckKind::SyntaxError("...".to_string()), + CheckCode::F621 => CheckKind::TooManyExpressionsInStarredAssignment, + CheckCode::E712 => CheckKind::TrueFalseComparison(true, RejectedCmpop::Eq), + CheckCode::F622 => CheckKind::TwoStarredExpressions, + CheckCode::E721 => CheckKind::TypeComparison, + CheckCode::F822 => CheckKind::UndefinedExport("...".to_string()), + CheckCode::F823 => CheckKind::UndefinedLocal("...".to_string()), + CheckCode::F821 => CheckKind::UndefinedName("...".to_string()), + CheckCode::F401 => CheckKind::UnusedImport("...".to_string()), + CheckCode::F841 => CheckKind::UnusedVariable("...".to_string()), + CheckCode::R001 => CheckKind::UselessObjectInheritance("...".to_string()), + CheckCode::F704 => CheckKind::YieldOutsideFunction, + } + } } #[allow(clippy::upper_case_acronyms)] diff --git a/src/pyproject.rs b/src/pyproject.rs index 167f48d46c..62468579e7 100644 --- a/src/pyproject.rs +++ b/src/pyproject.rs @@ -275,50 +275,7 @@ other-attribute = 1 Path::new("migrations").to_path_buf(), Path::new("./resources/test/fixtures/directory/also_excluded.py").to_path_buf() ]), - select: Some(vec![ - CheckCode::E402, - CheckCode::E501, - CheckCode::E711, - CheckCode::E712, - CheckCode::E713, - CheckCode::E714, - CheckCode::E721, - CheckCode::E722, - CheckCode::E731, - CheckCode::E741, - CheckCode::E742, - CheckCode::E743, - CheckCode::E902, - CheckCode::E999, - CheckCode::F401, - CheckCode::F403, - CheckCode::F404, - CheckCode::F406, - CheckCode::F407, - CheckCode::F541, - CheckCode::F601, - CheckCode::F602, - CheckCode::F621, - CheckCode::F622, - CheckCode::F631, - CheckCode::F632, - CheckCode::F633, - CheckCode::F634, - CheckCode::F701, - CheckCode::F702, - CheckCode::F704, - CheckCode::F706, - CheckCode::F707, - CheckCode::F722, - CheckCode::F821, - CheckCode::F822, - CheckCode::F823, - CheckCode::F831, - CheckCode::F841, - CheckCode::F901, - CheckCode::R001, - CheckCode::R002, - ]), + select: None, ignore: None, } ); diff --git a/src/settings.rs b/src/settings.rs index ee7410c63e..9aae44f254 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use glob::Pattern; use once_cell::sync::Lazy; -use crate::checks::CheckCode; +use crate::checks::{CheckCode, ALL_CHECK_CODES}; use crate::pyproject::load_config; #[derive(Debug)] @@ -76,53 +76,11 @@ impl Settings { .collect() }) .unwrap_or_default(), - select: BTreeSet::from_iter(config.select.unwrap_or_else(|| { - vec![ - CheckCode::E402, - CheckCode::E501, - CheckCode::E711, - CheckCode::E712, - CheckCode::E713, - CheckCode::E714, - CheckCode::E721, - CheckCode::E722, - CheckCode::E731, - CheckCode::E741, - CheckCode::E742, - CheckCode::E743, - CheckCode::E902, - CheckCode::E999, - CheckCode::F401, - CheckCode::F403, - CheckCode::F404, - CheckCode::F406, - CheckCode::F407, - CheckCode::F541, - CheckCode::F601, - CheckCode::F602, - CheckCode::F621, - CheckCode::F622, - CheckCode::F631, - CheckCode::F632, - CheckCode::F633, - CheckCode::F634, - CheckCode::F701, - CheckCode::F702, - CheckCode::F704, - CheckCode::F706, - CheckCode::F707, - CheckCode::F722, - CheckCode::F821, - CheckCode::F822, - CheckCode::F823, - CheckCode::F831, - CheckCode::F841, - CheckCode::F901, - // Disable refactoring codes by default. - // CheckCode::R001, - // CheckCode::R002, - ] - })), + select: if let Some(select) = config.select { + BTreeSet::from_iter(select) + } else { + BTreeSet::from_iter(ALL_CHECK_CODES) + }, }; if let Some(ignore) = &config.ignore { settings.ignore(ignore);