Add required array element constraints
This commit is contained in:
@@ -32,6 +32,7 @@ pub enum TokenKind {
|
||||
Semicolon,
|
||||
Comma,
|
||||
Dot,
|
||||
Ellipsis,
|
||||
Colon,
|
||||
Equal,
|
||||
EqualEqual,
|
||||
@@ -141,7 +142,18 @@ impl<'a> Lexer<'a> {
|
||||
}
|
||||
b'.' => {
|
||||
self.pos += 1;
|
||||
TokenKind::Dot
|
||||
if self.consume(b'.') {
|
||||
if self.consume(b'.') {
|
||||
TokenKind::Ellipsis
|
||||
} else {
|
||||
return Err(Diagnostic::syntax(
|
||||
self.span(start, self.pos),
|
||||
"expected third '.' in ellipsis",
|
||||
));
|
||||
}
|
||||
} else {
|
||||
TokenKind::Dot
|
||||
}
|
||||
}
|
||||
b':' => {
|
||||
self.pos += 1;
|
||||
@@ -432,4 +444,13 @@ mod tests {
|
||||
assert_eq!(tokens[3].kind, TokenKind::Amp);
|
||||
assert_eq!(tokens[4].kind, TokenKind::Gte);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tokenizes_array_constraint_ellipsis() {
|
||||
let tokens = Lexer::new("[...String]").tokenize().unwrap();
|
||||
assert_eq!(tokens[0].kind, TokenKind::LBracket);
|
||||
assert_eq!(tokens[1].kind, TokenKind::Ellipsis);
|
||||
assert!(matches!(tokens[2].kind, TokenKind::Ident(_)));
|
||||
assert_eq!(tokens[3].kind, TokenKind::RBracket);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user