1macro_rules! should_parse {
2 ($name:ident, { $($in:tt)* }) => {
3 #[test]
4 fn $name() {
5 // Make sure we can parse the file!
6 syn::parse_file(stringify!($($in)*)).unwrap();
7 }
8 }
9}
10
11should_parse!(generic_associated_type, {
12 impl Foo {
13 type Item = &'a i32;
14 fn foo<'a>(&'a self) -> Self::Item<'a> {}
15 }
16});
17
18#[rustfmt::skip]
19should_parse!(const_generics_use, {
20 type X = Foo<5>;
21 type Y = Foo<"foo">;
22 type Z = Foo<X>;
23 type W = Foo<{ X + 10 }>;
24});
25
26should_parse!(trailing_plus_type, {
27 type A = Box<Foo>;
28 type A = Box<Foo + 'a>;
29 type A = Box<'a + Foo>;
30});
31
32should_parse!(generic_associated_type_where, {
33 trait Foo {
34 type Item;
35 fn foo<T>(&self, t: T) -> Self::Item<T>;
36 }
37});
38
39should_parse!(match_with_block_expr, {
40 fn main() {
41 match false {
42 _ => {}.a(),
43 }
44 }
45});
46