diff --git a/ruff_macros/src/rule_code_prefix.rs b/ruff_macros/src/rule_code_prefix.rs index c2b6e7aacd..622ffdb3ec 100644 --- a/ruff_macros/src/rule_code_prefix.rs +++ b/ruff_macros/src/rule_code_prefix.rs @@ -91,9 +91,9 @@ pub fn expand<'a>( variant_name: impl Fn(&str) -> &'a Ident, ) -> proc_macro2::TokenStream { // Build up a map from prefix to matching RuleCodes. - let mut prefix_to_codes: BTreeMap> = BTreeMap::default(); + let mut prefix_to_codes: BTreeMap> = BTreeMap::default(); + for variant in variants { - let span = variant.span(); let code_str = variant.to_string(); let code_prefix_len = code_str .chars() @@ -103,12 +103,12 @@ pub fn expand<'a>( for i in 0..=code_suffix_len { let prefix = code_str[..code_prefix_len + i].to_string(); prefix_to_codes - .entry(Ident::new(&prefix, span)) + .entry(prefix) .or_default() .insert(code_str.clone()); } prefix_to_codes - .entry(Ident::new(ALL, span)) + .entry(ALL.to_string()) .or_default() .insert(code_str.clone()); } @@ -116,15 +116,16 @@ pub fn expand<'a>( // Add any prefix aliases (e.g., "U" to "UP"). for (alias, rule_code) in PREFIX_REDIRECTS.iter() { prefix_to_codes.insert( - Ident::new(alias, Span::call_site()), + (*alias).to_string(), prefix_to_codes - .get(&Ident::new(rule_code, Span::call_site())) + .get(*rule_code) .unwrap_or_else(|| panic!("Unknown RuleCode: {alias:?}")) .clone(), ); } let prefix_variants = prefix_to_codes.keys().map(|prefix| { + let prefix = Ident::new(prefix, Span::call_site()); quote! { #prefix } @@ -181,17 +182,17 @@ pub fn expand<'a>( fn generate_impls<'a>( rule_type: &Ident, prefix_ident: &Ident, - prefix_to_codes: &BTreeMap>, + prefix_to_codes: &BTreeMap>, variant_name: impl Fn(&str) -> &'a Ident, ) -> proc_macro2::TokenStream { - let into_iter_match_arms = prefix_to_codes.iter().map(|(prefix, codes)| { + let into_iter_match_arms = prefix_to_codes.iter().map(|(prefix_str, codes)| { let codes = codes.iter().map(|code| { let rule_variant = variant_name(code); quote! { #rule_type::#rule_variant } }); - let prefix_str = prefix.to_string(); + let prefix = Ident::new(prefix_str, Span::call_site()); if let Some(target) = PREFIX_REDIRECTS.get(prefix_str.as_str()) { quote! { #prefix_ident::#prefix => { @@ -208,17 +209,14 @@ fn generate_impls<'a>( } }); - let specificity_match_arms = prefix_to_codes.keys().map(|prefix| { - if *prefix == ALL { + let specificity_match_arms = prefix_to_codes.keys().map(|prefix_str| { + let prefix = Ident::new(prefix_str, Span::call_site()); + if prefix_str == ALL { quote! { #prefix_ident::#prefix => SuffixLength::None, } } else { - let num_numeric = prefix - .to_string() - .chars() - .filter(|char| char.is_numeric()) - .count(); + let num_numeric = prefix_str.chars().filter(|char| char.is_numeric()).count(); let suffix_len = match num_numeric { 0 => quote! { SuffixLength::Zero }, 1 => quote! { SuffixLength::One }, @@ -233,11 +231,11 @@ fn generate_impls<'a>( } }); - let categories = prefix_to_codes.keys().map(|prefix| { - let prefix_str = prefix.to_string(); + let categories = prefix_to_codes.keys().map(|prefix_str| { if prefix_str.chars().all(char::is_alphabetic) && !PREFIX_REDIRECTS.contains_key(&prefix_str.as_str()) { + let prefix = Ident::new(prefix_str, Span::call_site()); quote! { #prefix_ident::#prefix, }