From 3dc3d9d18fba0396afa73644865c687b2e64815e Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Wed, 4 Mar 2020 01:03:44 +0800 Subject: Fix a bug for single dollar sign macro --- crates/ra_mbe/src/parser.rs | 6 +++++- crates/ra_mbe/src/tests.rs | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'crates/ra_mbe/src') diff --git a/crates/ra_mbe/src/parser.rs b/crates/ra_mbe/src/parser.rs index 10a6f300a..034150432 100644 --- a/crates/ra_mbe/src/parser.rs +++ b/crates/ra_mbe/src/parser.rs @@ -90,7 +90,11 @@ fn next_op<'a>( ) -> Result, ExpandError> { let res = match first { tt::TokenTree::Leaf(tt::Leaf::Punct(tt::Punct { char: '$', .. })) => { - let second = src.next().ok_or_else(|| err!("bad var 1"))?; + // Note that the '$' itself is a valid token inside macro_rules. + let second = match src.next() { + None => return Ok(Op::TokenTree(first)), + Some(it) => it, + }; match second { tt::TokenTree::Subtree(subtree) => { let (separator, kind) = parse_repeat(src)?; diff --git a/crates/ra_mbe/src/tests.rs b/crates/ra_mbe/src/tests.rs index cb228702f..1dba82915 100644 --- a/crates/ra_mbe/src/tests.rs +++ b/crates/ra_mbe/src/tests.rs @@ -23,6 +23,7 @@ mod rule_parsing { check("($($i:ident)*) => ($_)"); check("($($true:ident)*) => ($true)"); check("($($false:ident)*) => ($false)"); + check("($) => ($)"); } #[test] -- cgit v1.2.3