diff --git a/Cargo.lock b/Cargo.lock index 96398a894a..e6868c1f6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1935,6 +1935,8 @@ dependencies = [ "rustpython-parser", "serde", "serde_json", + "strum", + "strum_macros", "toml", "update-informer", "walkdir", @@ -2252,6 +2254,28 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "syn" version = "1.0.101" diff --git a/Cargo.toml b/Cargo.toml index b6b6b6d4d2..a0568d70dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,8 @@ serde_json = { version = "1.0.83" } toml = { version = "0.5.9" } update-informer = { version = "0.5.0", default_features = false, features = ["pypi"], optional = true } walkdir = { version = "2.3.2" } +strum = { version = "0.24.1", features = ["strum_macros"] } +strum_macros = "0.24.3" [dev-dependencies] insta = { version = "1.19.1", features = ["yaml"] } diff --git a/examples/generate_rules_table.rs b/examples/generate_rules_table.rs index e9f622d88c..822e64ecaf 100644 --- a/examples/generate_rules_table.rs +++ b/examples/generate_rules_table.rs @@ -1,13 +1,12 @@ /// Generate a Markdown-compatible table of supported lint rules. -use ruff::checks::{CheckCode, ALL_CHECK_CODES, DEFAULT_CHECK_CODES}; +use strum::IntoEnumIterator; + +use ruff::checks::{CheckCode, DEFAULT_CHECK_CODES}; fn main() { - let mut check_codes: Vec = ALL_CHECK_CODES.to_vec(); - check_codes.sort(); - println!("| Code | Name | Message | | |"); println!("| ---- | ---- | ------- | --- | --- |"); - for check_code in check_codes { + for check_code in CheckCode::iter() { let check_kind = check_code.kind(); let default_token = if DEFAULT_CHECK_CODES.contains(&check_code) { "✅" diff --git a/src/checks.rs b/src/checks.rs index be7feb4e56..fd3d57971e 100644 --- a/src/checks.rs +++ b/src/checks.rs @@ -1,11 +1,12 @@ use std::str::FromStr; -use crate::ast::checks::Primitive; use anyhow::Result; use itertools::Itertools; use rustpython_parser::ast::Location; use serde::{Deserialize, Serialize}; +use strum_macros::EnumIter; +use crate::ast::checks::Primitive; use crate::ast::types::Range; pub const DEFAULT_CHECK_CODES: [CheckCode; 43] = [ @@ -57,82 +58,7 @@ pub const DEFAULT_CHECK_CODES: [CheckCode; 43] = [ CheckCode::F901, ]; -pub const ALL_CHECK_CODES: [CheckCode; 63] = [ - // pycodestyle errors - 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, - // pycodestyle warnings - CheckCode::W292, - // pyflakes - CheckCode::F401, - CheckCode::F402, - CheckCode::F403, - CheckCode::F404, - CheckCode::F405, - 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, - // flake8-builtins - CheckCode::A001, - CheckCode::A002, - CheckCode::A003, - // flake8-comprehensions - CheckCode::C400, - CheckCode::C401, - CheckCode::C402, - CheckCode::C403, - CheckCode::C404, - CheckCode::C405, - CheckCode::C406, - CheckCode::C408, - // flake8-super - CheckCode::SPR001, - // flake8-print - CheckCode::T201, - CheckCode::T203, - // pyupgrade - CheckCode::U001, - CheckCode::U002, - CheckCode::U003, - CheckCode::U004, - CheckCode::U005, - // Meta - CheckCode::M001, -]; - -#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Hash, PartialOrd, Ord)] +#[derive(EnumIter, Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Hash, PartialOrd, Ord)] pub enum CheckCode { // pycodestyle errors E402,