diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-07-14 01:49:39 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-07-14 01:49:39 +0800 |
| commit | 62f6b476284da67efc55483a81b57f99a478702a (patch) | |
| tree | b9cf2376700a7016d3ff76d527598d6b8c4b841a | |
| parent | 5547ebe21f4595c03a965cd068c72b27801b2070 (diff) | |
feat(picker): add `is_empty` method and refactor `if let` chains
Refactor multiple `if let` patterns in macros to use the let-chain
syntax for improved readability
| -rw-r--r-- | mingling_picker/src/picker.rs | 17 | ||||
| -rw-r--r-- | mingling_picker_macros/src/internal_repeat.rs | 50 | ||||
| -rw-r--r-- | mingling_picker_macros/src/req.rs | 2 |
3 files changed, 42 insertions, 27 deletions
diff --git a/mingling_picker/src/picker.rs b/mingling_picker/src/picker.rs index f8d3cb1..01bebc7 100644 --- a/mingling_picker/src/picker.rs +++ b/mingling_picker/src/picker.rs @@ -81,6 +81,23 @@ impl<'a> Picker<'a> { } } + /// Returns `true` if the picker contains no arguments. + /// + /// # Examples + /// + /// ``` + /// use mingling_picker::Picker; + /// + /// let empty: Picker = Picker::from(&[][..]); + /// assert!(empty.is_empty()); + /// + /// let args = Picker::from(&["hello"][..]); + /// assert!(!args.is_empty()); + /// ``` + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + /// Returns an iterator over the arguments, yielding owned `String` values. /// /// # Examples diff --git a/mingling_picker_macros/src/internal_repeat.rs b/mingling_picker_macros/src/internal_repeat.rs index 9feedfd..5832cca 100644 --- a/mingling_picker_macros/src/internal_repeat.rs +++ b/mingling_picker_macros/src/internal_repeat.rs @@ -5,12 +5,11 @@ pub(crate) fn internal_repeat(input: TokenStream) -> TokenStream { let (range_start, range_end, body_start) = parse_range(&tokens); let mut body: Vec<TokenTree> = tokens[body_start..].to_vec(); - if body.len() == 1 { - if let TokenTree::Group(g) = &body[0] { - if g.delimiter() == Delimiter::Brace { - body = g.stream().into_iter().collect(); - } - } + if body.len() == 1 + && let TokenTree::Group(g) = &body[0] + && g.delimiter() == Delimiter::Brace + { + body = g.stream().into_iter().collect(); } let mut result = Vec::new(); @@ -49,10 +48,10 @@ fn parse_range(tokens: &[TokenTree]) -> (usize, usize, usize) { let after_dd = &before[dd + 2..]; // Check for `..=` (inclusive range) - let (inclusive, end_tokens) = if after_dd.first().map_or( - false, - |t| matches!(t, TokenTree::Punct(p) if p.as_char() == '='), - ) { + let (inclusive, end_tokens) = if after_dd + .first() + .is_some_and(|t| matches!(t, TokenTree::Punct(p) if p.as_char() == '=')) + { (true, &after_dd[1..]) } else { (false, after_dd) @@ -109,15 +108,14 @@ fn expand_body(tokens: &[TokenTree], outer: usize) -> Vec<TokenTree> { // Identifier followed by `$` → combined ident + number if let TokenTree::Ident(id) = &tokens[i] { - if i + 1 < tokens.len() { - if let TokenTree::Punct(p) = &tokens[i + 1] { - if p.as_char() == '$' { - let name = format!("{}{outer}", id.to_string()); - out.push(TokenTree::Ident(Ident::new(&name, id.span()))); - i += 2; - continue; - } - } + if i + 1 < tokens.len() + && let TokenTree::Punct(p) = &tokens[i + 1] + && p.as_char() == '$' + { + let name = format!("{}{outer}", id); + out.push(TokenTree::Ident(Ident::new(&name, id.span()))); + i += 2; + continue; } out.push(tokens[i].clone()); i += 1; @@ -189,13 +187,13 @@ fn try_expand_paren_group( let mut out = Vec::new(); for n in 1..=outer { - if n > 1 { - if let Some(s) = sep { - out.push(TokenTree::Punct(proc_macro::Punct::new( - s.chars().next().unwrap(), - proc_macro::Spacing::Alone, - ))); - } + if n > 1 + && let Some(s) = sep + { + out.push(TokenTree::Punct(proc_macro::Punct::new( + s.chars().next().unwrap(), + proc_macro::Spacing::Alone, + ))); } out.extend(expand_body(&inner, n)); } diff --git a/mingling_picker_macros/src/req.rs b/mingling_picker_macros/src/req.rs index 7e652fa..1c3bb99 100644 --- a/mingling_picker_macros/src/req.rs +++ b/mingling_picker_macros/src/req.rs @@ -102,7 +102,7 @@ pub(crate) fn req(input: TokenStream) -> TokenStream { let lit = proc_macro2::Literal::character(c); quote! { .with_short(#lit) } }) - .unwrap_or(TS2::new()); + .unwrap_or_default(); // .with_positional(...) let pos = !is_named; |
