From 59b6cc780b4be6b3706099410ac56f348df46b71 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Fri, 19 Apr 2019 19:41:59 +0800 Subject: add tt matcher --- crates/ra_mbe/src/lib.rs | 24 ++++++++++++++++++++++++ crates/ra_mbe/src/mbe_expander.rs | 4 ++++ 2 files changed, 28 insertions(+) (limited to 'crates/ra_mbe/src') diff --git a/crates/ra_mbe/src/lib.rs b/crates/ra_mbe/src/lib.rs index d7462d09d..ae8a62036 100644 --- a/crates/ra_mbe/src/lib.rs +++ b/crates/ra_mbe/src/lib.rs @@ -762,4 +762,28 @@ MACRO_ITEMS@[0; 40) r#"# [cfg (target_os = "windows")] fn bar () {}"#, ); } + + #[test] + fn test_tt_block() { + let rules = create_rules( + r#" + macro_rules! foo { + ($ i:tt) => { fn foo() $ i } + } +"#, + ); + assert_expansion(&rules, r#"foo! { { 1; } }"#, r#"fn foo () {1 ;}"#); + } + + #[test] + fn test_tt_group() { + let rules = create_rules( + r#" + macro_rules! foo { + ($($ i:tt)*) => { $($ i)* } + } +"#, + ); + assert_expansion(&rules, r#"foo! { fn foo() {} }"#, r#"fn foo () {}"#); + } } diff --git a/crates/ra_mbe/src/mbe_expander.rs b/crates/ra_mbe/src/mbe_expander.rs index 6ada580cc..4261dee8d 100644 --- a/crates/ra_mbe/src/mbe_expander.rs +++ b/crates/ra_mbe/src/mbe_expander.rs @@ -171,6 +171,10 @@ fn match_lhs(pattern: &crate::Subtree, input: &mut TtCursor) -> Result { + let token = input.eat().ok_or(ExpandError::UnexpectedToken)?.clone(); + res.inner.insert(text.clone(), Binding::Simple(token.into())); + } "item" => { let item = input.eat_item().ok_or(ExpandError::UnexpectedToken)?.clone(); -- cgit v1.2.3