4 use proc_macro2
::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree}
;
6 use std
::iter
::FromIterator
;
7 use syn
::{Expr, ExprRange}
;
10 fn test_expr_parse() {
11 let tokens
= quote
!(..100u32);
12 snapshot
!(tokens
as Expr
, @r
###"
21 let tokens
= quote
!(..100u32);
22 snapshot
!(tokens
as ExprRange
, @r
###"
34 // Must not parse as Expr::Field.
35 let tokens
= quote
!(fut
.await
);
37 snapshot
!(tokens
as Expr
, @r
###"
55 fn test_tuple_multi_index() {
64 snapshot
!(input
as Expr
, @r
###"
77 member: Unnamed(Index {
81 member: Unnamed(Index {
94 quote
!(tuple
. 0 . 0),
96 snapshot
!(tokens
as Expr
, @r
###"
109 member: Unnamed(Index {
113 member: Unnamed(Index {
122 fn test_macro_variable_func() {
123 // mimics the token stream corresponding to `$fn()`
124 let tokens
= TokenStream
::from_iter(vec
![
125 TokenTree
::Group(Group
::new(Delimiter
::None
, quote
! { f }
)),
126 TokenTree
::Group(Group
::new(Delimiter
::Parenthesis
, TokenStream
::new())),
129 snapshot
!(tokens
as Expr
, @r
###"
146 let tokens
= TokenStream
::from_iter(vec
![
147 TokenTree
::Punct(Punct
::new('
#', Spacing::Alone)),
148 TokenTree
::Group(Group
::new(Delimiter
::Bracket
, quote
! { outside }
)),
149 TokenTree
::Group(Group
::new(Delimiter
::None
, quote
! { #[inside] f }
)),
150 TokenTree
::Group(Group
::new(Delimiter
::Parenthesis
, TokenStream
::new())),
153 snapshot
!(tokens
as Expr
, @r
###"
166 tokens: TokenStream(``),
182 tokens: TokenStream(``),
200 fn test_macro_variable_macro() {
201 // mimics the token stream corresponding to `$macro!()`
202 let tokens
= TokenStream
::from_iter(vec
![
203 TokenTree
::Group(Group
::new(Delimiter
::None
, quote
! { m }
)),
204 TokenTree
::Punct(Punct
::new('
!'
, Spacing
::Alone
)),
205 TokenTree
::Group(Group
::new(Delimiter
::Parenthesis
, TokenStream
::new())),
208 snapshot
!(tokens
as Expr
, @r
###"
220 tokens: TokenStream(``),
227 fn test_macro_variable_struct() {
228 // mimics the token stream corresponding to `$struct {}`
229 let tokens
= TokenStream
::from_iter(vec
![
230 TokenTree
::Group(Group
::new(Delimiter
::None
, quote
! { S }
)),
231 TokenTree
::Group(Group
::new(Delimiter
::Brace
, TokenStream
::new())),
234 snapshot
!(tokens
as Expr
, @r
###"
249 fn test_macro_variable_match_arm() {
250 // mimics the token stream corresponding to `match v { _ => $expr }`
251 let tokens
= TokenStream
::from_iter(vec
![
252 TokenTree
::Ident(Ident
::new("match", Span
::call_site())),
253 TokenTree
::Ident(Ident
::new("v", Span
::call_site())),
254 TokenTree
::Group(Group
::new(
256 TokenStream
::from_iter(vec
![
257 TokenTree
::Punct(Punct
::new('_'
, Spacing
::Alone
)),
258 TokenTree
::Punct(Punct
::new('
='
, Spacing
::Joint
)),
259 TokenTree
::Punct(Punct
::new('
>'
, Spacing
::Alone
)),
260 TokenTree
::Group(Group
::new(Delimiter
::None
, quote
! { #[a] () }
)),
265 snapshot
!(tokens
as Expr
, @r
###"
293 tokens: TokenStream(``),