Generate RuleCode::origin() via macro (#1770)

This commit is contained in:
Martin Fischer 2023-01-10 19:20:43 +01:00 committed by GitHub
parent b8e3f0bc13
commit 543865c96b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 86 additions and 428 deletions

View file

@ -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()
}

View file

@ -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));
}
}
}
}

View file

@ -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(

View file

@ -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 {