| Crates.io | proc-macro-tool |
| lib.rs | proc-macro-tool |
| version | 0.8.41 |
| created_at | 2025-05-06 07:03:18.083498+00 |
| updated_at | 2025-09-21 04:21:30.439193+00 |
| description | Some common simple tool for proc-macro impl |
| homepage | |
| repository | https://github.com/A4-Tacks/proc-macro-tool-rs |
| max_upload_size | |
| id | 1661950 |
| size | 49,316 |
Some common simple tool for proc-macro impl
There are many methods available for chain calls
What can do:
#foo(...)add, split_puncts, is_ident, as_ident, into_punct, is_joint,
as_punct_char and set_spaned etcspan, set_span traitsParseIter, can peek n, and peek jointed punctsextern crate proc_macro;
use proc_macro::*;;
use proc_macro_tool::*;
fn index_tt<I>(mut tt: TokenTree, iter: &mut ParseIter<I>) -> Result<TokenTree, TokenStream>
where I: Iterator<Item = TokenTree>,
{
while let Some((mut span, mut param)) = iter
.next_if(|tt| tt.is_delimiter_bracket())
.map(|tt| tt.into_group().unwrap())
.map(|g| (g.span_close(), g.stream().into_iter()))
{
let i = param.next()
.ok_or_else(|| err!("unexpected token, expected literal", span))?
.span_as(&mut span)
.into_literal()
.map_err(|_| err!("unexpected token, expected literal", span))?
.to_string()
.parse()
.map_err(|e| err!(@("parse number {e}"), span))?;
let g = tt.into_group()
.map_err(|t| err!(@("cannot index {t}, e.g [...]"), span))?;
tt = g.stream().into_iter().nth(i)
.ok_or_else(|| err!(@("index {i} out of range, of {}", g), span))?
};
Ok(tt)
}