Expand description
Some common simple tool for proc-macro impl
There are many methods available for chain calls
What can do:
- Quickly create processors in the style of #foo(...)
- Common methods,
such as add,split_puncts,is_ident,as_ident,into_punct,is_joint,as_punct_charandset_spanedetc
- span,- set_spantraits
- ParseIter, can peek n, and peek jointed puncts
§Examples
extern 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)
}Macros§
Structs§
- ParseIter 
- Peek niterator adapter
Enums§
Traits§
- GetSpan
- General implementations of TokenTree::span
- GroupExt 
- ParseIter Ext 
- Create ParseIter
- PunctExt 
- PunctsExt 
- SetSpan
- General implementations of TokenTree::set_span
- SpacingExt 
- StrExt
- StreamIter Ext 
- Suffixed
- Create suffixed Literal
- TokenStream Ext 
- TokenTree Ext 
- Unsuffixed
- Create unsuffixed Literal
- WalkExt
- Remake each subtree methods
Functions§
- brace
- Like Group::new(Delimiter::Brace, iter)
- bracket
- Like Group::new(Delimiter::Bracket, iter)
- err
- Make compile_error! {"..."}
- none
- Like Group::new(Delimiter::None, iter)
- paren
- Like Group::new(Delimiter::Parenthesis, iter)
- pfunc
- Call fon#name(...)#name[...]etc, excludeDelimiter::None
- pfunc_lossless 
- Like pfunc, but it’s lossless when no changes are made
- puncts
- Make puncts, spacingis last punct spacing
- puncts_spanned 
- Make puncts, spacingis last punct spacing
- rerr
- Like err(), but useResult
- span_setter 
- Generate a function, set input TokenTreespan
- stream
- Create TokenStreamfromIntoIterator<Item = TokenTree>
- streams
- Create TokenStreamfromIntoIterator<Item = TokenStream>
- try_pfunc 
- Call fon#name(...)#name[...]etc, excludeDelimiter::None
- try_pfunc_ lossless 
- Like try_pfunc, but it’s lossless when no changes are made