1 #![allow(clippy::non_ascii_literal)]
2
3 #[macro_use]
4 mod macros;
5
6 use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
7 use std::iter::FromIterator;
8 use syn::Stmt;
9
10 #[test]
test_raw_operator()11 fn test_raw_operator() {
12 let stmt = syn::parse_str::<Stmt>("let _ = &raw const x;").unwrap();
13
14 snapshot!(stmt, @r###"
15 Local(Local {
16 pat: Pat::Wild,
17 init: Some(Verbatim(`& raw const x`)),
18 })
19 "###);
20 }
21
22 #[test]
test_raw_variable()23 fn test_raw_variable() {
24 let stmt = syn::parse_str::<Stmt>("let _ = &raw;").unwrap();
25
26 snapshot!(stmt, @r###"
27 Local(Local {
28 pat: Pat::Wild,
29 init: Some(Expr::Reference {
30 expr: Expr::Path {
31 path: Path {
32 segments: [
33 PathSegment {
34 ident: "raw",
35 arguments: None,
36 },
37 ],
38 },
39 },
40 }),
41 })
42 "###);
43 }
44
45 #[test]
test_raw_invalid()46 fn test_raw_invalid() {
47 assert!(syn::parse_str::<Stmt>("let _ = &raw x;").is_err());
48 }
49
50 #[test]
test_none_group()51 fn test_none_group() {
52 // <Ø async fn f() {} Ø>
53 let tokens = TokenStream::from_iter(vec![TokenTree::Group(Group::new(
54 Delimiter::None,
55 TokenStream::from_iter(vec![
56 TokenTree::Ident(Ident::new("async", Span::call_site())),
57 TokenTree::Ident(Ident::new("fn", Span::call_site())),
58 TokenTree::Ident(Ident::new("f", Span::call_site())),
59 TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
60 TokenTree::Group(Group::new(Delimiter::Brace, TokenStream::new())),
61 ]),
62 ))]);
63
64 snapshot!(tokens as Stmt, @r###"
65 Item(Item::Fn {
66 vis: Inherited,
67 sig: Signature {
68 asyncness: Some,
69 ident: "f",
70 generics: Generics,
71 output: Default,
72 },
73 block: Block,
74 })
75 "###);
76 }
77