about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-01-03 13:28:56 +0000
committerGitHub <noreply@github.com>2022-01-03 13:28:56 +0000
commit120d76e0a3bd72dc70186830e0a1ca51cee5ac8b (patch)
treed0f990ec3c0c09a8168fe08d957875f9a7c45aee
parent29fc022d851bb7b11e30acc3df6d3d425b104821 (diff)
parent303814189aabefd963c838d86dc922a9828df6d0 (diff)
downloadrust-120d76e0a3bd72dc70186830e0a1ca51cee5ac8b.tar.gz
rust-120d76e0a3bd72dc70186830e0a1ca51cee5ac8b.zip
Merge #11179
11179: minor: simplify mbe matcher r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
-rw-r--r--crates/mbe/src/expander/matcher.rs19
-rw-r--r--crates/mbe/src/tt_iter.rs5
2 files changed, 9 insertions, 15 deletions
diff --git a/crates/mbe/src/expander/matcher.rs b/crates/mbe/src/expander/matcher.rs
index 910724411d4..fb785665b97 100644
--- a/crates/mbe/src/expander/matcher.rs
+++ b/crates/mbe/src/expander/matcher.rs
@@ -697,6 +697,7 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
         "block" => parser::PrefixEntryPoint::Block,
         "meta" => parser::PrefixEntryPoint::MetaItem,
         "item" => parser::PrefixEntryPoint::Item,
+        "vis" => parser::PrefixEntryPoint::Vis,
         "expr" => {
             return input
                 .expect_fragment(parser::PrefixEntryPoint::Expr)
@@ -706,12 +707,10 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
             let tt_result = match kind {
                 "ident" => input
                     .expect_ident()
-                    .map(|ident| Some(tt::Leaf::from(ident.clone()).into()))
+                    .map(|ident| tt::Leaf::from(ident.clone()).into())
                     .map_err(|()| err!("expected ident")),
-                "tt" => input.expect_tt().map(Some).map_err(|()| err!()),
-                "lifetime" => {
-                    input.expect_lifetime().map(Some).map_err(|()| err!("expected lifetime"))
-                }
+                "tt" => input.expect_tt().map_err(|()| err!()),
+                "lifetime" => input.expect_lifetime().map_err(|()| err!("expected lifetime")),
                 "literal" => {
                     let neg = input.eat_char('-');
                     input
@@ -719,20 +718,18 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
                         .map(|literal| {
                             let lit = literal.clone();
                             match neg {
-                                None => Some(lit.into()),
-                                Some(neg) => Some(tt::TokenTree::Subtree(tt::Subtree {
+                                None => lit.into(),
+                                Some(neg) => tt::TokenTree::Subtree(tt::Subtree {
                                     delimiter: None,
                                     token_trees: vec![neg, lit.into()],
-                                })),
+                                }),
                             }
                         })
                         .map_err(|()| err!())
                 }
-                // `vis` is optional
-                "vis" => Ok(input.expect_fragment(parser::PrefixEntryPoint::Vis).value),
                 _ => Err(ExpandError::UnexpectedToken),
             };
-            return tt_result.map(|it| it.map(Fragment::Tokens)).into();
+            return tt_result.map(|it| Some(Fragment::Tokens(it))).into();
         }
     };
     input.expect_fragment(fragment).map(|it| it.map(Fragment::Tokens))
diff --git a/crates/mbe/src/tt_iter.rs b/crates/mbe/src/tt_iter.rs
index 172916c5a14..9d2b1da9abd 100644
--- a/crates/mbe/src/tt_iter.rs
+++ b/crates/mbe/src/tt_iter.rs
@@ -114,7 +114,7 @@ impl<'a> TtIter<'a> {
             }
         }
 
-        let mut err = if !cursor.is_root() || error {
+        let err = if error || !cursor.is_root() {
             Some(err!("expected {:?}", entry_point))
         } else {
             None
@@ -132,9 +132,6 @@ impl<'a> TtIter<'a> {
             }
         }
         self.inner = self.inner.as_slice()[res.len()..].iter();
-        if res.is_empty() && err.is_none() {
-            err = Some(err!("no tokens consumed"));
-        }
         let res = match res.len() {
             1 => Some(res[0].cloned()),
             0 => None,