Start working on using a bumpalo for the AST
This commit is contained in:
@@ -5,7 +5,7 @@ use std::path::Path;
|
||||
|
||||
use annotate_snippets::display_list::{DisplayList, FormatOptions};
|
||||
use annotate_snippets::snippet::{AnnotationType, Slice, Snippet, SourceAnnotation};
|
||||
|
||||
use ruff_allocator::Allocator;
|
||||
use ruff_python_ast::visitor::source_order::{walk_module, SourceOrderVisitor, TraversalSignal};
|
||||
use ruff_python_ast::{AnyNodeRef, Mod};
|
||||
use ruff_python_parser::{parse_unchecked, Mode, ParseErrorType, Token};
|
||||
@@ -36,7 +36,8 @@ fn inline_err() {
|
||||
/// Snapshots the AST.
|
||||
fn test_valid_syntax(input_path: &Path) {
|
||||
let source = fs::read_to_string(input_path).expect("Expected test file to exist");
|
||||
let parsed = parse_unchecked(&source, Mode::Module);
|
||||
let allocator = Allocator::new();
|
||||
let parsed = parse_unchecked(&source, Mode::Module, &allocator);
|
||||
|
||||
if !parsed.is_valid() {
|
||||
let line_index = LineIndex::from_source_text(&source);
|
||||
@@ -80,7 +81,8 @@ fn test_valid_syntax(input_path: &Path) {
|
||||
/// Snapshots the AST and the error messages.
|
||||
fn test_invalid_syntax(input_path: &Path) {
|
||||
let source = fs::read_to_string(input_path).expect("Expected test file to exist");
|
||||
let parsed = parse_unchecked(&source, Mode::Module);
|
||||
let allocator = Allocator::new();
|
||||
let parsed = parse_unchecked(&source, Mode::Module, &allocator);
|
||||
|
||||
assert!(
|
||||
!parsed.is_valid(),
|
||||
@@ -132,7 +134,8 @@ f'{'
|
||||
f'{foo!r'
|
||||
";
|
||||
|
||||
let parsed = parse_unchecked(source, Mode::Module);
|
||||
let allocator = Allocator::new();
|
||||
let parsed = parse_unchecked(source, Mode::Module, &allocator);
|
||||
|
||||
println!("AST:\n----\n{:#?}", parsed.syntax());
|
||||
println!("Tokens:\n-------\n{:#?}", parsed.tokens());
|
||||
@@ -272,14 +275,14 @@ fn validate_ast(root: &Mod, source_len: TextSize, test_path: &Path) {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct ValidateAstVisitor<'a> {
|
||||
parents: Vec<AnyNodeRef<'a>>,
|
||||
previous: Option<AnyNodeRef<'a>>,
|
||||
struct ValidateAstVisitor<'a, 'ast> {
|
||||
parents: Vec<AnyNodeRef<'a, 'ast>>,
|
||||
previous: Option<AnyNodeRef<'a, 'ast>>,
|
||||
source_length: TextSize,
|
||||
test_path: &'a Path,
|
||||
}
|
||||
|
||||
impl<'a> ValidateAstVisitor<'a> {
|
||||
impl<'a, 'ast> ValidateAstVisitor<'a, 'ast> {
|
||||
fn new(source_length: TextSize, test_path: &'a Path) -> Self {
|
||||
Self {
|
||||
parents: Vec::new(),
|
||||
@@ -290,8 +293,8 @@ impl<'a> ValidateAstVisitor<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ast> SourceOrderVisitor<'ast> for ValidateAstVisitor<'ast> {
|
||||
fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal {
|
||||
impl<'a, 'ast> SourceOrderVisitor<'a, 'ast> for ValidateAstVisitor<'a, 'ast> {
|
||||
fn enter_node(&mut self, node: AnyNodeRef<'a, 'ast>) -> TraversalSignal {
|
||||
assert!(
|
||||
node.end() <= self.source_length,
|
||||
"{path}: The range of the node exceeds the length of the source code. Node: {node:#?}",
|
||||
@@ -319,7 +322,7 @@ impl<'ast> SourceOrderVisitor<'ast> for ValidateAstVisitor<'ast> {
|
||||
TraversalSignal::Traverse
|
||||
}
|
||||
|
||||
fn leave_node(&mut self, node: AnyNodeRef<'ast>) {
|
||||
fn leave_node(&mut self, node: AnyNodeRef<'a, 'ast>) {
|
||||
self.parents.pop().expect("Expected tree to be balanced");
|
||||
|
||||
self.previous = Some(node);
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/ann_assign_stmt_invalid_annotation.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..63,
|
||||
body: [
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 0..11,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Starred(
|
||||
ExprStarred {
|
||||
range: 3..7,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 4..7,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 10..11,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 12..26,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 12..13,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Yield(
|
||||
ExprYield {
|
||||
range: 15..22,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 21..22,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 25..26,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 27..46,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 27..28,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 30..42,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 41..42,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 45..46,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 47..51,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 47..48,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 50..51,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: None,
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 55..62,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 55..58,
|
||||
id: "int",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 61..62,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x: *int = 1
|
||||
| ^^^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | x: yield a = 1
|
||||
3 | x: yield from b = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x: *int = 1
|
||||
2 | x: yield a = 1
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
3 | x: yield from b = 1
|
||||
4 | x: y := int = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x: *int = 1
|
||||
2 | x: yield a = 1
|
||||
3 | x: yield from b = 1
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
4 | x: y := int = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x: yield a = 1
|
||||
3 | x: yield from b = 1
|
||||
4 | x: y := int = 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,509 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/ann_assign_stmt_invalid_target.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..170,
|
||||
body: [
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 0..18,
|
||||
target: StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 0..5,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 0..5,
|
||||
value: "abc",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 7..10,
|
||||
id: "str",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 13..18,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 13..18,
|
||||
value: "def",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 19..37,
|
||||
target: Call(
|
||||
ExprCall {
|
||||
range: 19..25,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 19..23,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 23..25,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 27..30,
|
||||
id: "str",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 33..37,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 33..37,
|
||||
value: "no",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 38..52,
|
||||
target: Starred(
|
||||
ExprStarred {
|
||||
range: 38..40,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 39..40,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 42..45,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 48..52,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 48..49,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 51..52,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 72..83,
|
||||
target: Tuple(
|
||||
ExprTuple {
|
||||
range: 72..74,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 72..73,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 76..79,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 82..83,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 84..100,
|
||||
target: Tuple(
|
||||
ExprTuple {
|
||||
range: 84..88,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 84..85,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 87..88,
|
||||
id: "y",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 90..93,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 96..100,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 96..97,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 99..100,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 101..119,
|
||||
target: Tuple(
|
||||
ExprTuple {
|
||||
range: 101..107,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 102..103,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 105..106,
|
||||
id: "y",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
parenthesized: true,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 109..112,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 115..119,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 115..116,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 118..119,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 138..150,
|
||||
target: List(
|
||||
ExprList {
|
||||
range: 138..141,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 139..140,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 143..146,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 149..150,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 151..169,
|
||||
target: List(
|
||||
ExprList {
|
||||
range: 151..157,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 152..153,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 155..156,
|
||||
id: "y",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 159..162,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 165..169,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 165..166,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 168..169,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | "abc": str = "def"
|
||||
| ^^^^^ Syntax Error: Invalid annotated assignment target
|
||||
2 | call(): str = "no"
|
||||
3 | *x: int = 1, 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | "abc": str = "def"
|
||||
2 | call(): str = "no"
|
||||
| ^^^^^^ Syntax Error: Invalid annotated assignment target
|
||||
3 | *x: int = 1, 2
|
||||
4 | # Tuple assignment
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | "abc": str = "def"
|
||||
2 | call(): str = "no"
|
||||
3 | *x: int = 1, 2
|
||||
| ^^ Syntax Error: Invalid annotated assignment target
|
||||
4 | # Tuple assignment
|
||||
5 | x,: int = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | *x: int = 1, 2
|
||||
4 | # Tuple assignment
|
||||
5 | x,: int = 1
|
||||
| ^^ Syntax Error: Only single target (not tuple) can be annotated
|
||||
6 | x, y: int = 1, 2
|
||||
7 | (x, y): int = 1, 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | # Tuple assignment
|
||||
5 | x,: int = 1
|
||||
6 | x, y: int = 1, 2
|
||||
| ^^^^ Syntax Error: Only single target (not tuple) can be annotated
|
||||
7 | (x, y): int = 1, 2
|
||||
8 | # List assignment
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | x,: int = 1
|
||||
6 | x, y: int = 1, 2
|
||||
7 | (x, y): int = 1, 2
|
||||
| ^^^^^^ Syntax Error: Only single target (not tuple) can be annotated
|
||||
8 | # List assignment
|
||||
9 | [x]: int = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | (x, y): int = 1, 2
|
||||
8 | # List assignment
|
||||
9 | [x]: int = 1
|
||||
| ^^^ Syntax Error: Only single target (not list) can be annotated
|
||||
10 | [x, y]: int = 1, 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
8 | # List assignment
|
||||
9 | [x]: int = 1
|
||||
10 | [x, y]: int = 1, 2
|
||||
| ^^^^^^ Syntax Error: Only single target (not list) can be annotated
|
||||
|
|
||||
@@ -0,0 +1,223 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/ann_assign_stmt_invalid_value.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..65,
|
||||
body: [
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 0..17,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 3..6,
|
||||
id: "Any",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 9..17,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 10..17,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 10..11,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 18..28,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 18..19,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 21..24,
|
||||
id: "Any",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 27..28,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 32..33,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 32..33,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 34..64,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 34..35,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 37..41,
|
||||
id: "list",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Some(
|
||||
List(
|
||||
ExprList {
|
||||
range: 44..64,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 45..46,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 48..54,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 49..54,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 49..50,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: BitOr,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 53..54,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 56..63,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 57..63,
|
||||
op: Or,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 57..58,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 62..63,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x: Any = *a and b
|
||||
| ^^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
2 | x: Any = x := 1
|
||||
3 | x: list = [x, *a | b, *a or b]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x: Any = *a and b
|
||||
2 | x: Any = x := 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
3 | x: list = [x, *a | b, *a or b]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x: Any = *a and b
|
||||
2 | x: Any = x := 1
|
||||
3 | x: list = [x, *a | b, *a or b]
|
||||
| ^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/ann_assign_stmt_missing_rhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..9,
|
||||
body: [
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 0..8,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 3..6,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: None,
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x: int =
|
||||
| ^ Syntax Error: Expected an expression
|
||||
|
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/ann_assign_stmt_type_alias_annotation.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..37,
|
||||
body: [
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 0..7,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "a",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
annotation: Name(
|
||||
ExprName {
|
||||
range: 3..7,
|
||||
id: "type",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: None,
|
||||
simple: true,
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 8..15,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 8..9,
|
||||
id: "X",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 12..15,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 16..28,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 16..28,
|
||||
parameters: None,
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 24..28,
|
||||
id: "type",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 29..36,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 29..30,
|
||||
id: "X",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 33..36,
|
||||
id: "int",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | a: type X = int
|
||||
| ^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
2 | lambda: type X = int
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | a: type X = int
|
||||
2 | lambda: type X = int
|
||||
| ^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
|
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assert_empty_msg.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 0..9,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | assert x,
|
||||
| ^ Syntax Error: Expected an expression
|
||||
|
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assert_empty_test.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..7,
|
||||
body: [
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 0..6,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 6..6,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | assert
|
||||
| ^ Syntax Error: Expected an expression
|
||||
|
|
||||
@@ -0,0 +1,161 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assert_invalid_msg_expr.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..83,
|
||||
body: [
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 0..16,
|
||||
test: BooleanLiteral(
|
||||
ExprBooleanLiteral {
|
||||
range: 7..12,
|
||||
value: false,
|
||||
},
|
||||
),
|
||||
msg: Some(
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 14..16,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 15..16,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 17..30,
|
||||
test: BooleanLiteral(
|
||||
ExprBooleanLiteral {
|
||||
range: 24..29,
|
||||
value: false,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 31..39,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 38..39,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 40..61,
|
||||
test: BooleanLiteral(
|
||||
ExprBooleanLiteral {
|
||||
range: 47..52,
|
||||
value: false,
|
||||
},
|
||||
),
|
||||
msg: Some(
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 54..61,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 60..61,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 62..77,
|
||||
test: BooleanLiteral(
|
||||
ExprBooleanLiteral {
|
||||
range: 69..74,
|
||||
value: false,
|
||||
},
|
||||
),
|
||||
msg: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 76..77,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 81..82,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 81..82,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | assert False, *x
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | assert False, assert x
|
||||
3 | assert False, yield x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | assert False, *x
|
||||
2 | assert False, assert x
|
||||
| ^^^^^^ Syntax Error: Expected an expression
|
||||
3 | assert False, yield x
|
||||
4 | assert False, x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | assert False, *x
|
||||
2 | assert False, assert x
|
||||
3 | assert False, yield x
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
4 | assert False, x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | assert False, assert x
|
||||
3 | assert False, yield x
|
||||
4 | assert False, x := 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assert_invalid_test_expr.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..55,
|
||||
body: [
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 0..9,
|
||||
test: Starred(
|
||||
ExprStarred {
|
||||
range: 7..9,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 8..9,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 10..23,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 17..23,
|
||||
id: "assert",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 24..25,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 24..25,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 26..40,
|
||||
test: Yield(
|
||||
ExprYield {
|
||||
range: 33..40,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 39..40,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
Assert(
|
||||
StmtAssert {
|
||||
range: 41..49,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 48..49,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
msg: None,
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 53..54,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 53..54,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | assert *x
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | assert assert x
|
||||
3 | assert yield x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | assert *x
|
||||
2 | assert assert x
|
||||
| ^^^^^^ Syntax Error: Expected an identifier, but found a keyword 'assert' that cannot be used here
|
||||
3 | assert yield x
|
||||
4 | assert x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | assert *x
|
||||
2 | assert assert x
|
||||
| ^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
3 | assert yield x
|
||||
4 | assert x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | assert *x
|
||||
2 | assert assert x
|
||||
3 | assert yield x
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
4 | assert x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | assert assert x
|
||||
3 | assert yield x
|
||||
4 | assert x := 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,259 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assign_stmt_invalid_target.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..58,
|
||||
body: [
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 0..5,
|
||||
targets: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 0..1,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 4..5,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 6..15,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 6..7,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 10..11,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 14..15,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 16..33,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 20..21,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 24..25,
|
||||
id: "y",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 28..29,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 32..33,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 34..57,
|
||||
targets: [
|
||||
List(
|
||||
ExprList {
|
||||
range: 34..44,
|
||||
elts: [
|
||||
StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 35..38,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 35..38,
|
||||
value: "a",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 40..43,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 40..43,
|
||||
value: "b",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 47..57,
|
||||
elts: [
|
||||
StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 48..51,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 48..51,
|
||||
value: "a",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 53..56,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 53..56,
|
||||
value: "b",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | 1 = 1
|
||||
| ^ Syntax Error: Invalid assignment target
|
||||
2 | x = 1 = 2
|
||||
3 | x = 1 = y = 2 = z
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | 1 = 1
|
||||
2 | x = 1 = 2
|
||||
| ^ Syntax Error: Invalid assignment target
|
||||
3 | x = 1 = y = 2 = z
|
||||
4 | ["a", "b"] = ["a", "b"]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | 1 = 1
|
||||
2 | x = 1 = 2
|
||||
3 | x = 1 = y = 2 = z
|
||||
| ^ Syntax Error: Invalid assignment target
|
||||
4 | ["a", "b"] = ["a", "b"]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | 1 = 1
|
||||
2 | x = 1 = 2
|
||||
3 | x = 1 = y = 2 = z
|
||||
| ^ Syntax Error: Invalid assignment target
|
||||
4 | ["a", "b"] = ["a", "b"]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x = 1 = 2
|
||||
3 | x = 1 = y = 2 = z
|
||||
4 | ["a", "b"] = ["a", "b"]
|
||||
| ^^^ Syntax Error: Invalid assignment target
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x = 1 = 2
|
||||
3 | x = 1 = y = 2 = z
|
||||
4 | ["a", "b"] = ["a", "b"]
|
||||
| ^^^ Syntax Error: Invalid assignment target
|
||||
|
|
||||
@@ -0,0 +1,257 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assign_stmt_invalid_value_expr.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..72,
|
||||
body: [
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 0..12,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 4..12,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 5..12,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 5..6,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 11..12,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 13..25,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 13..14,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 17..25,
|
||||
value: Yield(
|
||||
ExprYield {
|
||||
range: 18..25,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 24..25,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 26..43,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 26..27,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 30..43,
|
||||
value: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 31..43,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 42..43,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 44..60,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 44..45,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 48..60,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 49..60,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 56..57,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 56..57,
|
||||
parameter: Parameter {
|
||||
range: 56..57,
|
||||
name: Identifier {
|
||||
id: "x",
|
||||
range: 56..57,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 59..60,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 61..66,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 61..62,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 65..66,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 70..71,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 70..71,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x = *a and b
|
||||
| ^^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
2 | x = *yield x
|
||||
3 | x = *yield from x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x = *a and b
|
||||
2 | x = *yield x
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
3 | x = *yield from x
|
||||
4 | x = *lambda x: x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x = *a and b
|
||||
2 | x = *yield x
|
||||
3 | x = *yield from x
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
4 | x = *lambda x: x
|
||||
5 | x = x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x = *yield x
|
||||
3 | x = *yield from x
|
||||
4 | x = *lambda x: x
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
5 | x = x := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | x = *yield from x
|
||||
4 | x = *lambda x: x
|
||||
5 | x = x := 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,146 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assign_stmt_keyword_target.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..42,
|
||||
body: [
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 0..12,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "a",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 4..8,
|
||||
id: "pass",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 11..12,
|
||||
id: "c",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 13..18,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 13..18,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 13..14,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 17..18,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 19..35,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 19..20,
|
||||
id: "a",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 23..24,
|
||||
id: "b",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 27..31,
|
||||
id: "pass",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 34..35,
|
||||
id: "c",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 36..41,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 36..41,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 36..37,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 40..41,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | a = pass = c
|
||||
| ^^^^ Syntax Error: Expected an identifier, but found a keyword 'pass' that cannot be used here
|
||||
2 | a + b
|
||||
3 | a = b = pass = c
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | a = pass = c
|
||||
2 | a + b
|
||||
3 | a = b = pass = c
|
||||
| ^^^^ Syntax Error: Expected an identifier, but found a keyword 'pass' that cannot be used here
|
||||
4 | a + b
|
||||
|
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/assign_stmt_missing_rhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..38,
|
||||
body: [
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 0..3,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 3..3,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 4..9,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 4..9,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 4..5,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 8..9,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 10..17,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 10..11,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 14..15,
|
||||
id: "y",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 17..17,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 18..23,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 18..23,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 18..19,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 22..23,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 24..31,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 24..25,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 27..27,
|
||||
id: "",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 30..31,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 32..37,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 32..37,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 32..33,
|
||||
value: Int(
|
||||
3,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 36..37,
|
||||
value: Int(
|
||||
3,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x =
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 | 1 + 1
|
||||
3 | x = y =
|
||||
4 | 2 + 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x =
|
||||
2 | 1 + 1
|
||||
3 | x = y =
|
||||
| ^ Syntax Error: Expected an expression
|
||||
4 | 2 + 2
|
||||
5 | x = = y
|
||||
6 | 3 + 3
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | x = y =
|
||||
4 | 2 + 2
|
||||
5 | x = = y
|
||||
| ^ Syntax Error: Expected an expression
|
||||
6 | 3 + 3
|
||||
|
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/async_unexpected_token.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..116,
|
||||
body: [
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 6..20,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "Foo",
|
||||
range: 12..15,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 17..20,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 17..20,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
While(
|
||||
StmtWhile {
|
||||
range: 27..42,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 33..37,
|
||||
id: "test",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 39..42,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 39..42,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 49..54,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 49..50,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 53..54,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 61..81,
|
||||
is_async: true,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 71..74,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 74..76,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 78..81,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 78..81,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
Match(
|
||||
StmtMatch {
|
||||
range: 88..115,
|
||||
subject: Name(
|
||||
ExprName {
|
||||
range: 94..98,
|
||||
id: "test",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
cases: [
|
||||
MatchCase {
|
||||
range: 104..115,
|
||||
pattern: MatchAs(
|
||||
PatternMatchAs {
|
||||
range: 109..110,
|
||||
pattern: None,
|
||||
name: None,
|
||||
},
|
||||
),
|
||||
guard: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 112..115,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 112..115,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | async class Foo: ...
|
||||
| ^^^^^ Syntax Error: Expected 'def', 'with' or 'for' to follow 'async', found 'class'
|
||||
2 | async while test: ...
|
||||
3 | async x = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | async class Foo: ...
|
||||
2 | async while test: ...
|
||||
| ^^^^^ Syntax Error: Expected 'def', 'with' or 'for' to follow 'async', found 'while'
|
||||
3 | async x = 1
|
||||
4 | async async def foo(): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | async class Foo: ...
|
||||
2 | async while test: ...
|
||||
3 | async x = 1
|
||||
| ^ Syntax Error: Expected 'def', 'with' or 'for' to follow 'async', found name
|
||||
4 | async async def foo(): ...
|
||||
5 | async match test:
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | async while test: ...
|
||||
3 | async x = 1
|
||||
4 | async async def foo(): ...
|
||||
| ^^^^^ Syntax Error: Expected 'def', 'with' or 'for' to follow 'async', found 'async'
|
||||
5 | async match test:
|
||||
6 | case _: ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | async x = 1
|
||||
4 | async async def foo(): ...
|
||||
5 | async match test:
|
||||
| ^^^^^ Syntax Error: Expected 'def', 'with' or 'for' to follow 'async', found 'match'
|
||||
6 | case _: ...
|
||||
|
|
||||
@@ -0,0 +1,233 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/aug_assign_stmt_invalid_target.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..59,
|
||||
body: [
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 0..6,
|
||||
target: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 0..1,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 7..17,
|
||||
target: StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 7..10,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 7..10,
|
||||
value: "a",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 14..17,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 14..17,
|
||||
value: "b",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Double,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 18..25,
|
||||
target: Starred(
|
||||
ExprStarred {
|
||||
range: 18..20,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 19..20,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 24..25,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 26..30,
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 34..35,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 34..35,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 36..45,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 36..37,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 41..45,
|
||||
id: "pass",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 46..58,
|
||||
target: BinOp(
|
||||
ExprBinOp {
|
||||
range: 47..52,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 47..48,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 51..52,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 57..58,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | 1 += 1
|
||||
| ^ Syntax Error: Invalid augmented assignment target
|
||||
2 | "a" += "b"
|
||||
3 | *x += 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | 1 += 1
|
||||
2 | "a" += "b"
|
||||
| ^^^ Syntax Error: Invalid augmented assignment target
|
||||
3 | *x += 1
|
||||
4 | pass += 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | 1 += 1
|
||||
2 | "a" += "b"
|
||||
3 | *x += 1
|
||||
| ^^ Syntax Error: Invalid augmented assignment target
|
||||
4 | pass += 1
|
||||
5 | x += pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | "a" += "b"
|
||||
3 | *x += 1
|
||||
4 | pass += 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
5 | x += pass
|
||||
6 | (x + y) += 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | *x += 1
|
||||
4 | pass += 1
|
||||
5 | x += pass
|
||||
| ^^^^ Syntax Error: Expected an identifier, but found a keyword 'pass' that cannot be used here
|
||||
6 | (x + y) += 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | pass += 1
|
||||
5 | x += pass
|
||||
6 | (x + y) += 1
|
||||
| ^^^^^ Syntax Error: Invalid augmented assignment target
|
||||
|
|
||||
@@ -0,0 +1,252 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/aug_assign_stmt_invalid_value.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..77,
|
||||
body: [
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 0..13,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 5..13,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 6..13,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 6..7,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 12..13,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 14..27,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 14..15,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 19..27,
|
||||
value: Yield(
|
||||
ExprYield {
|
||||
range: 20..27,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 26..27,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 28..46,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 28..29,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 33..46,
|
||||
value: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 34..46,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 45..46,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 47..64,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 47..48,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 52..64,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 53..64,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 60..61,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 60..61,
|
||||
parameter: Parameter {
|
||||
range: 60..61,
|
||||
name: Identifier {
|
||||
id: "x",
|
||||
range: 60..61,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 63..64,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 65..71,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 65..66,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 70..71,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 75..76,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 75..76,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x += *a and b
|
||||
| ^^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
2 | x += *yield x
|
||||
3 | x += *yield from x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x += *a and b
|
||||
2 | x += *yield x
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
3 | x += *yield from x
|
||||
4 | x += *lambda x: x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x += *a and b
|
||||
2 | x += *yield x
|
||||
3 | x += *yield from x
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
4 | x += *lambda x: x
|
||||
5 | x += y := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x += *yield x
|
||||
3 | x += *yield from x
|
||||
4 | x += *lambda x: x
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
5 | x += y := 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | x += *yield from x
|
||||
4 | x += *lambda x: x
|
||||
5 | x += y := 1
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,137 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/aug_assign_stmt_missing_rhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..27,
|
||||
body: [
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 0..4,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 4..4,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 5..10,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 5..10,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 9..10,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
AugAssign(
|
||||
StmtAugAssign {
|
||||
range: 11..17,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 11..12,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 21..26,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 21..26,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 21..22,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 25..26,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x +=
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 | 1 + 1
|
||||
3 | x += y +=
|
||||
4 | 2 + 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x +=
|
||||
2 | 1 + 1
|
||||
3 | x += y +=
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
4 | 2 + 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x +=
|
||||
2 | 1 + 1
|
||||
3 | x += y +=
|
||||
| ^ Syntax Error: Expected a statement
|
||||
4 | 2 + 2
|
||||
|
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/case_expect_indented_block.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..43,
|
||||
body: [
|
||||
Match(
|
||||
StmtMatch {
|
||||
range: 0..42,
|
||||
subject: Name(
|
||||
ExprName {
|
||||
range: 6..13,
|
||||
id: "subject",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
cases: [
|
||||
MatchCase {
|
||||
range: 19..26,
|
||||
pattern: MatchValue(
|
||||
PatternMatchValue {
|
||||
range: 24..25,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 24..25,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
guard: None,
|
||||
body: [],
|
||||
},
|
||||
MatchCase {
|
||||
range: 31..42,
|
||||
pattern: MatchValue(
|
||||
PatternMatchValue {
|
||||
range: 36..37,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 36..37,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
guard: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 39..42,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 39..42,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | match subject:
|
||||
2 | case 1:
|
||||
3 | case 2: ...
|
||||
| ^^^^ Syntax Error: Expected an indented block after `case` block
|
||||
|
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/class_def_empty_body.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..31,
|
||||
body: [
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 0..10,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "Foo",
|
||||
range: 6..9,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: None,
|
||||
body: [],
|
||||
},
|
||||
),
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 11..23,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "Foo",
|
||||
range: 17..20,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: Some(
|
||||
Arguments {
|
||||
range: 20..22,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
),
|
||||
body: [],
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 24..30,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 24..25,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 28..30,
|
||||
value: Int(
|
||||
42,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | class Foo:
|
||||
2 | class Foo():
|
||||
| ^^^^^ Syntax Error: Expected an indented block after `class` definition
|
||||
3 | x = 42
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | class Foo:
|
||||
2 | class Foo():
|
||||
3 | x = 42
|
||||
| ^ Syntax Error: Expected an indented block after `class` definition
|
||||
|
|
||||
@@ -0,0 +1,141 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/class_def_missing_name.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..53,
|
||||
body: [
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 0..11,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "",
|
||||
range: 5..5,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 8..11,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 8..11,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 12..25,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "",
|
||||
range: 17..17,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: Some(
|
||||
Arguments {
|
||||
range: 18..20,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 22..25,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 22..25,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 26..52,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "",
|
||||
range: 31..31,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: Some(
|
||||
Arguments {
|
||||
range: 32..47,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 33..46,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "metaclass",
|
||||
range: 33..42,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 43..46,
|
||||
id: "ABC",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 49..52,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 49..52,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | class : ...
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
2 | class (): ...
|
||||
3 | class (metaclass=ABC): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | class : ...
|
||||
2 | class (): ...
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
3 | class (metaclass=ABC): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | class : ...
|
||||
2 | class (): ...
|
||||
3 | class (metaclass=ABC): ...
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
|
|
||||
@@ -0,0 +1,113 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/class_def_unclosed_type_param_list.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..41,
|
||||
body: [
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 0..33,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "Foo",
|
||||
range: 6..9,
|
||||
},
|
||||
type_params: Some(
|
||||
TypeParams {
|
||||
range: 9..17,
|
||||
type_params: [
|
||||
TypeVar(
|
||||
TypeParamTypeVar {
|
||||
range: 10..12,
|
||||
name: Identifier {
|
||||
id: "T1",
|
||||
range: 10..12,
|
||||
},
|
||||
bound: None,
|
||||
default: None,
|
||||
},
|
||||
),
|
||||
TypeVarTuple(
|
||||
TypeParamTypeVarTuple {
|
||||
range: 14..17,
|
||||
name: Identifier {
|
||||
id: "T2",
|
||||
range: 15..17,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
arguments: Some(
|
||||
Arguments {
|
||||
range: 17..23,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 18..19,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 21..22,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 29..33,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 34..40,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 34..35,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 38..40,
|
||||
value: Int(
|
||||
10,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | class Foo[T1, *T2(a, b):
|
||||
| ^ Syntax Error: Expected ']', found '('
|
||||
2 | pass
|
||||
3 | x = 10
|
||||
|
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/comma_separated_missing_comma.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..15,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..14,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..14,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..14,
|
||||
args: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 12..13,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 5..8,
|
||||
arg: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(**x := 1)
|
||||
| ^^ Syntax Error: Expected ',', found ':='
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(**x := 1)
|
||||
| ^ Syntax Error: Positional argument cannot follow keyword argument unpacking
|
||||
|
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/comma_separated_missing_first_element.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..9,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..9,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..9,
|
||||
args: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 7..8,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(= 1)
|
||||
| ^ Syntax Error: Expected an expression or a ')'
|
||||
|
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/comprehension_missing_for_after_async.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..28,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..7,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 1..6,
|
||||
id: "async",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 8..27,
|
||||
value: Generator(
|
||||
ExprGenerator {
|
||||
range: 8..27,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 9..10,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 11..26,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 17..18,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 22..26,
|
||||
id: "iter",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: true,
|
||||
},
|
||||
],
|
||||
parenthesized: true,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | (async)
|
||||
| ^^^^^ Syntax Error: Expected an identifier, but found a keyword 'async' that cannot be used here
|
||||
2 | (x async x in iter)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | (async)
|
||||
2 | (x async x in iter)
|
||||
| ^ Syntax Error: Expected 'for', found name
|
||||
|
|
||||
@@ -0,0 +1,176 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/decorator_invalid_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..56,
|
||||
body: [
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 0..55,
|
||||
is_async: false,
|
||||
decorator_list: [
|
||||
Decorator {
|
||||
range: 0..3,
|
||||
expression: Starred(
|
||||
ExprStarred {
|
||||
range: 1..3,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 2..3,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
Decorator {
|
||||
range: 4..9,
|
||||
expression: Starred(
|
||||
ExprStarred {
|
||||
range: 6..8,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
Decorator {
|
||||
range: 10..17,
|
||||
expression: Starred(
|
||||
ExprStarred {
|
||||
range: 13..15,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 14..15,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
Decorator {
|
||||
range: 18..26,
|
||||
expression: Yield(
|
||||
ExprYield {
|
||||
range: 19..26,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 25..26,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
Decorator {
|
||||
range: 27..40,
|
||||
expression: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 28..40,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 39..40,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 45..48,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 48..50,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 52..55,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 52..55,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | @*x
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | @(*x)
|
||||
3 | @((*x))
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | @*x
|
||||
2 | @(*x)
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
3 | @((*x))
|
||||
4 | @yield x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | @*x
|
||||
2 | @(*x)
|
||||
3 | @((*x))
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
4 | @yield x
|
||||
5 | @yield from x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | @(*x)
|
||||
3 | @((*x))
|
||||
4 | @yield x
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
5 | @yield from x
|
||||
6 | def foo(): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | @((*x))
|
||||
4 | @yield x
|
||||
5 | @yield from x
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
6 | def foo(): ...
|
||||
|
|
||||
@@ -0,0 +1,190 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/decorator_missing_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..51,
|
||||
body: [
|
||||
AnnAssign(
|
||||
StmtAnnAssign {
|
||||
range: 5..15,
|
||||
target: Call(
|
||||
ExprCall {
|
||||
range: 5..10,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 5..8,
|
||||
id: "foo",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 8..10,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
annotation: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 12..15,
|
||||
},
|
||||
),
|
||||
value: None,
|
||||
simple: false,
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 16..32,
|
||||
is_async: false,
|
||||
decorator_list: [
|
||||
Decorator {
|
||||
range: 16..17,
|
||||
expression: Name(
|
||||
ExprName {
|
||||
range: 17..17,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 22..25,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 25..27,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 29..32,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 29..32,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 33..50,
|
||||
is_async: false,
|
||||
decorator_list: [
|
||||
Decorator {
|
||||
range: 33..35,
|
||||
expression: BinOp(
|
||||
ExprBinOp {
|
||||
range: 34..35,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 34..34,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
op: MatMult,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 35..35,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 40..43,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 43..45,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 47..50,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 47..50,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | @def foo(): ...
|
||||
| ^^^ Syntax Error: Expected an identifier, but found a keyword 'def' that cannot be used here
|
||||
2 | @
|
||||
3 | def foo(): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | @def foo(): ...
|
||||
| ^^^ Syntax Error: Expected newline, found name
|
||||
2 | @
|
||||
3 | def foo(): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | @def foo(): ...
|
||||
2 | @
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 | def foo(): ...
|
||||
4 | @@
|
||||
5 | def foo(): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | @
|
||||
3 | def foo(): ...
|
||||
4 | @@
|
||||
| ^ Syntax Error: Expected an expression
|
||||
5 | def foo(): ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | @
|
||||
3 | def foo(): ...
|
||||
4 | @@
|
||||
| ^ Syntax Error: Expected an expression
|
||||
5 | def foo(): ...
|
||||
|
|
||||
@@ -0,0 +1,163 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/decorator_missing_newline.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..60,
|
||||
body: [
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 0..17,
|
||||
is_async: false,
|
||||
decorator_list: [
|
||||
Decorator {
|
||||
range: 0..2,
|
||||
expression: Name(
|
||||
ExprName {
|
||||
range: 1..2,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 7..10,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 10..12,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 14..17,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 14..17,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 18..41,
|
||||
is_async: true,
|
||||
decorator_list: [
|
||||
Decorator {
|
||||
range: 18..20,
|
||||
expression: Name(
|
||||
ExprName {
|
||||
range: 19..20,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 31..34,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 34..36,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 38..41,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 38..41,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ClassDef(
|
||||
StmtClassDef {
|
||||
range: 42..59,
|
||||
decorator_list: [
|
||||
Decorator {
|
||||
range: 42..44,
|
||||
expression: Name(
|
||||
ExprName {
|
||||
range: 43..44,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
name: Identifier {
|
||||
id: "Foo",
|
||||
range: 51..54,
|
||||
},
|
||||
type_params: None,
|
||||
arguments: None,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 56..59,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 56..59,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | @x def foo(): ...
|
||||
| ^^^ Syntax Error: Expected newline, found 'def'
|
||||
2 | @x async def foo(): ...
|
||||
3 | @x class Foo: ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | @x def foo(): ...
|
||||
2 | @x async def foo(): ...
|
||||
| ^^^^^ Syntax Error: Expected newline, found 'async'
|
||||
3 | @x class Foo: ...
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | @x def foo(): ...
|
||||
2 | @x async def foo(): ...
|
||||
3 | @x class Foo: ...
|
||||
| ^^^^^ Syntax Error: Expected newline, found 'class'
|
||||
|
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/decorator_unexpected_token.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..34,
|
||||
body: [
|
||||
With(
|
||||
StmtWith {
|
||||
range: 5..22,
|
||||
is_async: true,
|
||||
items: [
|
||||
WithItem {
|
||||
range: 16..17,
|
||||
context_expr: Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
optional_vars: None,
|
||||
},
|
||||
],
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 19..22,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 19..22,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 28..33,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 28..29,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 32..33,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | @foo
|
||||
2 | async with x: ...
|
||||
| ^^^^^ Syntax Error: Expected class, function definition or async function definition after decorator
|
||||
3 | @foo
|
||||
4 | x = 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | async with x: ...
|
||||
3 | @foo
|
||||
4 | x = 1
|
||||
| ^ Syntax Error: Expected class, function definition or async function definition after decorator
|
||||
|
|
||||
@@ -0,0 +1,125 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/del_incomplete_target.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..24,
|
||||
body: [
|
||||
Delete(
|
||||
StmtDelete {
|
||||
range: 0..9,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 4..5,
|
||||
id: "x",
|
||||
ctx: Del,
|
||||
},
|
||||
),
|
||||
Attribute(
|
||||
ExprAttribute {
|
||||
range: 7..9,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "",
|
||||
range: 9..9,
|
||||
},
|
||||
ctx: Del,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 10..11,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 10..11,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Delete(
|
||||
StmtDelete {
|
||||
range: 12..24,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "x",
|
||||
ctx: Del,
|
||||
},
|
||||
),
|
||||
Subscript(
|
||||
ExprSubscript {
|
||||
range: 19..23,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 19..20,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
slice: Slice(
|
||||
ExprSlice {
|
||||
range: 22..23,
|
||||
lower: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 22..23,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
upper: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 23..23,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
),
|
||||
step: None,
|
||||
},
|
||||
),
|
||||
ctx: Del,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | del x, y.
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
2 | z
|
||||
3 | del x, y[
|
||||
4 | z
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | del x, y[
|
||||
4 | z
|
||||
|
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/dotted_name_multiple_dots.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..25,
|
||||
body: [
|
||||
Import(
|
||||
StmtImport {
|
||||
range: 0..11,
|
||||
names: [
|
||||
Alias {
|
||||
range: 7..11,
|
||||
name: Identifier {
|
||||
id: "a..b",
|
||||
range: 7..11,
|
||||
},
|
||||
asname: None,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
Import(
|
||||
StmtImport {
|
||||
range: 12..20,
|
||||
names: [
|
||||
Alias {
|
||||
range: 19..20,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 19..20,
|
||||
},
|
||||
asname: None,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 20..23,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 20..23,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 23..24,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 23..24,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | import a..b
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
2 | import a...b
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | import a..b
|
||||
2 | import a...b
|
||||
| ^^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | import a..b
|
||||
2 | import a...b
|
||||
| ^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
|
|
||||
@@ -0,0 +1,126 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/except_stmt_invalid_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..74,
|
||||
body: [
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 0..38,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 9..13,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 14..38,
|
||||
type_: Some(
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 21..28,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 27..28,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 34..38,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: false,
|
||||
},
|
||||
),
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 39..73,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 48..52,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 53..73,
|
||||
type_: Some(
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 61..63,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 62..63,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 69..73,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | try:
|
||||
2 | pass
|
||||
3 | except yield x:
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
4 | pass
|
||||
5 | try:
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | try:
|
||||
6 | pass
|
||||
7 | except* *x:
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
8 | pass
|
||||
|
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/except_stmt_missing_as_name.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..73,
|
||||
body: [
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 0..72,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 9..13,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 14..43,
|
||||
type_: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 21..30,
|
||||
id: "Exception",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 39..43,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 44..72,
|
||||
type_: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 51..60,
|
||||
id: "Exception",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 68..72,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: false,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | try:
|
||||
2 | pass
|
||||
3 | except Exception as:
|
||||
| ^ Syntax Error: Expected name after `as`
|
||||
4 | pass
|
||||
5 | except Exception as
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | except Exception as:
|
||||
4 | pass
|
||||
5 | except Exception as
|
||||
| ^ Syntax Error: Expected name after `as`
|
||||
6 | pass
|
||||
|
|
||||
@@ -0,0 +1,156 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/except_stmt_missing_exception.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..166,
|
||||
body: [
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 0..37,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 9..13,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 14..37,
|
||||
type_: None,
|
||||
name: Some(
|
||||
Identifier {
|
||||
id: "exc",
|
||||
range: 24..27,
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 33..37,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: false,
|
||||
},
|
||||
),
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 92..165,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 101..105,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 106..123,
|
||||
type_: None,
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 119..123,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 124..140,
|
||||
type_: None,
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 136..140,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 141..165,
|
||||
type_: None,
|
||||
name: Some(
|
||||
Identifier {
|
||||
id: "exc",
|
||||
range: 152..155,
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 161..165,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | try:
|
||||
2 | pass
|
||||
3 | except as exc:
|
||||
| ^^ Syntax Error: Expected one or more exception types
|
||||
4 | pass
|
||||
5 | # If a '*' is present then exception type is required
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | try:
|
||||
7 | pass
|
||||
8 | except*:
|
||||
| ^ Syntax Error: Expected one or more exception types
|
||||
9 | pass
|
||||
10 | except*
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
8 | except*:
|
||||
9 | pass
|
||||
10 | except*
|
||||
| ^ Syntax Error: Expected one or more exception types
|
||||
11 | pass
|
||||
12 | except* as exc:
|
||||
13 | pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
10 | except*
|
||||
11 | pass
|
||||
12 | except* as exc:
|
||||
| ^^ Syntax Error: Expected one or more exception types
|
||||
13 | pass
|
||||
|
|
||||
@@ -0,0 +1,251 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/except_stmt_unparenthesized_tuple.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..131,
|
||||
body: [
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 0..64,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 9..13,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 14..35,
|
||||
type_: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 21..25,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 21..22,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 24..25,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 31..35,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 36..64,
|
||||
type_: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 43..47,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 43..44,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 46..47,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: Some(
|
||||
Identifier {
|
||||
id: "exc",
|
||||
range: 51..54,
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 60..64,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: false,
|
||||
},
|
||||
),
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 65..130,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 74..78,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 79..101,
|
||||
type_: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 87..91,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 87..88,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 90..91,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 97..101,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 102..130,
|
||||
type_: Some(
|
||||
Tuple(
|
||||
ExprTuple {
|
||||
range: 110..114,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 110..111,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 113..114,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: Some(
|
||||
Identifier {
|
||||
id: "eg",
|
||||
range: 118..120,
|
||||
},
|
||||
),
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 126..130,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | try:
|
||||
2 | pass
|
||||
3 | except x, y:
|
||||
| ^^^^ Syntax Error: Multiple exception types must be parenthesized
|
||||
4 | pass
|
||||
5 | except x, y as exc:
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | except x, y:
|
||||
4 | pass
|
||||
5 | except x, y as exc:
|
||||
| ^^^^ Syntax Error: Multiple exception types must be parenthesized
|
||||
6 | pass
|
||||
7 | try:
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | try:
|
||||
8 | pass
|
||||
9 | except* x, y:
|
||||
| ^^^^ Syntax Error: Multiple exception types must be parenthesized
|
||||
10 | pass
|
||||
11 | except* x, y as eg:
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
9 | except* x, y:
|
||||
10 | pass
|
||||
11 | except* x, y as eg:
|
||||
| ^^^^ Syntax Error: Multiple exception types must be parenthesized
|
||||
12 | pass
|
||||
|
|
||||
@@ -0,0 +1,222 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/double_starred.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..55,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..15,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..15,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..15,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 5..14,
|
||||
arg: None,
|
||||
value: Yield(
|
||||
ExprYield {
|
||||
range: 7..14,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 13..14,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 16..27,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 16..27,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 16..20,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 20..27,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 21..26,
|
||||
arg: None,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 24..26,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 25..26,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 28..38,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 28..38,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 28..32,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 32..38,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 33..37,
|
||||
arg: None,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 35..37,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 36..37,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 40..54,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 40..54,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 40..44,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 44..54,
|
||||
args: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 52..53,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 45..48,
|
||||
arg: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 47..48,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(**yield x)
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
2 | call(** *x)
|
||||
3 | call(***x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(**yield x)
|
||||
2 | call(** *x)
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
3 | call(***x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(**yield x)
|
||||
2 | call(** *x)
|
||||
3 | call(***x)
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
4 |
|
||||
5 | call(**x := 1)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | call(***x)
|
||||
4 |
|
||||
5 | call(**x := 1)
|
||||
| ^^ Syntax Error: Expected ',', found ':='
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | call(***x)
|
||||
4 |
|
||||
5 | call(**x := 1)
|
||||
| ^ Syntax Error: Positional argument cannot follow keyword argument unpacking
|
||||
|
|
||||
@@ -0,0 +1,136 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/duplicate_keyword_arguments.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..28,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..28,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..28,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..3,
|
||||
id: "foo",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 3..28,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 4..7,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "a",
|
||||
range: 4..5,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 6..7,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
Keyword {
|
||||
range: 9..12,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "b",
|
||||
range: 9..10,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 11..12,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
Keyword {
|
||||
range: 14..17,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "c",
|
||||
range: 14..15,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 16..17,
|
||||
value: Int(
|
||||
3,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
Keyword {
|
||||
range: 19..22,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "b",
|
||||
range: 19..20,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 21..22,
|
||||
value: Int(
|
||||
4,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
Keyword {
|
||||
range: 24..27,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "a",
|
||||
range: 24..25,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 26..27,
|
||||
value: Int(
|
||||
5,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | foo(a=1, b=2, c=3, b=4, a=5)
|
||||
| ^^^ Syntax Error: Duplicate keyword argument "b"
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | foo(a=1, b=2, c=3, b=4, a=5)
|
||||
| ^^^ Syntax Error: Duplicate keyword argument "a"
|
||||
|
|
||||
@@ -0,0 +1,200 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/invalid_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..67,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..15,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..15,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..15,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 5..14,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "",
|
||||
range: 5..10,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 13..14,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 16..32,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 16..32,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 16..20,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 20..32,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 21..31,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "",
|
||||
range: 21..27,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 30..31,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 34..47,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 34..47,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 34..38,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 38..47,
|
||||
args: [
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 39..46,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 45..46,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 48..66,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 48..66,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 48..52,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 52..66,
|
||||
args: [
|
||||
YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 53..65,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 64..65,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(x + y = 1)
|
||||
| ^^^^^ Syntax Error: Expected a parameter name
|
||||
2 | call(x := 1 = 1)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(x + y = 1)
|
||||
2 | call(x := 1 = 1)
|
||||
| ^^^^^^ Syntax Error: Expected a parameter name
|
||||
3 |
|
||||
4 | call(yield x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | call(x := 1 = 1)
|
||||
3 |
|
||||
4 | call(yield x)
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
5 | call(yield from x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | call(yield x)
|
||||
5 | call(yield from x)
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,230 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/invalid_keyword_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..69,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..17,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..17,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..17,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 5..16,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 5..6,
|
||||
},
|
||||
),
|
||||
value: Yield(
|
||||
ExprYield {
|
||||
range: 9..16,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 15..16,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 18..40,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 18..40,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 18..22,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 22..40,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 23..39,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 23..24,
|
||||
},
|
||||
),
|
||||
value: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 27..39,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 38..39,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 41..53,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 41..53,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 41..45,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 45..53,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 46..52,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 46..47,
|
||||
},
|
||||
),
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 50..52,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 51..52,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 54..68,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 54..68,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 54..58,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 58..68,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 59..67,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 59..60,
|
||||
},
|
||||
),
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 64..66,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 65..66,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(x = yield y)
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
2 | call(x = yield from y)
|
||||
3 | call(x = *y)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(x = yield y)
|
||||
2 | call(x = yield from y)
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
3 | call(x = *y)
|
||||
4 | call(x = (*y))
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(x = yield y)
|
||||
2 | call(x = yield from y)
|
||||
3 | call(x = *y)
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
4 | call(x = (*y))
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | call(x = yield from y)
|
||||
3 | call(x = *y)
|
||||
4 | call(x = (*y))
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,305 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/invalid_order.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..100,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..17,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..17,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..17,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 15..16,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 5..13,
|
||||
arg: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 7..13,
|
||||
id: "kwargs",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 18..30,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 18..30,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 18..22,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 22..30,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 28..29,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 23..26,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 23..24,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 25..26,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 31..53,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 31..53,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 31..35,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 35..53,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 51..52,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 36..39,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 36..37,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 38..39,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
Keyword {
|
||||
range: 41..49,
|
||||
arg: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 43..49,
|
||||
id: "kwargs",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 54..75,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 54..75,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 54..58,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 58..75,
|
||||
args: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 69..74,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 70..74,
|
||||
id: "args",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 59..67,
|
||||
arg: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 61..67,
|
||||
id: "kwargs",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 76..99,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 76..99,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 76..80,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 80..99,
|
||||
args: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 92..97,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 93..97,
|
||||
id: "args",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 81..89,
|
||||
arg: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 83..89,
|
||||
id: "kwargs",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(**kwargs, x)
|
||||
| ^ Syntax Error: Positional argument cannot follow keyword argument unpacking
|
||||
2 | call(x=1, y)
|
||||
3 | call(x=1, **kwargs, y)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(**kwargs, x)
|
||||
2 | call(x=1, y)
|
||||
| ^ Syntax Error: Positional argument cannot follow keyword argument
|
||||
3 | call(x=1, **kwargs, y)
|
||||
4 | call(**kwargs, *args)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(**kwargs, x)
|
||||
2 | call(x=1, y)
|
||||
3 | call(x=1, **kwargs, y)
|
||||
| ^ Syntax Error: Positional argument cannot follow keyword argument unpacking
|
||||
4 | call(**kwargs, *args)
|
||||
5 | call(**kwargs, (*args))
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | call(x=1, y)
|
||||
3 | call(x=1, **kwargs, y)
|
||||
4 | call(**kwargs, *args)
|
||||
| ^^^^^ Syntax Error: Iterable argument unpacking cannot follow keyword argument unpacking
|
||||
5 | call(**kwargs, (*args))
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | call(x=1, **kwargs, y)
|
||||
4 | call(**kwargs, *args)
|
||||
5 | call(**kwargs, (*args))
|
||||
| ^^^^^ Syntax Error: Starred expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/missing_argument.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..10,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..10,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..10,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 5..6,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 8..9,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(x,,y)
|
||||
| ^ Syntax Error: Expected an expression or a ')'
|
||||
|
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/missing_comma.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..9,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..9,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..9,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..9,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 5..6,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(x y)
|
||||
| ^ Syntax Error: Expected ',', found name
|
||||
|
|
||||
@@ -0,0 +1,167 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/missing_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..38,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..10,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..10,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..10,
|
||||
args: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 8..9,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 11..21,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 11..21,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 11..15,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 15..21,
|
||||
args: [],
|
||||
keywords: [
|
||||
Keyword {
|
||||
range: 16..19,
|
||||
arg: Some(
|
||||
Identifier {
|
||||
id: "x",
|
||||
range: 16..17,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 19..19,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 22..32,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 22..32,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 22..26,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 26..32,
|
||||
args: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 27..28,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 28..28,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 30..31,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 34..37,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 34..37,
|
||||
id: "foo",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call( = 1)
|
||||
| ^ Syntax Error: Expected an expression or a ')'
|
||||
2 | call(x = )
|
||||
3 | call(*, y)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call( = 1)
|
||||
2 | call(x = )
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 | call(*, y)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call( = 1)
|
||||
2 | call(x = )
|
||||
3 | call(*, y)
|
||||
| ^ Syntax Error: Expected an expression
|
||||
4 |
|
||||
5 | foo
|
||||
|
|
||||
@@ -0,0 +1,187 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/starred.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..64,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..28,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..28,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..28,
|
||||
args: [
|
||||
Generator(
|
||||
ExprGenerator {
|
||||
range: 5..27,
|
||||
elt: Starred(
|
||||
ExprStarred {
|
||||
range: 5..10,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 6..10,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 11..27,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 15..19,
|
||||
id: "data",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 23..27,
|
||||
id: "iter",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
parenthesized: false,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 29..43,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 29..43,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 29..33,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 33..43,
|
||||
args: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 34..42,
|
||||
value: Yield(
|
||||
ExprYield {
|
||||
range: 35..42,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 41..42,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 44..63,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 44..63,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 44..48,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 48..63,
|
||||
args: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 49..62,
|
||||
value: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 50..62,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 61..62,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(*data for data in iter)
|
||||
| ^^^^^ Syntax Error: Iterable unpacking cannot be used in a comprehension
|
||||
2 | call(*yield x)
|
||||
3 | call(*yield from x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(*data for data in iter)
|
||||
2 | call(*yield x)
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
3 | call(*yield from x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | call(*data for data in iter)
|
||||
2 | call(*yield x)
|
||||
3 | call(*yield from x)
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/unclosed_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..26,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..5,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..5,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..5,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 7..26,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 11..14,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 14..16,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 22..26,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(
|
||||
| ^ Syntax Error: Expected ')', found newline
|
||||
2 |
|
||||
3 | def foo():
|
||||
4 | pass
|
||||
|
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/unclosed_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..27,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..6,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..6,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..6,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 5..6,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 8..27,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 12..15,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 15..17,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 23..27,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(x
|
||||
| ^ Syntax Error: Expected ')', found newline
|
||||
2 |
|
||||
3 | def foo():
|
||||
4 | pass
|
||||
|
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/arguments/unclosed_2.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..28,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..7,
|
||||
value: Call(
|
||||
ExprCall {
|
||||
range: 0..7,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 0..4,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 4..7,
|
||||
args: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 5..6,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 9..28,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 13..16,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 16..18,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 24..28,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | call(x,
|
||||
| ^ Syntax Error: Expected ')', found newline
|
||||
2 |
|
||||
3 | def foo():
|
||||
4 | pass
|
||||
|
|
||||
@@ -0,0 +1,147 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/attribute/invalid_member.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..16,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..1,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 1..3,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 1..3,
|
||||
value: Float(
|
||||
0.1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 4..5,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 4..5,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 5..7,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..7,
|
||||
value: Float(
|
||||
0.1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 7..9,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 7..9,
|
||||
value: Float(
|
||||
0.0,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 10..15,
|
||||
value: Subscript(
|
||||
ExprSubscript {
|
||||
range: 10..15,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 10..12,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 10..11,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "",
|
||||
range: 12..12,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
slice: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 13..14,
|
||||
value: Int(
|
||||
0,
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x.1
|
||||
| ^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
2 | x.1.0
|
||||
3 | x.[0]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x.1
|
||||
2 | x.1.0
|
||||
| ^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
3 | x.[0]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x.1
|
||||
2 | x.1.0
|
||||
| ^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
3 | x.[0]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x.1
|
||||
2 | x.1.0
|
||||
3 | x.[0]
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
|
|
||||
@@ -0,0 +1,154 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/attribute/multiple_dots.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..46,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..10,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 0..10,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 0..6,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 0..5,
|
||||
id: "extra",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "",
|
||||
range: 6..6,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "dot",
|
||||
range: 7..10,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 11..19,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 11..19,
|
||||
id: "multiple",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 19..27,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 19..27,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 19..22,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "dots",
|
||||
range: 23..27,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 28..36,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 28..36,
|
||||
id: "multiple",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 36..45,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 36..45,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 36..40,
|
||||
value: EllipsisLiteral(
|
||||
ExprEllipsisLiteral {
|
||||
range: 36..39,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "",
|
||||
range: 40..40,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "dots",
|
||||
range: 41..45,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | extra..dot
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
2 | multiple....dots
|
||||
3 | multiple.....dots
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | extra..dot
|
||||
2 | multiple....dots
|
||||
| ^^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
3 | multiple.....dots
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | extra..dot
|
||||
2 | multiple....dots
|
||||
3 | multiple.....dots
|
||||
| ^^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | extra..dot
|
||||
2 | multiple....dots
|
||||
3 | multiple.....dots
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
|
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/attribute/no_member.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..141,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 87..93,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 87..93,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 87..92,
|
||||
id: "first",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "",
|
||||
range: 93..93,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 94..100,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 94..100,
|
||||
id: "second",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 136..141,
|
||||
value: Attribute(
|
||||
ExprAttribute {
|
||||
range: 136..141,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 136..140,
|
||||
id: "last",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "",
|
||||
range: 141..141,
|
||||
},
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # The `second` is a variable on another line and not part of the attribute expression.
|
||||
2 | first.
|
||||
| ^ Syntax Error: Expected an identifier
|
||||
3 | second
|
||||
4 |
|
||||
5 | # No member access after the dot.
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | # No member access after the dot.
|
||||
6 | last.
|
||||
| Syntax Error: Expected an identifier
|
||||
|
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/await/no_expression_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..73,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 61..66,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 61..66,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 66..66,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 68..73,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 68..73,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 68..69,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 72..73,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # No expression after `await`, an expression on another line
|
||||
2 | await
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | x + y
|
||||
|
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/await/no_expression_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..85,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 59..64,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 59..64,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 64..64,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 66..85,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 70..73,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 73..75,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 81..85,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # No expression after `await`, a statement on another line
|
||||
2 | await
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | def foo():
|
||||
5 | pass
|
||||
|
|
||||
@@ -0,0 +1,328 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/await/recover.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..284,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 117..130,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 117..130,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 123..130,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 129..130,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 154..162,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 154..162,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 160..162,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 161..162,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 163..173,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 163..173,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 170..172,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 171..172,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 214..227,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 214..227,
|
||||
value: Yield(
|
||||
ExprYield {
|
||||
range: 220..227,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 226..227,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 228..245,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 228..245,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 234..245,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 241..242,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 241..242,
|
||||
parameter: Parameter {
|
||||
range: 241..242,
|
||||
name: Identifier {
|
||||
id: "x",
|
||||
range: 241..242,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 244..245,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 246..254,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 246..254,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 252..254,
|
||||
op: UAdd,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 253..254,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 255..263,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 255..263,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 261..263,
|
||||
op: USub,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 262..263,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 264..272,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 264..272,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 270..272,
|
||||
op: Invert,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 271..272,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 273..284,
|
||||
value: Await(
|
||||
ExprAwait {
|
||||
range: 273..284,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 279..284,
|
||||
op: Not,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 283..284,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
4 | # Nested await
|
||||
5 | await await x
|
||||
| ^^^^^^^ Syntax Error: Await expression cannot be used here
|
||||
6 |
|
||||
7 | # Starred expressions
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | # Starred expressions
|
||||
8 | await *x
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
9 | await (*x)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | # Starred expressions
|
||||
8 | await *x
|
||||
9 | await (*x)
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
10 |
|
||||
11 | # Invalid expression as per precedence
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
11 | # Invalid expression as per precedence
|
||||
12 | await yield x
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
13 | await lambda x: x
|
||||
14 | await +x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
11 | # Invalid expression as per precedence
|
||||
12 | await yield x
|
||||
13 | await lambda x: x
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
14 | await +x
|
||||
15 | await -x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
12 | await yield x
|
||||
13 | await lambda x: x
|
||||
14 | await +x
|
||||
| ^^ Syntax Error: Unary '+' expression cannot be used here
|
||||
15 | await -x
|
||||
16 | await ~x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
13 | await lambda x: x
|
||||
14 | await +x
|
||||
15 | await -x
|
||||
| ^^ Syntax Error: Unary '-' expression cannot be used here
|
||||
16 | await ~x
|
||||
17 | await not x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
14 | await +x
|
||||
15 | await -x
|
||||
16 | await ~x
|
||||
| ^^ Syntax Error: Unary '~' expression cannot be used here
|
||||
17 | await not x
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
15 | await -x
|
||||
16 | await ~x
|
||||
17 | await not x
|
||||
| ^^^^^ Syntax Error: Boolean 'not' expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,117 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/invalid_rhs_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..28,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..15,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..15,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Lambda(
|
||||
ExprLambda {
|
||||
range: 4..15,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 11..12,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 11..12,
|
||||
parameter: Parameter {
|
||||
range: 11..12,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 11..12,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 14..15,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 17..28,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 17..28,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 17..18,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Sub,
|
||||
right: Yield(
|
||||
ExprYield {
|
||||
range: 21..28,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 27..28,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x + lambda y: y
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
2 |
|
||||
3 | x - yield y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x + lambda y: y
|
||||
2 |
|
||||
3 | x - yield y
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/missing_lhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 2..3,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 2..3,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 5..10,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 5..10,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 9..10,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | / y
|
||||
| ^ Syntax Error: Expected a statement
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/missing_rhs_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..3,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..3,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 0..1,
|
||||
value: Int(
|
||||
0,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 3..3,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 5..10,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 5..10,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 9..10,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | 0 +
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,105 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/missing_rhs_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..18,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..11,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..11,
|
||||
left: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..5,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 0..1,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 4..5,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Sub,
|
||||
right: BinOp(
|
||||
ExprBinOp {
|
||||
range: 8..11,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 8..9,
|
||||
value: Int(
|
||||
3,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Mult,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 11..11,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 13..18,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 13..18,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 13..14,
|
||||
value: Int(
|
||||
4,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 17..18,
|
||||
value: Int(
|
||||
5,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | 1 + 2 - 3 *
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 |
|
||||
3 | 4 + 5
|
||||
|
|
||||
@@ -0,0 +1,150 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/multiple_ops.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..19,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..3,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..3,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 2..3,
|
||||
op: UAdd,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 3..3,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 4..9,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 4..9,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 4..5,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 8..9,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 10..13,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 10..13,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 10..11,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Sub,
|
||||
right: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 12..13,
|
||||
op: USub,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 13..13,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 14..19,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 14..19,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 14..15,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Sub,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 18..19,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x++
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 | 1 + 2
|
||||
3 | x--
|
||||
4 | 1 - 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x++
|
||||
2 | 1 + 2
|
||||
3 | x--
|
||||
| ^ Syntax Error: Expected an expression
|
||||
4 | 1 - 2
|
||||
|
|
||||
@@ -0,0 +1,123 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/named_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..26,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..5,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..5,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Sub,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 4..5,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 9..15,
|
||||
value: Tuple(
|
||||
ExprTuple {
|
||||
range: 9..15,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 10..11,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 13..14,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: true,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 16..21,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 16..21,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Div,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 20..21,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 25..26,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 25..26,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x - y := (1, 2)
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
2 | x / y := 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x - y := (1, 2)
|
||||
2 | x / y := 2
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bin_op/starred_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..14,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..6,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 0..6,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Starred(
|
||||
ExprStarred {
|
||||
range: 4..6,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 5..6,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 7..14,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 7..14,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Pow,
|
||||
right: Starred(
|
||||
ExprStarred {
|
||||
range: 12..14,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 13..14,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x + *y
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | x ** *y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x + *y
|
||||
2 | x ** *y
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,121 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bool_op/invalid_rhs_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..31,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..17,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 0..17,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Lambda(
|
||||
ExprLambda {
|
||||
range: 6..17,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 13..14,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 13..14,
|
||||
parameter: Parameter {
|
||||
range: 13..14,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 13..14,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 16..17,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 19..31,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 19..31,
|
||||
op: Or,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 19..20,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 24..31,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 30..31,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x and lambda y: y
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
2 |
|
||||
3 | x or yield y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x and lambda y: y
|
||||
2 |
|
||||
3 | x or yield y
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bool_op/missing_lhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..5,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 4..5,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 4..5,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | and y
|
||||
| ^^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bool_op/missing_rhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..12,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..5,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 0..5,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 5..5,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 7..12,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 7..12,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 7..8,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 11..12,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x and
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,108 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bool_op/named_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..24,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..7,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 0..7,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 6..7,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 11..12,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 11..12,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 13..19,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 13..19,
|
||||
op: Or,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 13..14,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 18..19,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 23..24,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 23..24,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x and a := b
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
2 | x or a := b
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x and a := b
|
||||
2 | x or a := b
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/bool_op/starred_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..16,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..8,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 0..8,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 6..8,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 7..8,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 9..16,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 9..16,
|
||||
op: Or,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 9..10,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 14..16,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 15..16,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x and *y
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | x or *y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x and *y
|
||||
2 | x or *y
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,169 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/invalid_order.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..131,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..10,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 0..10,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
In,
|
||||
],
|
||||
comparators: [
|
||||
UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 5..10,
|
||||
op: Not,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 9..10,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 35..41,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 35..36,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 38..41,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 38..38,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Gt,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 40..41,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 120..121,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 120..121,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 122..128,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 122..128,
|
||||
op: Not,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 126..128,
|
||||
id: "is",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 129..130,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 129..130,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x in not y
|
||||
| ^^^^^ Syntax Error: Boolean 'not' expression cannot be used here
|
||||
2 |
|
||||
3 | # `=>` instead of `>=`
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | # `=>` instead of `>=`
|
||||
4 | x => y
|
||||
| ^ Syntax Error: Expected an expression
|
||||
5 |
|
||||
6 | # Same here as well, `not` without `in` is considered to be a unary operator
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | # Same here as well, `not` without `in` is considered to be a unary operator
|
||||
7 | x not is y
|
||||
| ^^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | # Same here as well, `not` without `in` is considered to be a unary operator
|
||||
7 | x not is y
|
||||
| ^^ Syntax Error: Expected an identifier, but found a keyword 'is' that cannot be used here
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | # Same here as well, `not` without `in` is considered to be a unary operator
|
||||
7 | x not is y
|
||||
| ^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
|
|
||||
@@ -0,0 +1,125 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/invalid_rhs_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..34,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..20,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 0..20,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
NotIn,
|
||||
],
|
||||
comparators: [
|
||||
Lambda(
|
||||
ExprLambda {
|
||||
range: 9..20,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 16..17,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 16..17,
|
||||
parameter: Parameter {
|
||||
range: 16..17,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 16..17,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 19..20,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 22..34,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 22..34,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 22..23,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Eq,
|
||||
],
|
||||
comparators: [
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 27..34,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 33..34,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x not in lambda y: y
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
2 |
|
||||
3 | x == yield y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x not in lambda y: y
|
||||
2 |
|
||||
3 | x == yield y
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/missing_lhs.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 2..3,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 2..3,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 5..10,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 5..10,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 9..10,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | > y
|
||||
| ^ Syntax Error: Expected a statement
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/missing_rhs_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..3,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 0..3,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Gt,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 3..3,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 5..10,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 5..10,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 9..10,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x >
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/missing_rhs_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..71,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 59..60,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 59..60,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 61..64,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 61..64,
|
||||
op: Not,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 64..64,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 66..71,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 66..71,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 66..67,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 70..71,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Without the `in`, this is considered to be a unary `not`
|
||||
2 | x not
|
||||
| ^^^ Syntax Error: Simple statements must be separated by newlines or semicolons
|
||||
3 |
|
||||
4 | 1 + 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Without the `in`, this is considered to be a unary `not`
|
||||
2 | x not
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/missing_rhs_2.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..15,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..8,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 0..8,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
IsNot,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 8..8,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 10..15,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 10..15,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 10..11,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 14..15,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x is not
|
||||
| ^ Syntax Error: Expected an expression
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
|
|
||||
@@ -0,0 +1,124 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/multiple_equals.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..41,
|
||||
body: [
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 25..32,
|
||||
targets: [
|
||||
Compare(
|
||||
ExprCompare {
|
||||
range: 25..29,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 25..26,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Eq,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 29..29,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 31..32,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 33..40,
|
||||
targets: [
|
||||
Compare(
|
||||
ExprCompare {
|
||||
range: 33..37,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 33..34,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
NotEq,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 37..37,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 39..40,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # This is not JavaScript
|
||||
2 | x === y
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 | x !== y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # This is not JavaScript
|
||||
2 | x === y
|
||||
| ^^^^ Syntax Error: Invalid assignment target
|
||||
3 | x !== y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # This is not JavaScript
|
||||
2 | x === y
|
||||
3 | x !== y
|
||||
| ^ Syntax Error: Expected an expression
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # This is not JavaScript
|
||||
2 | x === y
|
||||
3 | x !== y
|
||||
| ^^^^ Syntax Error: Invalid assignment target
|
||||
|
|
||||
@@ -0,0 +1,131 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/named_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..31,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..10,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 0..10,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
NotIn,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 9..10,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 14..20,
|
||||
value: Tuple(
|
||||
ExprTuple {
|
||||
range: 14..20,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 15..16,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 18..19,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
parenthesized: true,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 21..26,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 21..26,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 21..22,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Gt,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 25..26,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 30..31,
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 30..31,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x not in y := (1, 2)
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
2 | x > y := 2
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x not in y := (1, 2)
|
||||
2 | x > y := 2
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,188 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/compare/starred_expression.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..39,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..7,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 0..7,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
GtE,
|
||||
],
|
||||
comparators: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 5..7,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 6..7,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 8..19,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 8..19,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 8..9,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
NotIn,
|
||||
],
|
||||
comparators: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 17..19,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 18..19,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 21..27,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 21..27,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 22..27,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 22..23,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Lt,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 26..27,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 28..39,
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 28..39,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 29..39,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 29..30,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
IsNot,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 38..39,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | x >= *y
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
2 | x not in *y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | x >= *y
|
||||
2 | x not in *y
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
3 |
|
||||
4 | *x < y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x not in *y
|
||||
3 |
|
||||
4 | *x < y
|
||||
| ^^^^^ Syntax Error: Comparison expression cannot be used here
|
||||
5 | *x is not y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | *x < y
|
||||
5 | *x is not y
|
||||
| ^^^^^^^^^^ Syntax Error: Comparison expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,828 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/comprehension.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..362,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 17..34,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 17..34,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 18..19,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 21..22,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 23..33,
|
||||
target: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 27..28,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 32..33,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 35..54,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 35..54,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 36..37,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 39..40,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 41..53,
|
||||
target: StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 45..48,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 45..48,
|
||||
value: "a",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Single,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 52..53,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 55..77,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 55..77,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 56..57,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 59..60,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 61..76,
|
||||
target: Call(
|
||||
ExprCall {
|
||||
range: 65..71,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 65..69,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 69..71,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 75..76,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 78..100,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 78..100,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 79..80,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 82..83,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 84..99,
|
||||
target: Set(
|
||||
ExprSet {
|
||||
range: 88..94,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 89..90,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 92..93,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 98..99,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 117..135,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 117..135,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 118..119,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 121..122,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 123..134,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 127..128,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Starred(
|
||||
ExprStarred {
|
||||
range: 132..134,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 133..134,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 136..159,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 136..159,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 137..138,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 140..141,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 142..158,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 146..147,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Yield(
|
||||
ExprYield {
|
||||
range: 151..158,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 157..158,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 160..188,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 160..188,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 161..162,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 164..165,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 166..187,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 170..171,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 175..187,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 186..187,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 189..216,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 189..216,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 190..191,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 193..194,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 195..215,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 199..200,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Lambda(
|
||||
ExprLambda {
|
||||
range: 204..215,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 211..212,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 211..212,
|
||||
parameter: Parameter {
|
||||
range: 211..212,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 211..212,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 214..215,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 231..257,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 231..257,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 232..233,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 235..236,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 237..256,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 241..242,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 246..250,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 254..256,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 255..256,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 258..289,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 258..289,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 259..260,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 262..263,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 264..288,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 268..269,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 273..277,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 281..288,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 287..288,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 290..326,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 290..326,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 291..292,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 294..295,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 296..325,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 300..301,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 305..309,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 313..325,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 324..325,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 327..362,
|
||||
value: DictComp(
|
||||
ExprDictComp {
|
||||
range: 327..362,
|
||||
key: Name(
|
||||
ExprName {
|
||||
range: 328..329,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 331..332,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 333..361,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 337..338,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 342..346,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
Lambda(
|
||||
ExprLambda {
|
||||
range: 350..361,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 357..358,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 357..358,
|
||||
parameter: Parameter {
|
||||
range: 357..358,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 357..358,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 360..361,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Invalid target
|
||||
2 | {x: y for 1 in y}
|
||||
| ^ Syntax Error: Invalid assignment target
|
||||
3 | {x: y for 'a' in y}
|
||||
4 | {x: y for call() in y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Invalid target
|
||||
2 | {x: y for 1 in y}
|
||||
3 | {x: y for 'a' in y}
|
||||
| ^^^ Syntax Error: Invalid assignment target
|
||||
4 | {x: y for call() in y}
|
||||
5 | {x: y for {a, b} in y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | {x: y for 1 in y}
|
||||
3 | {x: y for 'a' in y}
|
||||
4 | {x: y for call() in y}
|
||||
| ^^^^^^ Syntax Error: Invalid assignment target
|
||||
5 | {x: y for {a, b} in y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | {x: y for 'a' in y}
|
||||
4 | {x: y for call() in y}
|
||||
5 | {x: y for {a, b} in y}
|
||||
| ^^^^^^ Syntax Error: Invalid assignment target
|
||||
6 |
|
||||
7 | # Invalid iter
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | # Invalid iter
|
||||
8 | {x: y for x in *y}
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
9 | {x: y for x in yield y}
|
||||
10 | {x: y for x in yield from y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | # Invalid iter
|
||||
8 | {x: y for x in *y}
|
||||
9 | {x: y for x in yield y}
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
10 | {x: y for x in yield from y}
|
||||
11 | {x: y for x in lambda y: y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
8 | {x: y for x in *y}
|
||||
9 | {x: y for x in yield y}
|
||||
10 | {x: y for x in yield from y}
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
11 | {x: y for x in lambda y: y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
9 | {x: y for x in yield y}
|
||||
10 | {x: y for x in yield from y}
|
||||
11 | {x: y for x in lambda y: y}
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
12 |
|
||||
13 | # Invalid if
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
13 | # Invalid if
|
||||
14 | {x: y for x in data if *y}
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
15 | {x: y for x in data if yield y}
|
||||
16 | {x: y for x in data if yield from y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
13 | # Invalid if
|
||||
14 | {x: y for x in data if *y}
|
||||
15 | {x: y for x in data if yield y}
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
16 | {x: y for x in data if yield from y}
|
||||
17 | {x: y for x in data if lambda y: y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
14 | {x: y for x in data if *y}
|
||||
15 | {x: y for x in data if yield y}
|
||||
16 | {x: y for x in data if yield from y}
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
17 | {x: y for x in data if lambda y: y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
15 | {x: y for x in data if yield y}
|
||||
16 | {x: y for x in data if yield from y}
|
||||
17 | {x: y for x in data if lambda y: y}
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,576 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/double_star.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..278,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 125..135,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 125..135,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 128..129,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 133..134,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 134..134,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 136..162,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 136..162,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 137..138,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 140..141,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: None,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 145..161,
|
||||
test: BooleanLiteral(
|
||||
ExprBooleanLiteral {
|
||||
range: 150..154,
|
||||
value: true,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 145..146,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 160..161,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 163..184,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 163..184,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 166..177,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 173..174,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 173..174,
|
||||
parameter: Parameter {
|
||||
range: 173..174,
|
||||
name: Identifier {
|
||||
id: "x",
|
||||
range: 173..174,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 176..177,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 179..180,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 182..183,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 185..201,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 185..201,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 186..187,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 189..190,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: None,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 194..200,
|
||||
op: Or,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 194..195,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 199..200,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 202..219,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 202..219,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 205..212,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 205..206,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 211..212,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 214..215,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 217..218,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 220..241,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 220..241,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 221..222,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 224..225,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: None,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 229..234,
|
||||
op: Not,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 233..234,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 236..237,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 239..240,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 242..252,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 242..252,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 245..251,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 245..246,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
In,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 250..251,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 253..267,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 253..267,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 256..266,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 256..257,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
NotIn,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 265..266,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 268..277,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 268..277,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 271..276,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 271..272,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
Lt,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 275..276,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
2 | # the ones which are higher than that.
|
||||
3 |
|
||||
4 | {**x := 1}
|
||||
| ^^ Syntax Error: Expected ',', found ':='
|
||||
5 | {a: 1, **x if True else y}
|
||||
6 | {**lambda x: x, b: 2}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | # the ones which are higher than that.
|
||||
3 |
|
||||
4 | {**x := 1}
|
||||
| ^ Syntax Error: Expected ':', found '}'
|
||||
5 | {a: 1, **x if True else y}
|
||||
6 | {**lambda x: x, b: 2}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | {**x := 1}
|
||||
5 | {a: 1, **x if True else y}
|
||||
| ^^^^^^^^^^^^^^^^ Syntax Error: Conditional expression cannot be used here
|
||||
6 | {**lambda x: x, b: 2}
|
||||
7 | {a: 1, **x or y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | {**x := 1}
|
||||
5 | {a: 1, **x if True else y}
|
||||
6 | {**lambda x: x, b: 2}
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
7 | {a: 1, **x or y}
|
||||
8 | {**x and y, b: 2}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | {a: 1, **x if True else y}
|
||||
6 | {**lambda x: x, b: 2}
|
||||
7 | {a: 1, **x or y}
|
||||
| ^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
8 | {**x and y, b: 2}
|
||||
9 | {a: 1, **not x, b: 2}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | {**lambda x: x, b: 2}
|
||||
7 | {a: 1, **x or y}
|
||||
8 | {**x and y, b: 2}
|
||||
| ^^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
9 | {a: 1, **not x, b: 2}
|
||||
10 | {**x in y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | {a: 1, **x or y}
|
||||
8 | {**x and y, b: 2}
|
||||
9 | {a: 1, **not x, b: 2}
|
||||
| ^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
10 | {**x in y}
|
||||
11 | {**x not in y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
8 | {**x and y, b: 2}
|
||||
9 | {a: 1, **not x, b: 2}
|
||||
10 | {**x in y}
|
||||
| ^^^^^^ Syntax Error: Comparison expression cannot be used here
|
||||
11 | {**x not in y}
|
||||
12 | {**x < y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
9 | {a: 1, **not x, b: 2}
|
||||
10 | {**x in y}
|
||||
11 | {**x not in y}
|
||||
| ^^^^^^^^^^ Syntax Error: Comparison expression cannot be used here
|
||||
12 | {**x < y}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
10 | {**x in y}
|
||||
11 | {**x not in y}
|
||||
12 | {**x < y}
|
||||
| ^^^^^ Syntax Error: Comparison expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,159 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/double_star_comprehension.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..358,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 122..147,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 122..147,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 125..126,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 128..129,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 130..133,
|
||||
id: "for",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 134..135,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 135..135,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Compare(
|
||||
ExprCompare {
|
||||
range: 137..146,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 137..138,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
In,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 142..146,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 146..146,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
2 | # it's actually a comprehension.
|
||||
3 |
|
||||
4 | {**x: y for x, y in data}
|
||||
| ^ Syntax Error: Expected an expression or a '}'
|
||||
5 |
|
||||
6 | # TODO(dhruvmanila): This test case fails because there's no way to represent `**y`
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | # it's actually a comprehension.
|
||||
3 |
|
||||
4 | {**x: y for x, y in data}
|
||||
| ^^^ Syntax Error: Expected ':', found 'for'
|
||||
5 |
|
||||
6 | # TODO(dhruvmanila): This test case fails because there's no way to represent `**y`
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | # it's actually a comprehension.
|
||||
3 |
|
||||
4 | {**x: y for x, y in data}
|
||||
| ^ Syntax Error: Expected ',', found name
|
||||
5 |
|
||||
6 | # TODO(dhruvmanila): This test case fails because there's no way to represent `**y`
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | # it's actually a comprehension.
|
||||
3 |
|
||||
4 | {**x: y for x, y in data}
|
||||
| ^ Syntax Error: Expected ':', found ','
|
||||
5 |
|
||||
6 | # TODO(dhruvmanila): This test case fails because there's no way to represent `**y`
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | # it's actually a comprehension.
|
||||
3 |
|
||||
4 | {**x: y for x, y in data}
|
||||
| ^ Syntax Error: Expected ':', found '}'
|
||||
5 |
|
||||
6 | # TODO(dhruvmanila): This test case fails because there's no way to represent `**y`
|
||||
|
|
||||
@@ -0,0 +1,106 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/missing_closing_brace_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..24,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..24,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 0..24,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 1..2,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 5..8,
|
||||
id: "def",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Call(
|
||||
ExprCall {
|
||||
range: 9..14,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 9..12,
|
||||
id: "foo",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 12..14,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 20..24,
|
||||
id: "pass",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | {x:
|
||||
2 |
|
||||
3 | def foo():
|
||||
| ^^^ Syntax Error: Expected an identifier, but found a keyword 'def' that cannot be used here
|
||||
4 | pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | {x:
|
||||
2 |
|
||||
3 | def foo():
|
||||
| ^^^ Syntax Error: Expected ',', found name
|
||||
4 | pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | def foo():
|
||||
4 | pass
|
||||
| ^^^^ Syntax Error: Expected an identifier, but found a keyword 'pass' that cannot be used here
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | def foo():
|
||||
4 | pass
|
||||
| Syntax Error: unexpected EOF while parsing
|
||||
|
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/missing_closing_brace_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..10,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..10,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 0..10,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 1..2,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 5..10,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 5..6,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 9..10,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | {x:
|
||||
2 |
|
||||
3 | 1 + 2
|
||||
| Syntax Error: unexpected EOF while parsing
|
||||
|
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/missing_closing_brace_2.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..27,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..6,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 0..6,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 1..2,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 4..5,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 8..27,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 12..15,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 15..17,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 23..27,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | {x: 1,
|
||||
| ^ Syntax Error: Expected '}', found newline
|
||||
2 |
|
||||
3 | def foo():
|
||||
4 | pass
|
||||
|
|
||||
@@ -0,0 +1,141 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/named_expression_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..84,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 55..77,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 55..77,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Named(
|
||||
ExprNamed {
|
||||
range: 56..62,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 56..57,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 61..62,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 64..65,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 67..68,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 68..68,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 72..73,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 75..76,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 79..84,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 79..84,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 79..80,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 83..84,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Unparenthesized named expression not allowed in key
|
||||
2 |
|
||||
3 | {x := 1: y, z := 2: a}
|
||||
| ^^^^^^ Syntax Error: Unparenthesized named expression cannot be used here
|
||||
4 |
|
||||
5 | x + y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Unparenthesized named expression not allowed in key
|
||||
2 |
|
||||
3 | {x := 1: y, z := 2: a}
|
||||
| ^^ Syntax Error: Expected ':', found ':='
|
||||
4 |
|
||||
5 | x + y
|
||||
|
|
||||
@@ -0,0 +1,167 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/named_expression_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..86,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 57..79,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 57..79,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 58..59,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 61..62,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 66..67,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 67..67,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 69..70,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 72..73,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 77..78,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 78..78,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 81..86,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 81..86,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 81..82,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 85..86,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Unparenthesized named expression not allowed in value
|
||||
2 |
|
||||
3 | {x: y := 1, z: a := 2}
|
||||
| ^^ Syntax Error: Expected ',', found ':='
|
||||
4 |
|
||||
5 | x + y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Unparenthesized named expression not allowed in value
|
||||
2 |
|
||||
3 | {x: y := 1, z: a := 2}
|
||||
| ^ Syntax Error: Expected ':', found ','
|
||||
4 |
|
||||
5 | x + y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Unparenthesized named expression not allowed in value
|
||||
2 |
|
||||
3 | {x: y := 1, z: a := 2}
|
||||
| ^^ Syntax Error: Expected ',', found ':='
|
||||
4 |
|
||||
5 | x + y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Unparenthesized named expression not allowed in value
|
||||
2 |
|
||||
3 | {x: y := 1, z: a := 2}
|
||||
| ^ Syntax Error: Expected ':', found '}'
|
||||
4 |
|
||||
5 | x + y
|
||||
|
|
||||
@@ -0,0 +1,518 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/dict/recover.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..346,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 88..91,
|
||||
value: Set(
|
||||
ExprSet {
|
||||
range: 88..91,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 89..89,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 93..105,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 93..105,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 94..95,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 97..98,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 100..101,
|
||||
value: Int(
|
||||
3,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 103..104,
|
||||
value: Int(
|
||||
4,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 107..115,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 107..115,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 108..109,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 111..112,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 133..144,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 133..144,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 134..135,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 137..138,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 139..140,
|
||||
value: Int(
|
||||
3,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 142..143,
|
||||
value: Int(
|
||||
4,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 157..162,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 157..162,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 158..159,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 160..160,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 201..205,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 201..205,
|
||||
items: [
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 204..204,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 206..222,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 206..222,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 207..208,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 210..211,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: None,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 215..215,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 217..218,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 220..221,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 310..330,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 310..330,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 311..313,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 312..313,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 315..316,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 318..319,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 321..322,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 324..326,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 325..326,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 328..329,
|
||||
id: "c",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 331..345,
|
||||
value: Dict(
|
||||
ExprDict {
|
||||
range: 331..345,
|
||||
items: [
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 332..333,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 335..337,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 336..337,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
DictItem {
|
||||
key: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 339..340,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
value: Starred(
|
||||
ExprStarred {
|
||||
range: 342..344,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 343..344,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Test cases for dictionary expressions where the parser recovers from a syntax error.
|
||||
2 |
|
||||
3 | {,}
|
||||
| ^ Syntax Error: Expected an expression
|
||||
4 |
|
||||
5 | {1: 2,,3: 4}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | {,}
|
||||
4 |
|
||||
5 | {1: 2,,3: 4}
|
||||
| ^ Syntax Error: Expected an expression or a '}'
|
||||
6 |
|
||||
7 | {1: 2,,}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | {1: 2,,3: 4}
|
||||
6 |
|
||||
7 | {1: 2,,}
|
||||
| ^ Syntax Error: Expected an expression or a '}'
|
||||
8 |
|
||||
9 | # Missing comma
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
9 | # Missing comma
|
||||
10 | {1: 2 3: 4}
|
||||
| ^ Syntax Error: Expected ',', found int
|
||||
11 |
|
||||
12 | # No value
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
12 | # No value
|
||||
13 | {1: }
|
||||
| ^ Syntax Error: Expected an expression
|
||||
14 |
|
||||
15 | # No value for double star unpacking
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
15 | # No value for double star unpacking
|
||||
16 | {**}
|
||||
| ^ Syntax Error: Expected an expression
|
||||
17 | {x: y, **, a: b}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
15 | # No value for double star unpacking
|
||||
16 | {**}
|
||||
17 | {x: y, **, a: b}
|
||||
| ^ Syntax Error: Expected an expression
|
||||
18 |
|
||||
19 | # This is not a double star unpacking
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
22 | # Star expression not allowed here
|
||||
23 | {*x: y, z: a, *b: c}
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
24 | {x: *y, z: *a}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
22 | # Star expression not allowed here
|
||||
23 | {*x: y, z: a, *b: c}
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
24 | {x: *y, z: *a}
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
22 | # Star expression not allowed here
|
||||
23 | {*x: y, z: a, *b: c}
|
||||
24 | {x: *y, z: *a}
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
22 | # Star expression not allowed here
|
||||
23 | {*x: y, z: a, *b: c}
|
||||
24 | {x: *y, z: *a}
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,139 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/emoji_identifiers.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..64,
|
||||
body: [
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 0..5,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 0..1,
|
||||
id: "a",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 5..5,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Assign(
|
||||
StmtAssign {
|
||||
range: 32..37,
|
||||
targets: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 32..33,
|
||||
id: "a",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 37..37,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 42..43,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 42..43,
|
||||
op: UAdd,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 43..43,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | a = (🐶
|
||||
| ^^ Syntax Error: Got unexpected token 🐶
|
||||
2 | # comment 🐶
|
||||
3 | )
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | a = (🐶
|
||||
2 | # comment 🐶
|
||||
3 | )
|
||||
| ^ Syntax Error: Expected a statement
|
||||
4 |
|
||||
5 | a = (🐶 +
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | a = (🐶
|
||||
2 | # comment 🐶
|
||||
3 | )
|
||||
| ^ Syntax Error: Expected a statement
|
||||
4 |
|
||||
5 | a = (🐶 +
|
||||
6 | # comment
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | )
|
||||
4 |
|
||||
5 | a = (🐶 +
|
||||
| ^^ Syntax Error: Got unexpected token 🐶
|
||||
6 | # comment
|
||||
7 | 🐶)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | a = (🐶 +
|
||||
6 | # comment
|
||||
7 | 🐶)
|
||||
| ^^ Syntax Error: Got unexpected token 🐶
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | a = (🐶 +
|
||||
6 | # comment
|
||||
7 | 🐶)
|
||||
| ^ Syntax Error: Expected a statement
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | a = (🐶 +
|
||||
6 | # comment
|
||||
7 | 🐶)
|
||||
| ^ Syntax Error: Expected a statement
|
||||
|
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/if/missing_orelse_expr_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..88,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 53..67,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 53..67,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 58..62,
|
||||
id: "expr",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 53..54,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 67..67,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 69..88,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 73..76,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 76..78,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 84..88,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Missing orelse expression, followed by a statement
|
||||
2 | x if expr else
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | def foo():
|
||||
5 | pass
|
||||
|
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/if/missing_orelse_expr_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..76,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 55..69,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 55..69,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 60..64,
|
||||
id: "expr",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 55..56,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 69..69,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 71..76,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 71..76,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 71..72,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 75..76,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Missing orelse expression, followed by an expression
|
||||
2 | x if expr else
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | 1 + 1
|
||||
|
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/if/missing_test_expr_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..76,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 51..55,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 51..55,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 55..55,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 51..52,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 55..55,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 57..76,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 61..64,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 64..66,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 72..76,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Missing test expression, followed by a statement
|
||||
2 | x if
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | def foo():
|
||||
5 | pass
|
||||
|
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/if/missing_test_expr_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..64,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 53..57,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 53..57,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 57..57,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 53..54,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 57..57,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 59..64,
|
||||
value: BinOp(
|
||||
ExprBinOp {
|
||||
range: 59..64,
|
||||
left: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 59..60,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 63..64,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Missing test expression, followed by an expression
|
||||
2 | x if
|
||||
| ^ Syntax Error: Expected an expression
|
||||
3 |
|
||||
4 | 1 + 1
|
||||
|
|
||||
@@ -0,0 +1,361 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/if/recover.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..215,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 26..43,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 26..43,
|
||||
test: Starred(
|
||||
ExprStarred {
|
||||
range: 31..36,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 32..36,
|
||||
id: "expr",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 26..27,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 42..43,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 44..67,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 44..67,
|
||||
test: Lambda(
|
||||
ExprLambda {
|
||||
range: 49..60,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 56..57,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 56..57,
|
||||
parameter: Parameter {
|
||||
range: 56..57,
|
||||
name: Identifier {
|
||||
id: "x",
|
||||
range: 56..57,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 59..60,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 44..45,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 66..67,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 68..87,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 68..87,
|
||||
test: Yield(
|
||||
ExprYield {
|
||||
range: 73..80,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 79..80,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 68..69,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 86..87,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 88..112,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 88..112,
|
||||
test: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 93..105,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 104..105,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 88..89,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 111..112,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 142..164,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 142..164,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 147..151,
|
||||
id: "expr",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 142..143,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Starred(
|
||||
ExprStarred {
|
||||
range: 157..164,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 158..164,
|
||||
id: "orelse",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 165..187,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 165..187,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 170..174,
|
||||
id: "expr",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 165..166,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Yield(
|
||||
ExprYield {
|
||||
range: 180..187,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 186..187,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 188..215,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 188..215,
|
||||
test: Name(
|
||||
ExprName {
|
||||
range: 193..197,
|
||||
id: "expr",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 188..189,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 203..215,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 214..215,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Invalid test expression
|
||||
2 | x if *expr else y
|
||||
| ^^^^^ Syntax Error: Starred expression cannot be used here
|
||||
3 | x if lambda x: x else y
|
||||
4 | x if yield x else y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # Invalid test expression
|
||||
2 | x if *expr else y
|
||||
3 | x if lambda x: x else y
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
4 | x if yield x else y
|
||||
5 | x if yield from x else y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
2 | x if *expr else y
|
||||
3 | x if lambda x: x else y
|
||||
4 | x if yield x else y
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
5 | x if yield from x else y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | x if lambda x: x else y
|
||||
4 | x if yield x else y
|
||||
5 | x if yield from x else y
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
6 |
|
||||
7 | # Invalid orelse expression
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | # Invalid orelse expression
|
||||
8 | x if expr else *orelse
|
||||
| ^^^^^^^ Syntax Error: Starred expression cannot be used here
|
||||
9 | x if expr else yield y
|
||||
10 | x if expr else yield from y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | # Invalid orelse expression
|
||||
8 | x if expr else *orelse
|
||||
9 | x if expr else yield y
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
10 | x if expr else yield from y
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
8 | x if expr else *orelse
|
||||
9 | x if expr else yield y
|
||||
10 | x if expr else yield from y
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/lambda_default_parameters.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..20,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..20,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 0..20,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 7..17,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 7..8,
|
||||
parameter: Parameter {
|
||||
range: 7..8,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 7..8,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
ParameterWithDefault {
|
||||
range: 10..14,
|
||||
parameter: Parameter {
|
||||
range: 10..11,
|
||||
name: Identifier {
|
||||
id: "b",
|
||||
range: 10..11,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 12..14,
|
||||
value: Int(
|
||||
20,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
ParameterWithDefault {
|
||||
range: 16..17,
|
||||
parameter: Parameter {
|
||||
range: 16..17,
|
||||
name: Identifier {
|
||||
id: "c",
|
||||
range: 16..17,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 19..20,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | lambda a, b=20, c: 1
|
||||
| ^ Syntax Error: Parameter without a default cannot follow a parameter with a default
|
||||
|
|
||||
@@ -0,0 +1,339 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/lambda_duplicate_parameters.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..91,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 0..14,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 0..14,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 7..11,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 7..8,
|
||||
parameter: Parameter {
|
||||
range: 7..8,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 7..8,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
ParameterWithDefault {
|
||||
range: 10..11,
|
||||
parameter: Parameter {
|
||||
range: 10..11,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 10..11,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 13..14,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 16..33,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 16..33,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 23..30,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 23..24,
|
||||
parameter: Parameter {
|
||||
range: 23..24,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 23..24,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [
|
||||
ParameterWithDefault {
|
||||
range: 29..30,
|
||||
parameter: Parameter {
|
||||
range: 29..30,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 29..30,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 32..33,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 35..52,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 35..52,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 42..49,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 42..43,
|
||||
parameter: Parameter {
|
||||
range: 42..43,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 42..43,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
ParameterWithDefault {
|
||||
range: 45..49,
|
||||
parameter: Parameter {
|
||||
range: 45..46,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 45..46,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: Some(
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 47..49,
|
||||
value: Int(
|
||||
20,
|
||||
),
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 51..52,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 54..69,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 54..69,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 61..66,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 61..62,
|
||||
parameter: Parameter {
|
||||
range: 61..62,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 61..62,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: Some(
|
||||
Parameter {
|
||||
range: 64..66,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 65..66,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
),
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 68..69,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 71..90,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 71..90,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 78..87,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 78..79,
|
||||
parameter: Parameter {
|
||||
range: 78..79,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 78..79,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: Some(
|
||||
Parameter {
|
||||
range: 84..87,
|
||||
name: Identifier {
|
||||
id: "a",
|
||||
range: 86..87,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
body: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 89..90,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | lambda a, a: 1
|
||||
| ^ Syntax Error: Duplicate parameter "a"
|
||||
2 |
|
||||
3 | lambda a, *, a: 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | lambda a, a: 1
|
||||
2 |
|
||||
3 | lambda a, *, a: 1
|
||||
| ^ Syntax Error: Duplicate parameter "a"
|
||||
4 |
|
||||
5 | lambda a, a=20: 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | lambda a, *, a: 1
|
||||
4 |
|
||||
5 | lambda a, a=20: 1
|
||||
| ^ Syntax Error: Duplicate parameter "a"
|
||||
6 |
|
||||
7 | lambda a, *a: 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | lambda a, a=20: 1
|
||||
6 |
|
||||
7 | lambda a, *a: 1
|
||||
| ^ Syntax Error: Duplicate parameter "a"
|
||||
8 |
|
||||
9 | lambda a, *, **a: 1
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | lambda a, *a: 1
|
||||
8 |
|
||||
9 | lambda a, *, **a: 1
|
||||
| ^^^ Syntax Error: Expected one or more keyword parameter after '*' separator
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | lambda a, *a: 1
|
||||
8 |
|
||||
9 | lambda a, *, **a: 1
|
||||
| ^ Syntax Error: Duplicate parameter "a"
|
||||
|
|
||||
@@ -0,0 +1,797 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/comprehension.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..376,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 33..48,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 33..48,
|
||||
elt: Starred(
|
||||
ExprStarred {
|
||||
range: 34..36,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 35..36,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 37..47,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 41..42,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 46..47,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 67..81,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 67..81,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 68..69,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 70..80,
|
||||
target: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 74..75,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 79..80,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 82..98,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 82..98,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 83..84,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 85..97,
|
||||
target: StringLiteral(
|
||||
ExprStringLiteral {
|
||||
range: 89..92,
|
||||
value: StringLiteralValue {
|
||||
inner: Single(
|
||||
StringLiteral {
|
||||
range: 89..92,
|
||||
value: "a",
|
||||
flags: StringLiteralFlags {
|
||||
quote_style: Single,
|
||||
prefix: Empty,
|
||||
triple_quoted: false,
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 96..97,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 99..118,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 99..118,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 100..101,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 102..117,
|
||||
target: Call(
|
||||
ExprCall {
|
||||
range: 106..112,
|
||||
func: Name(
|
||||
ExprName {
|
||||
range: 106..110,
|
||||
id: "call",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
arguments: Arguments {
|
||||
range: 110..112,
|
||||
args: [],
|
||||
keywords: [],
|
||||
},
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 116..117,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 119..138,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 119..138,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 120..121,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 122..137,
|
||||
target: Set(
|
||||
ExprSet {
|
||||
range: 126..132,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 127..128,
|
||||
id: "a",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 130..131,
|
||||
id: "b",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 136..137,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 155..170,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 155..170,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 156..157,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 158..169,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 162..163,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Starred(
|
||||
ExprStarred {
|
||||
range: 167..169,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 168..169,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 171..191,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 171..191,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 172..173,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 174..190,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 178..179,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Yield(
|
||||
ExprYield {
|
||||
range: 183..190,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 189..190,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 192..217,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 192..217,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 193..194,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 195..216,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 199..200,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 204..216,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 215..216,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 218..242,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 218..242,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 219..220,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 221..241,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 225..226,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Lambda(
|
||||
ExprLambda {
|
||||
range: 230..241,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 237..238,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 237..238,
|
||||
parameter: Parameter {
|
||||
range: 237..238,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 237..238,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 240..241,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ifs: [],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 257..280,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 257..280,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 258..259,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 260..279,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 264..265,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 269..273,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 277..279,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 278..279,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 281..309,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 281..309,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 282..283,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 284..308,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 288..289,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 293..297,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
Yield(
|
||||
ExprYield {
|
||||
range: 301..308,
|
||||
value: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 307..308,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 310..343,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 310..343,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 311..312,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 313..342,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 317..318,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 322..326,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
YieldFrom(
|
||||
ExprYieldFrom {
|
||||
range: 330..342,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 341..342,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 344..376,
|
||||
value: ListComp(
|
||||
ExprListComp {
|
||||
range: 344..376,
|
||||
elt: Name(
|
||||
ExprName {
|
||||
range: 345..346,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
generators: [
|
||||
Comprehension {
|
||||
range: 347..375,
|
||||
target: Name(
|
||||
ExprName {
|
||||
range: 351..352,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
iter: Name(
|
||||
ExprName {
|
||||
range: 356..360,
|
||||
id: "data",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ifs: [
|
||||
Lambda(
|
||||
ExprLambda {
|
||||
range: 364..375,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 371..372,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 371..372,
|
||||
parameter: Parameter {
|
||||
range: 371..372,
|
||||
name: Identifier {
|
||||
id: "y",
|
||||
range: 371..372,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 374..375,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
is_async: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Iterable unpacking not allowed
|
||||
2 | [*x for x in y]
|
||||
| ^^ Syntax Error: Iterable unpacking cannot be used in a comprehension
|
||||
3 |
|
||||
4 | # Invalid target
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | # Invalid target
|
||||
5 | [x for 1 in y]
|
||||
| ^ Syntax Error: Invalid assignment target
|
||||
6 | [x for 'a' in y]
|
||||
7 | [x for call() in y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | # Invalid target
|
||||
5 | [x for 1 in y]
|
||||
6 | [x for 'a' in y]
|
||||
| ^^^ Syntax Error: Invalid assignment target
|
||||
7 | [x for call() in y]
|
||||
8 | [x for {a, b} in y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | [x for 1 in y]
|
||||
6 | [x for 'a' in y]
|
||||
7 | [x for call() in y]
|
||||
| ^^^^^^ Syntax Error: Invalid assignment target
|
||||
8 | [x for {a, b} in y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | [x for 'a' in y]
|
||||
7 | [x for call() in y]
|
||||
8 | [x for {a, b} in y]
|
||||
| ^^^^^^ Syntax Error: Invalid assignment target
|
||||
9 |
|
||||
10 | # Invalid iter
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
10 | # Invalid iter
|
||||
11 | [x for x in *y]
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
12 | [x for x in yield y]
|
||||
13 | [x for x in yield from y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
10 | # Invalid iter
|
||||
11 | [x for x in *y]
|
||||
12 | [x for x in yield y]
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
13 | [x for x in yield from y]
|
||||
14 | [x for x in lambda y: y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
11 | [x for x in *y]
|
||||
12 | [x for x in yield y]
|
||||
13 | [x for x in yield from y]
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
14 | [x for x in lambda y: y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
12 | [x for x in yield y]
|
||||
13 | [x for x in yield from y]
|
||||
14 | [x for x in lambda y: y]
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
15 |
|
||||
16 | # Invalid if
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
16 | # Invalid if
|
||||
17 | [x for x in data if *y]
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
18 | [x for x in data if yield y]
|
||||
19 | [x for x in data if yield from y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
16 | # Invalid if
|
||||
17 | [x for x in data if *y]
|
||||
18 | [x for x in data if yield y]
|
||||
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
19 | [x for x in data if yield from y]
|
||||
20 | [x for x in data if lambda y: y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
17 | [x for x in data if *y]
|
||||
18 | [x for x in data if yield y]
|
||||
19 | [x for x in data if yield from y]
|
||||
| ^^^^^^^^^^^^ Syntax Error: Yield expression cannot be used here
|
||||
20 | [x for x in data if lambda y: y]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
18 | [x for x in data if yield y]
|
||||
19 | [x for x in data if yield from y]
|
||||
20 | [x for x in data if lambda y: y]
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
|
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/missing_closing_bracket_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..43,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 42..43,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 42..43,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 43..43,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Missing closing bracket 0: No elements
|
||||
2 |
|
||||
3 | [
|
||||
| Syntax Error: unexpected EOF while parsing
|
||||
|
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/missing_closing_bracket_1.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..133,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 125..133,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 125..133,
|
||||
elts: [
|
||||
BinOp(
|
||||
ExprBinOp {
|
||||
range: 128..133,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 128..129,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 132..133,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
4 | [
|
||||
5 |
|
||||
6 | x + y
|
||||
| Syntax Error: unexpected EOF while parsing
|
||||
|
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/missing_closing_bracket_2.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..141,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 131..141,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 131..141,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 132..133,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
BinOp(
|
||||
ExprBinOp {
|
||||
range: 136..141,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 136..137,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 140..141,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
4 | [1,
|
||||
5 |
|
||||
6 | x + y
|
||||
| Syntax Error: unexpected EOF while parsing
|
||||
|
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/missing_closing_bracket_3.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..140,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 114..119,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 114..119,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 115..116,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 118..119,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
FunctionDef(
|
||||
StmtFunctionDef {
|
||||
range: 121..140,
|
||||
is_async: false,
|
||||
decorator_list: [],
|
||||
name: Identifier {
|
||||
id: "foo",
|
||||
range: 125..128,
|
||||
},
|
||||
type_params: None,
|
||||
parameters: Parameters {
|
||||
range: 128..130,
|
||||
posonlyargs: [],
|
||||
args: [],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
returns: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 136..140,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
2 | # token starts a statement.
|
||||
3 |
|
||||
4 | [1, 2
|
||||
| ^ Syntax Error: Expected ']', found newline
|
||||
5 |
|
||||
6 | def foo():
|
||||
7 | pass
|
||||
|
|
||||
@@ -0,0 +1,315 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/recover.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..208,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 82..85,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 82..85,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 83..83,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 87..93,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 87..93,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 88..89,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 91..92,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 95..100,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 95..100,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 96..97,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 118..123,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 118..123,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 119..120,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 121..122,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 156..162,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 156..162,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 157..158,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 160..161,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 185..194,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 185..194,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 186..187,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
BinOp(
|
||||
ExprBinOp {
|
||||
range: 189..192,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 189..190,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
op: Add,
|
||||
right: Name(
|
||||
ExprName {
|
||||
range: 192..192,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 196..202,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 196..202,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 197..198,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 200..201,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 204..207,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 204..207,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 205..206,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 206..206,
|
||||
id: "",
|
||||
ctx: Invalid,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Test cases for list expressions where the parser recovers from a syntax error.
|
||||
2 |
|
||||
3 | [,]
|
||||
| ^ Syntax Error: Expected an expression
|
||||
4 |
|
||||
5 | [1,,2]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | [,]
|
||||
4 |
|
||||
5 | [1,,2]
|
||||
| ^ Syntax Error: Expected an expression or a ']'
|
||||
6 |
|
||||
7 | [1,,]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | [1,,2]
|
||||
6 |
|
||||
7 | [1,,]
|
||||
| ^ Syntax Error: Expected an expression or a ']'
|
||||
8 |
|
||||
9 | # Missing comma
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
9 | # Missing comma
|
||||
10 | [1 2]
|
||||
| ^ Syntax Error: Expected ',', found int
|
||||
11 |
|
||||
12 | # Dictionary element in a list
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
12 | # Dictionary element in a list
|
||||
13 | [1: 2]
|
||||
| ^ Syntax Error: Expected an expression or a ']'
|
||||
14 |
|
||||
15 | # Missing expression
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
15 | # Missing expression
|
||||
16 | [1, x + ]
|
||||
| ^ Syntax Error: Expected an expression
|
||||
17 |
|
||||
18 | [1; 2]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
16 | [1, x + ]
|
||||
17 |
|
||||
18 | [1; 2]
|
||||
| ^ Syntax Error: Expected an expression or a ']'
|
||||
19 |
|
||||
20 | [*]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
18 | [1; 2]
|
||||
19 |
|
||||
20 | [*]
|
||||
| ^ Syntax Error: Expected an expression
|
||||
|
|
||||
@@ -0,0 +1,468 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/list/star_expression_precedence.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..200,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 84..93,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 84..93,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 86..88,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 87..88,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 91..92,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 94..106,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 94..106,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 95..102,
|
||||
value: Compare(
|
||||
ExprCompare {
|
||||
range: 96..102,
|
||||
left: Name(
|
||||
ExprName {
|
||||
range: 96..97,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ops: [
|
||||
In,
|
||||
],
|
||||
comparators: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 101..102,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 104..105,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 107..118,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 107..118,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 108..114,
|
||||
value: UnaryOp(
|
||||
ExprUnaryOp {
|
||||
range: 109..114,
|
||||
op: Not,
|
||||
operand: Name(
|
||||
ExprName {
|
||||
range: 113..114,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 116..117,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 119..132,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 119..132,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 120..128,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 121..128,
|
||||
op: And,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 121..122,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 127..128,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 130..131,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 133..145,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 133..145,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 134..141,
|
||||
value: BoolOp(
|
||||
ExprBoolOp {
|
||||
range: 135..141,
|
||||
op: Or,
|
||||
values: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 135..136,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 140..141,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 143..144,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 146..168,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 146..168,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 147..164,
|
||||
value: If(
|
||||
ExprIf {
|
||||
range: 148..164,
|
||||
test: BooleanLiteral(
|
||||
ExprBooleanLiteral {
|
||||
range: 153..157,
|
||||
value: true,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 148..149,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
orelse: Name(
|
||||
ExprName {
|
||||
range: 163..164,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 166..167,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 169..186,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 169..186,
|
||||
elts: [
|
||||
Starred(
|
||||
ExprStarred {
|
||||
range: 170..182,
|
||||
value: Lambda(
|
||||
ExprLambda {
|
||||
range: 171..182,
|
||||
parameters: Some(
|
||||
Parameters {
|
||||
range: 178..179,
|
||||
posonlyargs: [],
|
||||
args: [
|
||||
ParameterWithDefault {
|
||||
range: 178..179,
|
||||
parameter: Parameter {
|
||||
range: 178..179,
|
||||
name: Identifier {
|
||||
id: "x",
|
||||
range: 178..179,
|
||||
},
|
||||
annotation: None,
|
||||
},
|
||||
default: None,
|
||||
},
|
||||
],
|
||||
vararg: None,
|
||||
kwonlyargs: [],
|
||||
kwarg: None,
|
||||
},
|
||||
),
|
||||
body: Name(
|
||||
ExprName {
|
||||
range: 181..182,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 184..185,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 187..199,
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 187..199,
|
||||
elts: [
|
||||
Named(
|
||||
ExprNamed {
|
||||
range: 188..195,
|
||||
target: Starred(
|
||||
ExprStarred {
|
||||
range: 188..190,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 189..190,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 194..195,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 197..198,
|
||||
id: "z",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # For list expression, the minimum binding power of star expression is bitwise or.
|
||||
2 |
|
||||
3 | [(*x), y]
|
||||
| ^^ Syntax Error: Starred expression cannot be used here
|
||||
4 | [*x in y, z]
|
||||
5 | [*not x, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | [(*x), y]
|
||||
4 | [*x in y, z]
|
||||
| ^^^^^^ Syntax Error: Comparison expression cannot be used here
|
||||
5 | [*not x, z]
|
||||
6 | [*x and y, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | [(*x), y]
|
||||
4 | [*x in y, z]
|
||||
5 | [*not x, z]
|
||||
| ^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
6 | [*x and y, z]
|
||||
7 | [*x or y, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | [*x in y, z]
|
||||
5 | [*not x, z]
|
||||
6 | [*x and y, z]
|
||||
| ^^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
7 | [*x or y, z]
|
||||
8 | [*x if True else y, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
5 | [*not x, z]
|
||||
6 | [*x and y, z]
|
||||
7 | [*x or y, z]
|
||||
| ^^^^^^ Syntax Error: Boolean expression cannot be used here
|
||||
8 | [*x if True else y, z]
|
||||
9 | [*lambda x: x, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
6 | [*x and y, z]
|
||||
7 | [*x or y, z]
|
||||
8 | [*x if True else y, z]
|
||||
| ^^^^^^^^^^^^^^^^ Syntax Error: Conditional expression cannot be used here
|
||||
9 | [*lambda x: x, z]
|
||||
10 | [*x := 2, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
7 | [*x or y, z]
|
||||
8 | [*x if True else y, z]
|
||||
9 | [*lambda x: x, z]
|
||||
| ^^^^^^^^^^^ Syntax Error: Lambda expression cannot be used here
|
||||
10 | [*x := 2, z]
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
8 | [*x if True else y, z]
|
||||
9 | [*lambda x: x, z]
|
||||
10 | [*x := 2, z]
|
||||
| ^^ Syntax Error: Assignment expression target must be an identifier
|
||||
|
|
||||
@@ -0,0 +1,212 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/named/invalid_target.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..109,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 58..68,
|
||||
value: Named(
|
||||
ExprNamed {
|
||||
range: 59..67,
|
||||
target: Attribute(
|
||||
ExprAttribute {
|
||||
range: 59..62,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 59..60,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
attr: Identifier {
|
||||
id: "y",
|
||||
range: 61..62,
|
||||
},
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 66..67,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 69..80,
|
||||
value: Named(
|
||||
ExprNamed {
|
||||
range: 70..79,
|
||||
target: Subscript(
|
||||
ExprSubscript {
|
||||
range: 70..74,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 70..71,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
slice: Name(
|
||||
ExprName {
|
||||
range: 72..73,
|
||||
id: "y",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 78..79,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 81..90,
|
||||
value: Named(
|
||||
ExprNamed {
|
||||
range: 82..89,
|
||||
target: Starred(
|
||||
ExprStarred {
|
||||
range: 82..84,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 83..84,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
value: NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 88..89,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 91..109,
|
||||
value: Named(
|
||||
ExprNamed {
|
||||
range: 92..108,
|
||||
target: List(
|
||||
ExprList {
|
||||
range: 92..98,
|
||||
elts: [
|
||||
Name(
|
||||
ExprName {
|
||||
range: 93..94,
|
||||
id: "x",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
Name(
|
||||
ExprName {
|
||||
range: 96..97,
|
||||
id: "y",
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Store,
|
||||
},
|
||||
),
|
||||
value: List(
|
||||
ExprList {
|
||||
range: 102..108,
|
||||
elts: [
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 103..104,
|
||||
value: Int(
|
||||
1,
|
||||
),
|
||||
},
|
||||
),
|
||||
NumberLiteral(
|
||||
ExprNumberLiteral {
|
||||
range: 106..107,
|
||||
value: Int(
|
||||
2,
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # Assignment expression target can only be an identifier
|
||||
2 |
|
||||
3 | (x.y := 1)
|
||||
| ^^^ Syntax Error: Assignment expression target must be an identifier
|
||||
4 | (x[y] := 1)
|
||||
5 | (*x := 1)
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | (x.y := 1)
|
||||
4 | (x[y] := 1)
|
||||
| ^^^^ Syntax Error: Assignment expression target must be an identifier
|
||||
5 | (*x := 1)
|
||||
6 | ([x, y] := [1, 2])
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
3 | (x.y := 1)
|
||||
4 | (x[y] := 1)
|
||||
5 | (*x := 1)
|
||||
| ^^ Syntax Error: Assignment expression target must be an identifier
|
||||
6 | ([x, y] := [1, 2])
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
4 | (x[y] := 1)
|
||||
5 | (*x := 1)
|
||||
6 | ([x, y] := [1, 2])
|
||||
| ^^^^^^ Syntax Error: Assignment expression target must be an identifier
|
||||
|
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
assertion_line: 122
|
||||
input_file: crates/ruff_python_parser/resources/invalid/expressions/named/missing_expression_0.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..75,
|
||||
body: [
|
||||
Expr(
|
||||
StmtExpr {
|
||||
range: 71..72,
|
||||
value: Name(
|
||||
ExprName {
|
||||
range: 71..72,
|
||||
id: "x",
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
1 | # There are no parentheses, so this isn't parsed as named expression.
|
||||
2 |
|
||||
3 | x :=
|
||||
| ^^ Syntax Error: Expected a statement
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
1 | # There are no parentheses, so this isn't parsed as named expression.
|
||||
2 |
|
||||
3 | x :=
|
||||
| Syntax Error: Expected a statement
|
||||
|
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user