diff --git a/ruff_macros/src/lib.rs b/ruff_macros/src/lib.rs index efce9baa6a..71b54c5144 100644 --- a/ruff_macros/src/lib.rs +++ b/ruff_macros/src/lib.rs @@ -12,9 +12,12 @@ )] #![forbid(unsafe_code)] -use syn::{parse_macro_input, DeriveInput}; +use proc_macro2::Span; +use quote::quote; +use syn::{parse_macro_input, DeriveInput, Ident}; mod config; +mod prefixes; mod rule_code_prefix; #[proc_macro_derive(ConfigurationOptions, attributes(option, doc, option_group))] @@ -34,3 +37,23 @@ pub fn derive_rule_code_prefix(input: proc_macro::TokenStream) -> proc_macro::To .unwrap_or_else(syn::Error::into_compile_error) .into() } + +#[proc_macro] +pub fn origin_by_code(item: proc_macro::TokenStream) -> proc_macro::TokenStream { + let ident = parse_macro_input!(item as Ident).to_string(); + let mut iter = prefixes::PREFIX_TO_ORIGIN.iter(); + let origin = loop { + let (prefix, origin) = iter + .next() + .unwrap_or_else(|| panic!("code doesn't start with any recognized prefix: {ident}")); + if ident.starts_with(prefix) { + break origin; + } + }; + let prefix = Ident::new(origin, Span::call_site()); + + quote! { + RuleOrigin::#prefix + } + .into() +} diff --git a/ruff_macros/src/prefixes.rs b/ruff_macros/src/prefixes.rs new file mode 100644 index 0000000000..adfcb78100 --- /dev/null +++ b/ruff_macros/src/prefixes.rs @@ -0,0 +1,53 @@ +// Longer prefixes should come first so that you can find an origin for a code +// by simply picking the first entry that starts with the given prefix. + +pub const PREFIX_TO_ORIGIN: &[(&str, &str)] = &[ + ("ANN", "Flake8Annotations"), + ("ARG", "Flake8UnusedArguments"), + ("A", "Flake8Builtins"), + ("BLE", "Flake8BlindExcept"), + ("B", "Flake8Bugbear"), + ("C4", "Flake8Comprehensions"), + ("C9", "McCabe"), + ("DTZ", "Flake8Datetimez"), + ("D", "Pydocstyle"), + ("ERA", "Eradicate"), + ("EM", "Flake8ErrMsg"), + ("E", "Pycodestyle"), + ("FBT", "Flake8BooleanTrap"), + ("F", "Pyflakes"), + ("ICN", "Flake8ImportConventions"), + ("ISC", "Flake8ImplicitStrConcat"), + ("I", "Isort"), + ("N", "PEP8Naming"), + ("PD", "PandasVet"), + ("PGH", "PygrepHooks"), + ("PL", "Pylint"), + ("PT", "Flake8PytestStyle"), + ("Q", "Flake8Quotes"), + ("RET", "Flake8Return"), + ("SIM", "Flake8Simplify"), + ("S", "Flake8Bandit"), + ("T10", "Flake8Debugger"), + ("T20", "Flake8Print"), + ("TID", "Flake8TidyImports"), + ("UP", "Pyupgrade"), + ("W", "Pycodestyle"), + ("YTT", "Flake82020"), + ("PIE", "Flake8Pie"), + ("RUF", "Ruff"), +]; + +#[cfg(test)] +mod tests { + use super::PREFIX_TO_ORIGIN; + + #[test] + fn order() { + for (idx, (prefix, _)) in PREFIX_TO_ORIGIN.iter().enumerate() { + for (prior_prefix, _) in PREFIX_TO_ORIGIN[..idx].iter() { + assert!(!prefix.starts_with(prior_prefix)); + } + } + } +} diff --git a/scripts/add_rule.py b/scripts/add_rule.py index 8cec1782e6..78d90b326d 100644 --- a/scripts/add_rule.py +++ b/scripts/add_rule.py @@ -116,33 +116,6 @@ impl Violation for %s { fp.write("\n") has_written = True - # Add the relevant code-to-origin pair to `src/registry.rs`. - with open(os.path.join(ROOT_DIR, "src/registry.rs")) as fp: - content = fp.read() - - seen_impl = False - has_written = False - with open(os.path.join(ROOT_DIR, "src/registry.rs"), "w") as fp: - for line in content.splitlines(): - fp.write(line) - fp.write("\n") - - if has_written: - continue - - if line.startswith("impl RuleCode"): - seen_impl = True - continue - - if not seen_impl: - continue - - if line.strip() == f"// {origin}": - indent = line.split("//")[0] - fp.write(f"{indent}RuleCode::{code} => RuleOrigin::{pascal_case(origin)},") - fp.write("\n") - has_written = True - if __name__ == "__main__": parser = argparse.ArgumentParser( diff --git a/src/registry.rs b/src/registry.rs index c5b19720ed..4f444d596e 100644 --- a/src/registry.rs +++ b/src/registry.rs @@ -54,6 +54,14 @@ macro_rules! define_rule_mapping { )+ } } + + pub fn origin(&self) -> RuleOrigin { + match self { + $( + RuleCode::$code => ruff_macros::origin_by_code!($code), + )+ + } + } } impl DiagnosticKind { @@ -417,7 +425,7 @@ define_rule_mapping!( S324 => violations::HashlibInsecureHashFunction, S501 => violations::RequestWithNoCertValidation, S506 => violations::UnsafeYAMLLoad, - S508 => violations::SnmpInsecureVersion, + S508 => violations::SnmpInsecureVersion, S509 => violations::SnmpWeakCryptography, // flake8-boolean-trap FBT001 => violations::BooleanPositionalArgInFunctionDefinition, @@ -793,405 +801,6 @@ impl RuleCode { _ => &LintSource::AST, } } - - pub fn origin(&self) -> RuleOrigin { - #[allow(clippy::match_same_arms)] - match self { - // flake8-builtins - RuleCode::A001 => RuleOrigin::Flake8Builtins, - RuleCode::A002 => RuleOrigin::Flake8Builtins, - RuleCode::A003 => RuleOrigin::Flake8Builtins, - // flake8-annotations - RuleCode::ANN001 => RuleOrigin::Flake8Annotations, - RuleCode::ANN002 => RuleOrigin::Flake8Annotations, - RuleCode::ANN003 => RuleOrigin::Flake8Annotations, - RuleCode::ANN101 => RuleOrigin::Flake8Annotations, - RuleCode::ANN102 => RuleOrigin::Flake8Annotations, - RuleCode::ANN201 => RuleOrigin::Flake8Annotations, - RuleCode::ANN202 => RuleOrigin::Flake8Annotations, - RuleCode::ANN204 => RuleOrigin::Flake8Annotations, - RuleCode::ANN205 => RuleOrigin::Flake8Annotations, - RuleCode::ANN206 => RuleOrigin::Flake8Annotations, - RuleCode::ANN401 => RuleOrigin::Flake8Annotations, - // flake8-unused-arguments - RuleCode::ARG001 => RuleOrigin::Flake8UnusedArguments, - RuleCode::ARG002 => RuleOrigin::Flake8UnusedArguments, - RuleCode::ARG003 => RuleOrigin::Flake8UnusedArguments, - RuleCode::ARG004 => RuleOrigin::Flake8UnusedArguments, - RuleCode::ARG005 => RuleOrigin::Flake8UnusedArguments, - // flake8-bugbear - RuleCode::B002 => RuleOrigin::Flake8Bugbear, - RuleCode::B003 => RuleOrigin::Flake8Bugbear, - RuleCode::B004 => RuleOrigin::Flake8Bugbear, - RuleCode::B005 => RuleOrigin::Flake8Bugbear, - RuleCode::B006 => RuleOrigin::Flake8Bugbear, - RuleCode::B007 => RuleOrigin::Flake8Bugbear, - RuleCode::B008 => RuleOrigin::Flake8Bugbear, - RuleCode::B009 => RuleOrigin::Flake8Bugbear, - RuleCode::B010 => RuleOrigin::Flake8Bugbear, - RuleCode::B011 => RuleOrigin::Flake8Bugbear, - RuleCode::B012 => RuleOrigin::Flake8Bugbear, - RuleCode::B013 => RuleOrigin::Flake8Bugbear, - RuleCode::B014 => RuleOrigin::Flake8Bugbear, - RuleCode::B015 => RuleOrigin::Flake8Bugbear, - RuleCode::B016 => RuleOrigin::Flake8Bugbear, - RuleCode::B017 => RuleOrigin::Flake8Bugbear, - RuleCode::B018 => RuleOrigin::Flake8Bugbear, - RuleCode::B019 => RuleOrigin::Flake8Bugbear, - RuleCode::B020 => RuleOrigin::Flake8Bugbear, - RuleCode::B021 => RuleOrigin::Flake8Bugbear, - RuleCode::B022 => RuleOrigin::Flake8Bugbear, - RuleCode::B023 => RuleOrigin::Flake8Bugbear, - RuleCode::B024 => RuleOrigin::Flake8Bugbear, - RuleCode::B025 => RuleOrigin::Flake8Bugbear, - RuleCode::B026 => RuleOrigin::Flake8Bugbear, - RuleCode::B027 => RuleOrigin::Flake8Bugbear, - RuleCode::B904 => RuleOrigin::Flake8Bugbear, - RuleCode::B905 => RuleOrigin::Flake8Bugbear, - // flake8-blind-except - RuleCode::BLE001 => RuleOrigin::Flake8BlindExcept, - // flake8-comprehensions - RuleCode::C400 => RuleOrigin::Flake8Comprehensions, - RuleCode::C401 => RuleOrigin::Flake8Comprehensions, - RuleCode::C402 => RuleOrigin::Flake8Comprehensions, - RuleCode::C403 => RuleOrigin::Flake8Comprehensions, - RuleCode::C404 => RuleOrigin::Flake8Comprehensions, - RuleCode::C405 => RuleOrigin::Flake8Comprehensions, - RuleCode::C406 => RuleOrigin::Flake8Comprehensions, - RuleCode::C408 => RuleOrigin::Flake8Comprehensions, - RuleCode::C409 => RuleOrigin::Flake8Comprehensions, - RuleCode::C410 => RuleOrigin::Flake8Comprehensions, - RuleCode::C411 => RuleOrigin::Flake8Comprehensions, - RuleCode::C413 => RuleOrigin::Flake8Comprehensions, - RuleCode::C414 => RuleOrigin::Flake8Comprehensions, - RuleCode::C415 => RuleOrigin::Flake8Comprehensions, - RuleCode::C416 => RuleOrigin::Flake8Comprehensions, - RuleCode::C417 => RuleOrigin::Flake8Comprehensions, - // mccabe - RuleCode::C901 => RuleOrigin::McCabe, - // pydocstyle - RuleCode::D100 => RuleOrigin::Pydocstyle, - RuleCode::D101 => RuleOrigin::Pydocstyle, - RuleCode::D102 => RuleOrigin::Pydocstyle, - RuleCode::D103 => RuleOrigin::Pydocstyle, - RuleCode::D104 => RuleOrigin::Pydocstyle, - RuleCode::D105 => RuleOrigin::Pydocstyle, - RuleCode::D106 => RuleOrigin::Pydocstyle, - RuleCode::D107 => RuleOrigin::Pydocstyle, - RuleCode::D200 => RuleOrigin::Pydocstyle, - RuleCode::D201 => RuleOrigin::Pydocstyle, - RuleCode::D202 => RuleOrigin::Pydocstyle, - RuleCode::D203 => RuleOrigin::Pydocstyle, - RuleCode::D204 => RuleOrigin::Pydocstyle, - RuleCode::D205 => RuleOrigin::Pydocstyle, - RuleCode::D206 => RuleOrigin::Pydocstyle, - RuleCode::D207 => RuleOrigin::Pydocstyle, - RuleCode::D208 => RuleOrigin::Pydocstyle, - RuleCode::D209 => RuleOrigin::Pydocstyle, - RuleCode::D210 => RuleOrigin::Pydocstyle, - RuleCode::D211 => RuleOrigin::Pydocstyle, - RuleCode::D212 => RuleOrigin::Pydocstyle, - RuleCode::D213 => RuleOrigin::Pydocstyle, - RuleCode::D214 => RuleOrigin::Pydocstyle, - RuleCode::D215 => RuleOrigin::Pydocstyle, - RuleCode::D300 => RuleOrigin::Pydocstyle, - RuleCode::D301 => RuleOrigin::Pydocstyle, - RuleCode::D400 => RuleOrigin::Pydocstyle, - RuleCode::D402 => RuleOrigin::Pydocstyle, - RuleCode::D403 => RuleOrigin::Pydocstyle, - RuleCode::D404 => RuleOrigin::Pydocstyle, - RuleCode::D405 => RuleOrigin::Pydocstyle, - RuleCode::D406 => RuleOrigin::Pydocstyle, - RuleCode::D407 => RuleOrigin::Pydocstyle, - RuleCode::D408 => RuleOrigin::Pydocstyle, - RuleCode::D409 => RuleOrigin::Pydocstyle, - RuleCode::D410 => RuleOrigin::Pydocstyle, - RuleCode::D411 => RuleOrigin::Pydocstyle, - RuleCode::D412 => RuleOrigin::Pydocstyle, - RuleCode::D413 => RuleOrigin::Pydocstyle, - RuleCode::D414 => RuleOrigin::Pydocstyle, - RuleCode::D415 => RuleOrigin::Pydocstyle, - RuleCode::D416 => RuleOrigin::Pydocstyle, - RuleCode::D417 => RuleOrigin::Pydocstyle, - RuleCode::D418 => RuleOrigin::Pydocstyle, - RuleCode::D419 => RuleOrigin::Pydocstyle, - // flake8-datetimez - RuleCode::DTZ001 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ002 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ003 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ004 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ005 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ006 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ007 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ011 => RuleOrigin::Flake8Datetimez, - RuleCode::DTZ012 => RuleOrigin::Flake8Datetimez, - // pycodestyle (errors) - RuleCode::E401 => RuleOrigin::Pycodestyle, - RuleCode::E402 => RuleOrigin::Pycodestyle, - RuleCode::E501 => RuleOrigin::Pycodestyle, - RuleCode::E711 => RuleOrigin::Pycodestyle, - RuleCode::E712 => RuleOrigin::Pycodestyle, - RuleCode::E713 => RuleOrigin::Pycodestyle, - RuleCode::E714 => RuleOrigin::Pycodestyle, - RuleCode::E721 => RuleOrigin::Pycodestyle, - RuleCode::E722 => RuleOrigin::Pycodestyle, - RuleCode::E731 => RuleOrigin::Pycodestyle, - RuleCode::E741 => RuleOrigin::Pycodestyle, - RuleCode::E742 => RuleOrigin::Pycodestyle, - RuleCode::E743 => RuleOrigin::Pycodestyle, - RuleCode::E902 => RuleOrigin::Pycodestyle, - RuleCode::E999 => RuleOrigin::Pycodestyle, - // flake8-errmsg - RuleCode::EM101 => RuleOrigin::Flake8ErrMsg, - RuleCode::EM102 => RuleOrigin::Flake8ErrMsg, - RuleCode::EM103 => RuleOrigin::Flake8ErrMsg, - // eradicate - RuleCode::ERA001 => RuleOrigin::Eradicate, - // pyflakes - RuleCode::F401 => RuleOrigin::Pyflakes, - RuleCode::F402 => RuleOrigin::Pyflakes, - RuleCode::F403 => RuleOrigin::Pyflakes, - RuleCode::F404 => RuleOrigin::Pyflakes, - RuleCode::F405 => RuleOrigin::Pyflakes, - RuleCode::F406 => RuleOrigin::Pyflakes, - RuleCode::F407 => RuleOrigin::Pyflakes, - RuleCode::F501 => RuleOrigin::Pyflakes, - RuleCode::F502 => RuleOrigin::Pyflakes, - RuleCode::F503 => RuleOrigin::Pyflakes, - RuleCode::F504 => RuleOrigin::Pyflakes, - RuleCode::F505 => RuleOrigin::Pyflakes, - RuleCode::F506 => RuleOrigin::Pyflakes, - RuleCode::F507 => RuleOrigin::Pyflakes, - RuleCode::F508 => RuleOrigin::Pyflakes, - RuleCode::F509 => RuleOrigin::Pyflakes, - RuleCode::F521 => RuleOrigin::Pyflakes, - RuleCode::F522 => RuleOrigin::Pyflakes, - RuleCode::F523 => RuleOrigin::Pyflakes, - RuleCode::F524 => RuleOrigin::Pyflakes, - RuleCode::F525 => RuleOrigin::Pyflakes, - RuleCode::F541 => RuleOrigin::Pyflakes, - RuleCode::F601 => RuleOrigin::Pyflakes, - RuleCode::F602 => RuleOrigin::Pyflakes, - RuleCode::F621 => RuleOrigin::Pyflakes, - RuleCode::F622 => RuleOrigin::Pyflakes, - RuleCode::F631 => RuleOrigin::Pyflakes, - RuleCode::F632 => RuleOrigin::Pyflakes, - RuleCode::F633 => RuleOrigin::Pyflakes, - RuleCode::F634 => RuleOrigin::Pyflakes, - RuleCode::F701 => RuleOrigin::Pyflakes, - RuleCode::F702 => RuleOrigin::Pyflakes, - RuleCode::F704 => RuleOrigin::Pyflakes, - RuleCode::F706 => RuleOrigin::Pyflakes, - RuleCode::F707 => RuleOrigin::Pyflakes, - RuleCode::F722 => RuleOrigin::Pyflakes, - RuleCode::F811 => RuleOrigin::Pyflakes, - RuleCode::F821 => RuleOrigin::Pyflakes, - RuleCode::F822 => RuleOrigin::Pyflakes, - RuleCode::F823 => RuleOrigin::Pyflakes, - RuleCode::F841 => RuleOrigin::Pyflakes, - RuleCode::F842 => RuleOrigin::Pyflakes, - RuleCode::F901 => RuleOrigin::Pyflakes, - // flake8-boolean-trap - RuleCode::FBT001 => RuleOrigin::Flake8BooleanTrap, - RuleCode::FBT002 => RuleOrigin::Flake8BooleanTrap, - RuleCode::FBT003 => RuleOrigin::Flake8BooleanTrap, - // isort - RuleCode::I001 => RuleOrigin::Isort, - // flake8-import-conventions - RuleCode::ICN001 => RuleOrigin::Flake8ImportConventions, - // flake8-implicit-str-concat - RuleCode::ISC001 => RuleOrigin::Flake8ImplicitStrConcat, - RuleCode::ISC002 => RuleOrigin::Flake8ImplicitStrConcat, - RuleCode::ISC003 => RuleOrigin::Flake8ImplicitStrConcat, - // pep8-naming - RuleCode::N801 => RuleOrigin::PEP8Naming, - RuleCode::N802 => RuleOrigin::PEP8Naming, - RuleCode::N803 => RuleOrigin::PEP8Naming, - RuleCode::N804 => RuleOrigin::PEP8Naming, - RuleCode::N805 => RuleOrigin::PEP8Naming, - RuleCode::N806 => RuleOrigin::PEP8Naming, - RuleCode::N807 => RuleOrigin::PEP8Naming, - RuleCode::N811 => RuleOrigin::PEP8Naming, - RuleCode::N812 => RuleOrigin::PEP8Naming, - RuleCode::N813 => RuleOrigin::PEP8Naming, - RuleCode::N814 => RuleOrigin::PEP8Naming, - RuleCode::N815 => RuleOrigin::PEP8Naming, - RuleCode::N816 => RuleOrigin::PEP8Naming, - RuleCode::N817 => RuleOrigin::PEP8Naming, - RuleCode::N818 => RuleOrigin::PEP8Naming, - // pandas-vet - RuleCode::PD002 => RuleOrigin::PandasVet, - RuleCode::PD003 => RuleOrigin::PandasVet, - RuleCode::PD004 => RuleOrigin::PandasVet, - RuleCode::PD007 => RuleOrigin::PandasVet, - RuleCode::PD008 => RuleOrigin::PandasVet, - RuleCode::PD009 => RuleOrigin::PandasVet, - RuleCode::PD010 => RuleOrigin::PandasVet, - RuleCode::PD011 => RuleOrigin::PandasVet, - RuleCode::PD012 => RuleOrigin::PandasVet, - RuleCode::PD013 => RuleOrigin::PandasVet, - RuleCode::PD015 => RuleOrigin::PandasVet, - RuleCode::PD901 => RuleOrigin::PandasVet, - // pygrep-hooks - RuleCode::PGH001 => RuleOrigin::PygrepHooks, - RuleCode::PGH002 => RuleOrigin::PygrepHooks, - RuleCode::PGH003 => RuleOrigin::PygrepHooks, - RuleCode::PGH004 => RuleOrigin::PygrepHooks, - // pylint - RuleCode::PLC0414 => RuleOrigin::Pylint, - RuleCode::PLC2201 => RuleOrigin::Pylint, - RuleCode::PLC3002 => RuleOrigin::Pylint, - RuleCode::PLE0117 => RuleOrigin::Pylint, - RuleCode::PLE0118 => RuleOrigin::Pylint, - RuleCode::PLE1142 => RuleOrigin::Pylint, - RuleCode::PLR0206 => RuleOrigin::Pylint, - RuleCode::PLR0402 => RuleOrigin::Pylint, - RuleCode::PLR1701 => RuleOrigin::Pylint, - RuleCode::PLR1722 => RuleOrigin::Pylint, - RuleCode::PLW0120 => RuleOrigin::Pylint, - RuleCode::PLW0602 => RuleOrigin::Pylint, - // flake8-pytest-style - RuleCode::PT001 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT002 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT003 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT004 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT005 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT006 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT007 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT008 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT009 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT010 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT011 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT012 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT013 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT015 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT016 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT017 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT018 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT019 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT020 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT021 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT022 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT023 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT024 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT025 => RuleOrigin::Flake8PytestStyle, - RuleCode::PT026 => RuleOrigin::Flake8PytestStyle, - // flake8-quotes - RuleCode::Q000 => RuleOrigin::Flake8Quotes, - RuleCode::Q001 => RuleOrigin::Flake8Quotes, - RuleCode::Q002 => RuleOrigin::Flake8Quotes, - RuleCode::Q003 => RuleOrigin::Flake8Quotes, - // flake8-return - RuleCode::RET501 => RuleOrigin::Flake8Return, - RuleCode::RET502 => RuleOrigin::Flake8Return, - RuleCode::RET503 => RuleOrigin::Flake8Return, - RuleCode::RET504 => RuleOrigin::Flake8Return, - RuleCode::RET505 => RuleOrigin::Flake8Return, - RuleCode::RET506 => RuleOrigin::Flake8Return, - RuleCode::RET507 => RuleOrigin::Flake8Return, - RuleCode::RET508 => RuleOrigin::Flake8Return, - // flake8-bandit - RuleCode::S101 => RuleOrigin::Flake8Bandit, - RuleCode::S102 => RuleOrigin::Flake8Bandit, - RuleCode::S103 => RuleOrigin::Flake8Bandit, - RuleCode::S104 => RuleOrigin::Flake8Bandit, - RuleCode::S105 => RuleOrigin::Flake8Bandit, - RuleCode::S106 => RuleOrigin::Flake8Bandit, - RuleCode::S107 => RuleOrigin::Flake8Bandit, - RuleCode::S108 => RuleOrigin::Flake8Bandit, - RuleCode::S113 => RuleOrigin::Flake8Bandit, - RuleCode::S324 => RuleOrigin::Flake8Bandit, - RuleCode::S501 => RuleOrigin::Flake8Bandit, - RuleCode::S506 => RuleOrigin::Flake8Bandit, - RuleCode::S508 => RuleOrigin::Flake8Bandit, - RuleCode::S509 => RuleOrigin::Flake8Bandit, - // flake8-simplify - RuleCode::SIM103 => RuleOrigin::Flake8Simplify, - RuleCode::SIM101 => RuleOrigin::Flake8Simplify, - RuleCode::SIM102 => RuleOrigin::Flake8Simplify, - RuleCode::SIM105 => RuleOrigin::Flake8Simplify, - RuleCode::SIM107 => RuleOrigin::Flake8Simplify, - RuleCode::SIM108 => RuleOrigin::Flake8Simplify, - RuleCode::SIM109 => RuleOrigin::Flake8Simplify, - RuleCode::SIM110 => RuleOrigin::Flake8Simplify, - RuleCode::SIM111 => RuleOrigin::Flake8Simplify, - RuleCode::SIM112 => RuleOrigin::Flake8Simplify, - RuleCode::SIM117 => RuleOrigin::Flake8Simplify, - RuleCode::SIM118 => RuleOrigin::Flake8Simplify, - RuleCode::SIM201 => RuleOrigin::Flake8Simplify, - RuleCode::SIM202 => RuleOrigin::Flake8Simplify, - RuleCode::SIM208 => RuleOrigin::Flake8Simplify, - RuleCode::SIM210 => RuleOrigin::Flake8Simplify, - RuleCode::SIM211 => RuleOrigin::Flake8Simplify, - RuleCode::SIM212 => RuleOrigin::Flake8Simplify, - RuleCode::SIM220 => RuleOrigin::Flake8Simplify, - RuleCode::SIM221 => RuleOrigin::Flake8Simplify, - RuleCode::SIM222 => RuleOrigin::Flake8Simplify, - RuleCode::SIM223 => RuleOrigin::Flake8Simplify, - RuleCode::SIM300 => RuleOrigin::Flake8Simplify, - // flake8-debugger - RuleCode::T100 => RuleOrigin::Flake8Debugger, - // flake8-print - RuleCode::T201 => RuleOrigin::Flake8Print, - RuleCode::T203 => RuleOrigin::Flake8Print, - // flake8-tidy-imports - RuleCode::TID251 => RuleOrigin::Flake8TidyImports, - RuleCode::TID252 => RuleOrigin::Flake8TidyImports, - // pyupgrade - RuleCode::UP001 => RuleOrigin::Pyupgrade, - RuleCode::UP003 => RuleOrigin::Pyupgrade, - RuleCode::UP004 => RuleOrigin::Pyupgrade, - RuleCode::UP005 => RuleOrigin::Pyupgrade, - RuleCode::UP006 => RuleOrigin::Pyupgrade, - RuleCode::UP007 => RuleOrigin::Pyupgrade, - RuleCode::UP008 => RuleOrigin::Pyupgrade, - RuleCode::UP009 => RuleOrigin::Pyupgrade, - RuleCode::UP010 => RuleOrigin::Pyupgrade, - RuleCode::UP011 => RuleOrigin::Pyupgrade, - RuleCode::UP012 => RuleOrigin::Pyupgrade, - RuleCode::UP013 => RuleOrigin::Pyupgrade, - RuleCode::UP014 => RuleOrigin::Pyupgrade, - RuleCode::UP015 => RuleOrigin::Pyupgrade, - RuleCode::UP016 => RuleOrigin::Pyupgrade, - RuleCode::UP017 => RuleOrigin::Pyupgrade, - RuleCode::UP018 => RuleOrigin::Pyupgrade, - RuleCode::UP019 => RuleOrigin::Pyupgrade, - RuleCode::UP020 => RuleOrigin::Pyupgrade, - RuleCode::UP021 => RuleOrigin::Pyupgrade, - RuleCode::UP022 => RuleOrigin::Pyupgrade, - RuleCode::UP023 => RuleOrigin::Pyupgrade, - RuleCode::UP024 => RuleOrigin::Pyupgrade, - RuleCode::UP025 => RuleOrigin::Pyupgrade, - RuleCode::UP026 => RuleOrigin::Pyupgrade, - RuleCode::UP027 => RuleOrigin::Pyupgrade, - RuleCode::UP028 => RuleOrigin::Pyupgrade, - RuleCode::UP029 => RuleOrigin::Pyupgrade, - // pycodestyle (warnings) - RuleCode::W292 => RuleOrigin::Pycodestyle, - RuleCode::W605 => RuleOrigin::Pycodestyle, - // flake8-2020 - RuleCode::YTT101 => RuleOrigin::Flake82020, - RuleCode::YTT102 => RuleOrigin::Flake82020, - RuleCode::YTT103 => RuleOrigin::Flake82020, - RuleCode::YTT201 => RuleOrigin::Flake82020, - RuleCode::YTT202 => RuleOrigin::Flake82020, - RuleCode::YTT203 => RuleOrigin::Flake82020, - RuleCode::YTT204 => RuleOrigin::Flake82020, - RuleCode::YTT301 => RuleOrigin::Flake82020, - RuleCode::YTT302 => RuleOrigin::Flake82020, - RuleCode::YTT303 => RuleOrigin::Flake82020, - // flake8-pie - RuleCode::PIE790 => RuleOrigin::Flake8Pie, - RuleCode::PIE794 => RuleOrigin::Flake8Pie, - RuleCode::PIE807 => RuleOrigin::Flake8Pie, - // Ruff - RuleCode::RUF001 => RuleOrigin::Ruff, - RuleCode::RUF002 => RuleOrigin::Ruff, - RuleCode::RUF003 => RuleOrigin::Ruff, - RuleCode::RUF004 => RuleOrigin::Ruff, - RuleCode::RUF100 => RuleOrigin::Ruff, - } - } } impl DiagnosticKind {