• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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