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_spantraitsParseIter, 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§
- Parse
Iter - Peek
niterator adapter
Enums§
Traits§
- GetSpan
- General implementations of
TokenTree::span - Group
Ext - Parse
Iter Ext - Create
ParseIter - Punct
Ext - Puncts
Ext - SetSpan
- General implementations of
TokenTree::set_span - Spacing
Ext - StrExt
- Stream
Iter Ext - Suffixed
- Create suffixed
Literal - Token
Stream Ext - Token
Tree 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