diff options
Diffstat (limited to 'arg_picker_macros')
| -rw-r--r-- | arg_picker_macros/Cargo.toml | 2 | ||||
| -rw-r--r-- | arg_picker_macros/src/arg.rs | 11 | ||||
| -rw-r--r-- | arg_picker_macros/src/lib.rs | 1 |
3 files changed, 12 insertions, 2 deletions
diff --git a/arg_picker_macros/Cargo.toml b/arg_picker_macros/Cargo.toml index c83cb9e..c329274 100644 --- a/arg_picker_macros/Cargo.toml +++ b/arg_picker_macros/Cargo.toml @@ -3,7 +3,7 @@ name = "arg-picker-macros" version = "0.1.0" edition = "2024" license = "MIT OR Apache-2.0" -repository = "https://github.com/mingling-rs/mingling/tree/main/arg-picker" +repository = "https://github.com/mingling-rs/mingling/tree/main/arg_picker" authors = ["Weicao-CatilGrass"] readme = "README.md" description = "Mingling's lightweight argument parser macros" diff --git a/arg_picker_macros/src/arg.rs b/arg_picker_macros/src/arg.rs index 55860c4..20731b1 100644 --- a/arg_picker_macros/src/arg.rs +++ b/arg_picker_macros/src/arg.rs @@ -119,6 +119,7 @@ pub(crate) fn arg(input: TokenStream) -> TokenStream { fn split_at_commas(tokens: &[TokenTree]) -> Vec<Vec<TokenTree>> { let mut result = vec![Vec::new()]; let mut depth = 0u32; + let mut angle_depth = 0u32; for t in tokens { match t { TokenTree::Group(_g) => { @@ -126,7 +127,15 @@ fn split_at_commas(tokens: &[TokenTree]) -> Vec<Vec<TokenTree>> { result.last_mut().unwrap().push(t.clone()); depth -= 1; } - TokenTree::Punct(p) if p.as_char() == ',' && depth == 0 => { + TokenTree::Punct(p) if p.as_char() == '<' => { + angle_depth += 1; + result.last_mut().unwrap().push(t.clone()); + } + TokenTree::Punct(p) if p.as_char() == '>' && angle_depth > 0 => { + angle_depth -= 1; + result.last_mut().unwrap().push(t.clone()); + } + TokenTree::Punct(p) if p.as_char() == ',' && depth == 0 && angle_depth == 0 => { result.push(Vec::new()); } _ => result.last_mut().unwrap().push(t.clone()), diff --git a/arg_picker_macros/src/lib.rs b/arg_picker_macros/src/lib.rs index 18cce84..0132e66 100644 --- a/arg_picker_macros/src/lib.rs +++ b/arg_picker_macros/src/lib.rs @@ -1,4 +1,5 @@ #![doc = include_str!("../README.md")] +#![deny(missing_docs)] use proc_macro::TokenStream; |
