@@ -176,19 +176,27 @@ mod tests {
176
176
function_and_lambda ! {
177
177
test_function_no_args: "def f(): pass" ,
178
178
test_function_pos_args: "def f(a, b, c): pass" ,
179
- test_function_pos_args_with_defaults: "def f(a, b=20, c=30): pass" ,
179
+ test_function_posonly_and_pos_args: "def f(a, /, b, c): pass" ,
180
+ test_function_pos_args_with_defaults: "def f(a, b=20, /, c=30): pass" ,
181
+ test_function_pos_args_with_defaults_and_varargs_and_kwargs: "def f(a, b=20, /, c=30, *args, **kwargs): pass" ,
180
182
test_function_kw_only_args: "def f(*, a, b, c): pass" ,
181
183
test_function_kw_only_args_with_defaults: "def f(*, a, b=20, c=30): pass" ,
182
- test_function_pos_and_kw_only_args: "def f(a, b, c, *, d, e, f): pass" ,
183
- test_function_pos_and_kw_only_args_with_defaults: "def f(a, b, c, *, d, e=20, f=30): pass" ,
184
- test_function_pos_and_kw_only_args_with_defaults_and_varargs: "def f(a, b, c, *args, d, e=20, f=30): pass" ,
185
- test_function_pos_and_kw_only_args_with_defaults_and_varargs_and_kwargs: "def f(a, b, c, *args, d, e=20, f=30, **kwargs): pass" ,
184
+ test_function_kw_only_args_with_defaults_and_varargs: "def f(*args, a, b=20, c=30): pass" ,
185
+ test_function_kw_only_args_with_defaults_and_kwargs: "def f(*, a, b=20, c=30, **kwargs): pass" ,
186
+ test_function_kw_only_args_with_defaults_and_varargs_and_kwargs: "def f(*args, a, b=20, c=30, **kwargs): pass" ,
187
+ test_function_pos_and_kw_only_args: "def f(a, b, /, c, *, d, e, f): pass" ,
188
+ test_function_pos_and_kw_only_args_with_defaults: "def f(a, b, /, c, *, d, e=20, f=30): pass" ,
189
+ test_function_pos_and_kw_only_args_with_defaults_and_varargs: "def f(a, b, /, c, *args, d, e=20, f=30): pass" ,
190
+ test_function_pos_and_kw_only_args_with_defaults_and_kwargs: "def f(a, b, /, c, *, d, e=20, f=30, **kwargs): pass" ,
191
+ test_function_pos_and_kw_only_args_with_defaults_and_varargs_and_kwargs: "def f(a, b, /, c, *args, d, e=20, f=30, **kwargs): pass" ,
186
192
test_lambda_no_args: "lambda: 1" ,
187
193
test_lambda_pos_args: "lambda a, b, c: 1" ,
188
- test_lambda_pos_args_with_defaults: "lambda a, b=20, c=30: 1" ,
194
+ test_lambda_posonly_args: "lambda a, b, /, c: 1" ,
195
+ test_lambda_pos_args_with_defaults: "lambda a, b=20, /, c=30: 1" ,
189
196
test_lambda_kw_only_args: "lambda *, a, b, c: 1" ,
190
197
test_lambda_kw_only_args_with_defaults: "lambda *, a, b=20, c=30: 1" ,
191
- test_lambda_pos_and_kw_only_args: "lambda a, b, c, *, d, e: 0" ,
198
+ test_lambda_pos_and_kw_only_args: "lambda a, b, /, c, *, d, e: 0" ,
199
+ test_lambda_pos_and_kw_only_args_and_vararg_and_kwarg: "lambda a, b, /, c, *d, e, **f: 0" ,
192
200
}
193
201
194
202
fn function_parse_error ( src : & str ) -> LexicalErrorType {
@@ -219,14 +227,16 @@ mod tests {
219
227
test_duplicates_f2: "def f(a, *, a): pass" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
220
228
test_duplicates_f3: "def f(a, a=20): pass" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
221
229
test_duplicates_f4: "def f(a, *a): pass" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
222
- test_duplicates_f5: "def f(a, *, **a): pass" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
230
+ test_duplicates_f5: "def f(a, *, b, **a): pass" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
223
231
test_duplicates_l1: "lambda a, a: 1" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
224
232
test_duplicates_l2: "lambda a, *, a: 1" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
225
233
test_duplicates_l3: "lambda a, a=20: 1" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
226
234
test_duplicates_l4: "lambda a, *a: 1" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
227
- test_duplicates_l5: "lambda a, *, **a: 1" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
235
+ test_duplicates_l5: "lambda a, *, b, **a: 1" , LexicalErrorType :: DuplicateArgumentError ( "a" . to_string( ) . into_boxed_str( ) ) ,
228
236
test_default_arg_error_f: "def f(a, b=20, c): pass" , LexicalErrorType :: DefaultArgumentError ,
229
237
test_default_arg_error_l: "lambda a, b=20, c: 1" , LexicalErrorType :: DefaultArgumentError ,
238
+ test_named_arguments_follow_bare_star_1: "def f(*): pass" , LexicalErrorType :: OtherError ( "named arguments must follow bare *" . to_string( ) . into_boxed_str( ) ) ,
239
+ test_named_arguments_follow_bare_star_2: "def f(*, **kwargs): pass" , LexicalErrorType :: OtherError ( "named arguments must follow bare *" . to_string( ) . into_boxed_str( ) ) ,
230
240
231
241
// Check some calls.
232
242
test_positional_arg_error_f: "f(b=20, c)" , LexicalErrorType :: PositionalArgumentError ,
0 commit comments