From eebcdf6b163174ec1629d121264c0477652e3323 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 10 Aug 2026 16:04:57 +0800 Subject: refactor(macros): clean up clippy lints and simplify code --- mingling_macros/src/func/dispatcher.rs | 2 +- mingling_macros/src/func/node.rs | 4 ++-- mingling_macros/src/func/pack.rs | 2 +- mingling_macros/src/func/pack_structural.rs | 3 ++- mingling_macros/src/func/program_final_gen.rs | 1 + mingling_macros/src/func/r_append.rs | 16 ++++++++-------- mingling_macros/src/func/r_print.rs | 8 ++++---- mingling_macros/src/func/register_help.rs | 19 +++++++++++++------ mingling_macros/src/func/suggest.rs | 9 ++++----- 9 files changed, 36 insertions(+), 28 deletions(-) (limited to 'mingling_macros/src/func') diff --git a/mingling_macros/src/func/dispatcher.rs b/mingling_macros/src/func/dispatcher.rs index a9e2464..d834c95 100644 --- a/mingling_macros/src/func/dispatcher.rs +++ b/mingling_macros/src/func/dispatcher.rs @@ -53,7 +53,7 @@ impl Parse for DispatcherChainInput { let entry_attrs = input.call(Attribute::parse_outer)?; let pack = input.parse()?; - Ok(DispatcherChainInput::Default { + Ok(Self::Default { cmd_attrs, entry_attrs, command_name, diff --git a/mingling_macros/src/func/node.rs b/mingling_macros/src/func/node.rs index 1b944a1..0b0de58 100644 --- a/mingling_macros/src/func/node.rs +++ b/mingling_macros/src/func/node.rs @@ -12,7 +12,7 @@ struct NodeInput { impl Parse for NodeInput { fn parse(input: ParseStream) -> SynResult { - Ok(NodeInput { + Ok(Self { path: input.parse()?, }) } @@ -38,7 +38,7 @@ pub(crate) fn node(input: TokenStream) -> TokenStream { if s.starts_with('_') { s.to_string() } else { - kebab_case!(s).to_string() + kebab_case!(s) } }) .collect(); diff --git a/mingling_macros/src/func/pack.rs b/mingling_macros/src/func/pack.rs index 7206b8e..d85f59e 100644 --- a/mingling_macros/src/func/pack.rs +++ b/mingling_macros/src/func/pack.rs @@ -16,7 +16,7 @@ impl Parse for PackInput { input.parse::()?; let inner_type: Type = input.parse()?; - Ok(PackInput { + Ok(Self { attrs, type_name, inner_type, diff --git a/mingling_macros/src/func/pack_structural.rs b/mingling_macros/src/func/pack_structural.rs index 9399959..e5b2362 100644 --- a/mingling_macros/src/func/pack_structural.rs +++ b/mingling_macros/src/func/pack_structural.rs @@ -6,6 +6,7 @@ use crate::get_global_set; /// `pack_structural!` — like `pack!` but also marks the type as supporting /// structured output via `StructuralData`. +#[allow(clippy::too_many_lines)] pub(crate) fn pack_structural(input: TokenStream) -> TokenStream { // Parse same input format as `pack!` let input_parsed = syn::parse_macro_input!(input as PackStructuralInput); @@ -159,7 +160,7 @@ impl syn::parse::Parse for PackStructuralInput { let type_name: Ident = input.parse()?; input.parse::()?; let inner_type: syn::Type = input.parse()?; - Ok(PackStructuralInput { + Ok(Self { attrs, type_name, inner_type, diff --git a/mingling_macros/src/func/program_final_gen.rs b/mingling_macros/src/func/program_final_gen.rs index 429e60c..f43f37a 100644 --- a/mingling_macros/src/func/program_final_gen.rs +++ b/mingling_macros/src/func/program_final_gen.rs @@ -45,6 +45,7 @@ fn ident_tokens(name: &str) -> proc_macro2::TokenStream { } #[allow(clippy::too_many_lines)] +#[allow(clippy::similar_names)] // You're being quite picky. pub(crate) fn program_final_gen_impl(_input: TokenStream) -> TokenStream { let name = syn::Ident::new("ThisProgram", proc_macro2::Span::call_site()); diff --git a/mingling_macros/src/func/r_append.rs b/mingling_macros/src/func/r_append.rs index 247da27..ffdc9ba 100644 --- a/mingling_macros/src/func/r_append.rs +++ b/mingling_macros/src/func/r_append.rs @@ -12,18 +12,18 @@ pub(crate) fn r_append(input: TokenStream) -> TokenStream { let dst_ident = parsed.dst.clone(); let src_tokens = parsed.src; - let expanded = match dst_ident { - Some(dst) => { + let expanded = dst_ident.map_or_else( + || { quote! { - #dst.append_other(#src_tokens); + __render_result_buffer.append_other(#src_tokens); } - } - None => { + }, + |dst| { quote! { - __render_result_buffer.append_other(#src_tokens); + #dst.append_other(#src_tokens); } - } - }; + }, + ); expanded.into() } diff --git a/mingling_macros/src/func/r_print.rs b/mingling_macros/src/func/r_print.rs index 20f15b8..06d8a45 100644 --- a/mingling_macros/src/func/r_print.rs +++ b/mingling_macros/src/func/r_print.rs @@ -21,10 +21,10 @@ impl Parse for PrintInput { let dst: Ident = input.parse()?; let _comma: Token![,] = input.parse()?; let args: TokenStream2 = input.parse()?; - Ok(PrintInput::Explicit { dst, args }) + Ok(Self::Explicit { dst, args }) } else { let args: TokenStream2 = input.parse()?; - Ok(PrintInput::Implicit { args }) + Ok(Self::Implicit { args }) } } } @@ -73,13 +73,13 @@ impl Parse for AppendInput { let dst: Ident = input.parse()?; let _comma: Token![,] = input.parse()?; let src: TokenStream2 = input.parse()?; - Ok(AppendInput { + Ok(Self { dst: Some(dst), src, }) } else { let src: TokenStream2 = input.parse()?; - Ok(AppendInput { dst: None, src }) + Ok(Self { dst: None, src }) } } } diff --git a/mingling_macros/src/func/register_help.rs b/mingling_macros/src/func/register_help.rs index e715244..d1957a5 100644 --- a/mingling_macros/src/func/register_help.rs +++ b/mingling_macros/src/func/register_help.rs @@ -39,21 +39,28 @@ pub(crate) fn register_help(input: TokenStream) -> TokenStream { let entry_str = help_entry.to_string(); // Check if entry was already pre-inserted by `#[help]` attribute - let mut helps = get_global_set(&crate::HELP_REQUESTS).lock().unwrap(); - if helps.contains(&entry_str) { + let helps = get_global_set(&crate::HELP_REQUESTS); + let help_set = helps.lock().unwrap(); + if help_set.contains(&entry_str) { // Already registered by `#[help]`, no duplicate check needed return quote::quote! {}.into(); } // Check for duplicate variant (different struct, same type) let variant_name = entry_type.path.segments.last().unwrap().ident.to_string(); - if let Err(err) = - crate::check_duplicate_variant(&helps, &entry_str, &variant_name, "help", entry_type.span()) - { + let dup_check = crate::check_duplicate_variant( + &help_set, + &entry_str, + &variant_name, + "help", + entry_type.span(), + ); + if let Err(err) = dup_check { return err.into(); } - helps.insert(entry_str); + drop(help_set); + helps.lock().unwrap().insert(entry_str); quote::quote! {}.into() } diff --git a/mingling_macros/src/func/suggest.rs b/mingling_macros/src/func/suggest.rs index 6613a98..c2841d5 100644 --- a/mingling_macros/src/func/suggest.rs +++ b/mingling_macros/src/func/suggest.rs @@ -16,7 +16,7 @@ enum SuggestItem { impl Parse for SuggestInput { fn parse(input: ParseStream) -> syn::Result { let items = Punctuated::parse_terminated(input)?; - Ok(SuggestInput { items }) + Ok(Self { items }) } } @@ -27,15 +27,14 @@ impl Parse for SuggestItem { if input.peek(Token![:]) { let _colon: Token![:] = input.parse()?; let value: Expr = input.parse()?; - Ok(SuggestItem::WithDesc(Box::new((key, value)))) + Ok(Self::WithDesc(Box::new((key, value)))) } else { - Ok(SuggestItem::Simple(key)) + Ok(Self::Simple(key)) } } } -/// 判断表达式是否是一个纯字符串字面量(仅由一对引号包裹) -fn is_pure_lit_str(expr: &Expr) -> bool { +const fn is_pure_lit_str(expr: &Expr) -> bool { matches!(expr, Expr::Lit(lit) if matches!(lit.lit, syn::Lit::Str(_))) } -- cgit