From e944fd059de93f305d6a8c40cfac5ebe84548771 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Thu, 18 Apr 2019 10:21:36 +0800 Subject: Add `item` matcher in mbe --- crates/ra_mbe/src/lib.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'crates/ra_mbe/src/lib.rs') diff --git a/crates/ra_mbe/src/lib.rs b/crates/ra_mbe/src/lib.rs index a1f438906..2f47e32d3 100644 --- a/crates/ra_mbe/src/lib.rs +++ b/crates/ra_mbe/src/lib.rs @@ -597,4 +597,48 @@ SOURCE_FILE@[0; 40) assert_expansion(&rules, "foo! { 2 }", "fn bar () {2 ;}"); assert_expansion(&rules, "foo! { let a = 0 }", "fn bar () {let a = 0 ;}"); } + + #[test] + fn test_single_item() { + let rules = create_rules( + r#" + macro_rules! foo { + ($ i:item) => ( + $ i + ) + } +"#, + ); + assert_expansion(&rules, "foo! {mod c {}}", "mod c {}"); + } + + #[test] + fn test_all_items() { + let rules = create_rules( + r#" + macro_rules! foo { + ($ ($ i:item)*) => ($ ( + $ i + )*) + } +"#, + ); + assert_expansion(&rules, r#" + foo! { + extern crate a; + mod b; + mod c {} + use d; + const E: i32 = 0; + static F: i32 = 0; + impl G {} + struct H; + enum I { Foo } + trait J {} + fn h() {} + extern {} + type T = u8; + } +"#, r#"extern crate a ; mod b ; mod c {} use d ; const E : i32 = 0 ; static F : i32 = 0 ; impl G {} struct H ; enum I {Foo} trait J {} fn h () {} extern {} type T = u8 ;"#); + } } -- cgit v1.2.3