summaryrefslogtreecommitdiff
path: root/src/syntax/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/syntax/parser.rs')
-rw-r--r--src/syntax/parser.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/syntax/parser.rs b/src/syntax/parser.rs
index ab73479e..1198774b 100644
--- a/src/syntax/parser.rs
+++ b/src/syntax/parser.rs
@@ -850,12 +850,19 @@ fn item(p: &mut Parser, keyed: bool) -> SyntaxKind {
return SyntaxKind::Spread;
}
- if !p.eat_if(SyntaxKind::Underscore) {
- code_expr_or_pattern(p);
- } else {
- return SyntaxKind::Underscore;
+ if p.at(SyntaxKind::Underscore) {
+ // This is a temporary workaround to fix `v.map(_ => {})`.
+ let mut lexer = p.lexer.clone();
+ let next =
+ std::iter::from_fn(|| Some(lexer.next())).find(|kind| !kind.is_trivia());
+ if next != Some(SyntaxKind::Arrow) {
+ p.eat();
+ return SyntaxKind::Underscore;
+ }
}
+ code_expr_or_pattern(p);
+
if !p.eat_if(SyntaxKind::Colon) {
return SyntaxKind::Int;
}