add parseerror

Signed-off-by: 11happy <bhuminjaysoni@gmail.com>
This commit is contained in:
11happy 2025-12-15 07:25:49 +00:00
parent d6fa930f8a
commit dbb0631e60
5 changed files with 185 additions and 8 deletions

View File

@ -1,3 +1,2 @@
# parse_options: {"target-version": "3.8"}
{x: **y for x, y in z}
foo(**kwargs)

View File

@ -0,0 +1,2 @@
# parse_options: {"target-version": "3.8"}
foo(**kwargs)

View File

@ -368,11 +368,8 @@ impl<'src> Parser<'src> {
self.bump(TokenKind::DoubleStar);
let right =
self.parse_binary_expression_or_higher(OperatorPrecedence::Exponent, context);
// test_ok missing_power_lhs
// # parse_options: {"target-version": "3.8"}
// {x: **y for x, y in z}
// foo(**kwargs)
return Expr::BinOp(ast::ExprBinOp {
let expr = Expr::BinOp(ast::ExprBinOp {
left: Box::new(Expr::Name(ast::ExprName {
range: TextRange::empty(current_start),
id: Name::empty(),
@ -383,8 +380,23 @@ impl<'src> Parser<'src> {
right: Box::new(right.expr),
range: self.node_range(start),
node_index: AtomicNodeIndex::NONE,
})
.into();
});
// test_err missing_power_lhs
// # parse_options: {"target-version": "3.8"}
// {x: **y for x, y in z}
// test_ok function_kwargs_double_star
// # parse_options: {"target-version": "3.8"}
// foo(**kwargs)
self.add_error(
ParseErrorType::OtherError(
"Power operator '**' requires a left operand".to_string(),
),
&expr,
);
return expr.into();
}
TokenKind::Star => {
let starred_expr = self.parse_starred_expression(context);

View File

@ -0,0 +1,108 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/missing_power_lhs.py
---
## AST
```
Module(
ModModule {
node_index: NodeIndex(None),
range: 0..66,
body: [
Expr(
StmtExpr {
node_index: NodeIndex(None),
range: 43..65,
value: DictComp(
ExprDictComp {
node_index: NodeIndex(None),
range: 43..65,
key: Name(
ExprName {
node_index: NodeIndex(None),
range: 44..45,
id: Name("x"),
ctx: Load,
},
),
value: BinOp(
ExprBinOp {
node_index: NodeIndex(None),
range: 47..50,
left: Name(
ExprName {
node_index: NodeIndex(None),
range: 47..47,
id: Name(""),
ctx: Invalid,
},
),
op: Pow,
right: Name(
ExprName {
node_index: NodeIndex(None),
range: 49..50,
id: Name("y"),
ctx: Load,
},
),
},
),
generators: [
Comprehension {
range: 51..64,
node_index: NodeIndex(None),
target: Tuple(
ExprTuple {
node_index: NodeIndex(None),
range: 55..59,
elts: [
Name(
ExprName {
node_index: NodeIndex(None),
range: 55..56,
id: Name("x"),
ctx: Store,
},
),
Name(
ExprName {
node_index: NodeIndex(None),
range: 58..59,
id: Name("y"),
ctx: Store,
},
),
],
ctx: Store,
parenthesized: false,
},
),
iter: Name(
ExprName {
node_index: NodeIndex(None),
range: 63..64,
id: Name("z"),
ctx: Load,
},
),
ifs: [],
is_async: false,
},
],
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.8"}
2 | {x: **y for x, y in z}
| ^^^ Syntax Error: Power operator '**' requires a left operand
|

View File

@ -0,0 +1,56 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/ok/function_kwargs_double_star.py
---
## AST
```
Module(
ModModule {
node_index: NodeIndex(None),
range: 0..57,
body: [
Expr(
StmtExpr {
node_index: NodeIndex(None),
range: 43..56,
value: Call(
ExprCall {
node_index: NodeIndex(None),
range: 43..56,
func: Name(
ExprName {
node_index: NodeIndex(None),
range: 43..46,
id: Name("foo"),
ctx: Load,
},
),
arguments: Arguments {
range: 46..56,
node_index: NodeIndex(None),
args: [],
keywords: [
Keyword {
range: 47..55,
node_index: NodeIndex(None),
arg: None,
value: Name(
ExprName {
node_index: NodeIndex(None),
range: 49..55,
id: Name("kwargs"),
ctx: Load,
},
),
},
],
},
},
),
},
),
],
},
)
```