Fix incorrect Parameter
range for *args
and **kwargs
(#10283) · astral-sh/ruff@a067d87 (original) (raw)
`@@ -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,
`