tstr_proc_macros/
utils.rs
1use std::iter::{self, FromIterator, Once};
2
3#[allow(unused_imports)]
4use crate::used_proc_macro::{
5 Delimiter, Group, Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree,
6};
7
8pub(crate) fn ident_token(ident: &str, span: Span) -> Once<TokenTree> {
9 let ident = Ident::new(ident, span);
10 let tt = TokenTree::from(ident);
11 iter::once(tt)
12}
13
14#[cfg(all(feature = "min_const_generics", not(feature = "const_generics")))]
15pub(crate) fn char_token(c: char, span: Span) -> Once<TokenTree> {
16 let mut lit = Literal::character(c);
17 lit.set_span(span);
18 let tt = TokenTree::from(lit);
19 iter::once(tt)
20}
21
22pub(crate) fn punct_token(token: char, span: Span) -> Once<TokenTree> {
23 let mut token = Punct::new(token, Spacing::Alone);
24 token.set_span(span);
25 let tt = TokenTree::from(token);
26 iter::once(tt)
27}
28pub(crate) fn colon2_token(span: Span) -> TokenStream {
29 let mut token = Punct::new(':', Spacing::Joint);
30 token.set_span(span);
31 TokenStream::from_iter(vec![TokenTree::from(token.clone()), TokenTree::from(token)])
32}
33
34pub(crate) fn paren<F>(span: Span, f: F) -> TokenTree
35where
36 F: FnOnce(&mut TokenStream),
37{
38 let mut ts = TokenStream::new();
39 f(&mut ts);
40 let mut tt = Group::new(Delimiter::Parenthesis, ts);
41 tt.set_span(span);
42 TokenTree::from(tt)
43}