Parenthesized imports (#4869)

Co-authored-by: Laurenz <laurmaedje@gmail.com>
This commit is contained in:
Sébastien d'Herbais de Thun 2024-09-02 15:27:33 +02:00 committed by GitHub
parent ecad396cc8
commit 1997db00f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 59 additions and 2 deletions

View File

@ -989,9 +989,22 @@ fn module_import(p: &mut Parser) {
// imported at the same time.
p.expect(SyntaxKind::Ident);
}
if p.eat_if(SyntaxKind::Colon) && !p.eat_if(SyntaxKind::Star) {
import_items(p);
if p.eat_if(SyntaxKind::Colon) {
if p.at(SyntaxKind::LeftParen) {
let m1 = p.marker();
p.enter_newline_mode(NewlineMode::Continue);
p.assert(SyntaxKind::LeftParen);
import_items(p);
p.expect_closing_delimiter(m1, SyntaxKind::RightParen);
p.exit_newline_mode();
} else if !p.eat_if(SyntaxKind::Star) {
import_items(p);
}
}
p.wrap(m, SyntaxKind::ModuleImport);
}
@ -1021,6 +1034,7 @@ fn import_items(p: &mut Parser) {
p.expect(SyntaxKind::Comma);
}
}
p.wrap(m, SyntaxKind::ImportItems);
}

View File

@ -55,6 +55,49 @@
#test(name, "Klaus")
#test(othername, "Klaus")
--- import-items-parenthesized ---
#import "module.typ": ()
#import "module.typ": (a)
#import "module.typ": (a, b)
#import "module.typ": (a, b, c, d)
#test(a, none)
#test(b, 1)
#test(c, 2)
#test(d, 3)
--- import-items-parenthesized-multiline ---
#import "module.typ": (
a
)
#import "module.typ": (
a, b as e,
c,
d,
)
#test(a, none)
#test(e, 1)
#test(c, 2)
#test(d, 3)
--- import-items-parenthesized-invalid ---
// Error: 23-24 unclosed delimiter
#import "module.typ": (a, b, c
--- import-items-parenthesized-invalid-2 ---
// Error: 23-24 unclosed delimiter
#import "module.typ": (
--- import-items-parenthesized-invalid-3 ---
// Error: 23-24 unclosed delimiter
#import "module.typ": (
a, b,
c,
--- import-from-function-scope ---
// Test importing from function scopes.