mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge #11179
11179: minor: simplify mbe matcher r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
120d76e0a3
@ -697,6 +697,7 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
|
|||||||
"block" => parser::PrefixEntryPoint::Block,
|
"block" => parser::PrefixEntryPoint::Block,
|
||||||
"meta" => parser::PrefixEntryPoint::MetaItem,
|
"meta" => parser::PrefixEntryPoint::MetaItem,
|
||||||
"item" => parser::PrefixEntryPoint::Item,
|
"item" => parser::PrefixEntryPoint::Item,
|
||||||
|
"vis" => parser::PrefixEntryPoint::Vis,
|
||||||
"expr" => {
|
"expr" => {
|
||||||
return input
|
return input
|
||||||
.expect_fragment(parser::PrefixEntryPoint::Expr)
|
.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 {
|
let tt_result = match kind {
|
||||||
"ident" => input
|
"ident" => input
|
||||||
.expect_ident()
|
.expect_ident()
|
||||||
.map(|ident| Some(tt::Leaf::from(ident.clone()).into()))
|
.map(|ident| tt::Leaf::from(ident.clone()).into())
|
||||||
.map_err(|()| err!("expected ident")),
|
.map_err(|()| err!("expected ident")),
|
||||||
"tt" => input.expect_tt().map(Some).map_err(|()| err!()),
|
"tt" => input.expect_tt().map_err(|()| err!()),
|
||||||
"lifetime" => {
|
"lifetime" => input.expect_lifetime().map_err(|()| err!("expected lifetime")),
|
||||||
input.expect_lifetime().map(Some).map_err(|()| err!("expected lifetime"))
|
|
||||||
}
|
|
||||||
"literal" => {
|
"literal" => {
|
||||||
let neg = input.eat_char('-');
|
let neg = input.eat_char('-');
|
||||||
input
|
input
|
||||||
@ -719,20 +718,18 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
|
|||||||
.map(|literal| {
|
.map(|literal| {
|
||||||
let lit = literal.clone();
|
let lit = literal.clone();
|
||||||
match neg {
|
match neg {
|
||||||
None => Some(lit.into()),
|
None => lit.into(),
|
||||||
Some(neg) => Some(tt::TokenTree::Subtree(tt::Subtree {
|
Some(neg) => tt::TokenTree::Subtree(tt::Subtree {
|
||||||
delimiter: None,
|
delimiter: None,
|
||||||
token_trees: vec![neg, lit.into()],
|
token_trees: vec![neg, lit.into()],
|
||||||
})),
|
}),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.map_err(|()| err!())
|
.map_err(|()| err!())
|
||||||
}
|
}
|
||||||
// `vis` is optional
|
|
||||||
"vis" => Ok(input.expect_fragment(parser::PrefixEntryPoint::Vis).value),
|
|
||||||
_ => Err(ExpandError::UnexpectedToken),
|
_ => 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))
|
input.expect_fragment(fragment).map(|it| it.map(Fragment::Tokens))
|
||||||
|
@ -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))
|
Some(err!("expected {:?}", entry_point))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
@ -132,9 +132,6 @@ impl<'a> TtIter<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.inner = self.inner.as_slice()[res.len()..].iter();
|
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() {
|
let res = match res.len() {
|
||||||
1 => Some(res[0].cloned()),
|
1 => Some(res[0].cloned()),
|
||||||
0 => None,
|
0 => None,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user