mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +08:00
Syntax error if function name is parenthesized (#3058)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
This commit is contained in:
parent
f57c34a7ce
commit
ad901c2cdb
@ -984,8 +984,7 @@ fn args(p: &mut Parser) {
|
||||
|
||||
enum PatternKind {
|
||||
Ident,
|
||||
Placeholder,
|
||||
Destructuring,
|
||||
Other,
|
||||
}
|
||||
|
||||
fn pattern(p: &mut Parser) -> PatternKind {
|
||||
@ -994,14 +993,12 @@ fn pattern(p: &mut Parser) -> PatternKind {
|
||||
let kind = collection(p, false);
|
||||
validate_pattern_at(p, m, true);
|
||||
|
||||
if kind == SyntaxKind::Parenthesized {
|
||||
PatternKind::Ident
|
||||
} else {
|
||||
if kind != SyntaxKind::Parenthesized {
|
||||
p.wrap(m, SyntaxKind::Destructuring);
|
||||
PatternKind::Destructuring
|
||||
}
|
||||
PatternKind::Other
|
||||
} else if p.eat_if(SyntaxKind::Underscore) {
|
||||
PatternKind::Placeholder
|
||||
PatternKind::Other
|
||||
} else {
|
||||
p.expect(SyntaxKind::Ident);
|
||||
PatternKind::Ident
|
||||
@ -1014,22 +1011,21 @@ fn let_binding(p: &mut Parser) {
|
||||
|
||||
let m2 = p.marker();
|
||||
let mut closure = false;
|
||||
let mut destructuring = false;
|
||||
let mut other = false;
|
||||
match pattern(p) {
|
||||
PatternKind::Ident => {
|
||||
closure = p.directly_at(SyntaxKind::LeftParen);
|
||||
if closure {
|
||||
if p.directly_at(SyntaxKind::LeftParen) {
|
||||
let m3 = p.marker();
|
||||
collection(p, false);
|
||||
validate_params_at(p, m3);
|
||||
p.wrap(m3, SyntaxKind::Params);
|
||||
closure = true;
|
||||
}
|
||||
}
|
||||
PatternKind::Placeholder => {}
|
||||
PatternKind::Destructuring => destructuring = true,
|
||||
PatternKind::Other => other = true,
|
||||
}
|
||||
|
||||
let f = if closure || destructuring { Parser::expect } else { Parser::eat_if };
|
||||
let f = if closure || other { Parser::expect } else { Parser::eat_if };
|
||||
if f(p, SyntaxKind::Eq) {
|
||||
code_expr(p);
|
||||
}
|
||||
|
@ -275,3 +275,10 @@ Three
|
||||
|
||||
// Error: 15 expected expression
|
||||
#let func(x) =
|
||||
---
|
||||
// Error: 12 expected equals sign
|
||||
#let (func)(x)
|
||||
---
|
||||
// Error: 12 expected equals sign
|
||||
// Error: 15-15 expected semicolon or line break
|
||||
#let (func)(x) = 3
|
||||
|
Loading…
x
Reference in New Issue
Block a user