aboutsummaryrefslogtreecommitdiff
path: root/arg_picker_macros
diff options
context:
space:
mode:
Diffstat (limited to 'arg_picker_macros')
-rw-r--r--arg_picker_macros/Cargo.toml2
-rw-r--r--arg_picker_macros/src/arg.rs11
-rw-r--r--arg_picker_macros/src/lib.rs1
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;