mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 12:33:33 +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,
|
||||
"vis" => parser::PrefixEntryPoint::Vis,
|
||||
"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
|
||||
.expect_fragment(parser::PrefixEntryPoint::Expr)
|
||||
.map(|tt| tt.map(Fragment::Expr))
|
||||
.map(|tt| tt.map(Fragment::Expr));
|
||||
}
|
||||
_ => {
|
||||
let tt_result = match kind {
|
||||
|
|
Loading…
Reference in a new issue