mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +00:00
Do not consider _
to be an expression for macro_rules!
This commit is contained in:
parent
d9f0731bd2
commit
10d30be331
1 changed files with 11 additions and 1 deletions
|
@ -690,9 +690,19 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
|
||||||
"item" => parser::PrefixEntryPoint::Item,
|
"item" => parser::PrefixEntryPoint::Item,
|
||||||
"vis" => parser::PrefixEntryPoint::Vis,
|
"vis" => parser::PrefixEntryPoint::Vis,
|
||||||
"expr" => {
|
"expr" => {
|
||||||
|
// `expr` should not match underscores.
|
||||||
|
// HACK: Macro expansion should not be done using "rollback and try another alternative".
|
||||||
|
// rustc [explicitly checks the next token][0].
|
||||||
|
// [0]: https://github.com/rust-lang/rust/blob/f0c4da499/compiler/rustc_expand/src/mbe/macro_parser.rs#L576
|
||||||
|
match input.peek_n(0) {
|
||||||
|
Some(tt::TokenTree::Leaf(tt::Leaf::Ident(it))) if it.text == "_" => {
|
||||||
|
return ExpandResult::only_err(ExpandError::NoMatchingRule)
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
};
|
||||||
return input
|
return input
|
||||||
.expect_fragment(parser::PrefixEntryPoint::Expr)
|
.expect_fragment(parser::PrefixEntryPoint::Expr)
|
||||||
.map(|tt| tt.map(Fragment::Expr))
|
.map(|tt| tt.map(Fragment::Expr));
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
let tt_result = match kind {
|
let tt_result = match kind {
|
||||||
|
|
Loading…
Reference in a new issue