@@ -2939,7 +2939,7 @@ impl<'a> Parser<'a> {
2939
2939
Expr :: InList {
2940
2940
expr : Box :: new ( expr) ,
2941
2941
list : if self . dialect . supports_in_empty_list ( ) {
2942
- self . parse_comma_separated0 ( Parser :: parse_expr) ?
2942
+ self . parse_comma_separated0 ( Parser :: parse_expr, self . options . trailing_commas , Token :: RParen ) ?
2943
2943
} else {
2944
2944
self . parse_comma_separated ( Parser :: parse_expr) ?
2945
2945
} ,
@@ -3481,17 +3481,18 @@ impl<'a> Parser<'a> {
3481
3481
}
3482
3482
3483
3483
/// Parse a comma-separated list of 0+ items accepted by `F`
3484
- pub fn parse_comma_separated0 < T , F > ( & mut self , f : F ) -> Result < Vec < T > , ParserError >
3484
+ /// - [trailing_commas]: support trailing_commas or not
3485
+ /// - [end_token]: expected end token for the closure (e.g. [Token::RParen], [Token::RBrace] ...)
3486
+ pub fn parse_comma_separated0 < T , F > ( & mut self , f : F , trailing_commas : bool , end_token : Token ) -> Result < Vec < T > , ParserError >
3485
3487
where
3486
3488
F : FnMut ( & mut Parser < ' a > ) -> Result < T , ParserError > ,
3487
3489
{
3488
- // ()
3489
- if matches ! ( self . peek_token( ) . token, Token :: RParen ) {
3490
+ if self . peek_token ( ) . token == end_token {
3490
3491
return Ok ( vec ! [ ] ) ;
3491
3492
}
3492
- // (,)
3493
- if self . options . trailing_commas
3494
- && matches ! ( self . peek_tokens( ) , [ Token :: Comma , Token :: RParen ] )
3493
+
3494
+ if trailing_commas
3495
+ && self . peek_tokens ( ) == [ Token :: Comma , end_token ]
3495
3496
{
3496
3497
let _ = self . consume_token ( & Token :: Comma ) ;
3497
3498
return Ok ( vec ! [ ] ) ;
@@ -4061,7 +4062,7 @@ impl<'a> Parser<'a> {
4061
4062
} )
4062
4063
} ;
4063
4064
self . expect_token ( & Token :: LParen ) ?;
4064
- let args = self . parse_comma_separated0 ( parse_function_param) ?;
4065
+ let args = self . parse_comma_separated0 ( parse_function_param, self . options . trailing_commas , Token :: RParen ) ?;
4065
4066
self . expect_token ( & Token :: RParen ) ?;
4066
4067
4067
4068
let return_type = if self . parse_keyword ( Keyword :: RETURNS ) {
@@ -10715,7 +10716,7 @@ impl<'a> Parser<'a> {
10715
10716
}
10716
10717
10717
10718
if self . consume_token ( & Token :: LParen ) {
10718
- let interpolations = self . parse_comma_separated0 ( |p| p. parse_interpolation ( ) ) ?;
10719
+ let interpolations = self . parse_comma_separated0 ( |p| p. parse_interpolation ( ) , self . options . trailing_commas , Token :: RParen ) ?;
10719
10720
self . expect_token ( & Token :: RParen ) ?;
10720
10721
// INTERPOLATE () and INTERPOLATE ( ... ) variants
10721
10722
return Ok ( Some ( Interpolate {
0 commit comments