Implement template strings (#17851)

This PR implements template strings (t-strings) in the parser and
formatter for Ruff.

Minimal changes necessary to compile were made in other parts of the code (e.g. ty, the linter, etc.). These will be covered properly in follow-up PRs.
This commit is contained in:
Dylan 2025-05-30 15:00:56 -05:00 committed by GitHub
parent ad024f9a09
commit 9bbf4987e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
261 changed files with 18023 additions and 1802 deletions

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/ann_assign_stmt_invalid_annotation.py
snapshot_kind: text
---
## AST
@ -199,3 +198,23 @@ Module(
4 | x: y := int = 1
| ^^ Syntax Error: Expected a statement
|
## Semantic Syntax Errors
|
1 | x: *int = 1
2 | x: yield a = 1
| ^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
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 within a type annotation
4 | x: y := int = 1
|

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_empty_expression.py
snapshot_kind: text
---
## AST
@ -22,8 +21,8 @@ Module(
FString {
range: 0..5,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 2..4,
expression: Name(
ExprName {
@ -63,8 +62,8 @@ Module(
FString {
range: 6..13,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 8..12,
expression: Name(
ExprName {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_invalid_conversion_flag_name_tok.py
snapshot_kind: text
---
## AST
@ -22,8 +21,8 @@ Module(
FString {
range: 0..8,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 2..7,
expression: Name(
ExprName {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_invalid_conversion_flag_other_tok.py
snapshot_kind: text
---
## AST
@ -22,8 +21,8 @@ Module(
FString {
range: 0..10,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 2..9,
expression: Name(
ExprName {
@ -63,8 +62,8 @@ Module(
FString {
range: 11..21,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 13..20,
expression: Name(
ExprName {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_invalid_starred_expr.py
snapshot_kind: text
---
## AST
@ -22,8 +21,8 @@ Module(
FString {
range: 77..83,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 79..82,
expression: Starred(
ExprStarred {
@ -69,8 +68,8 @@ Module(
FString {
range: 84..97,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 86..96,
expression: Starred(
ExprStarred {
@ -131,8 +130,8 @@ Module(
FString {
range: 98..111,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 100..110,
expression: Starred(
ExprStarred {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_lambda_without_parentheses.py
snapshot_kind: text
---
## AST
@ -22,8 +21,8 @@ Module(
FString {
range: 0..16,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 2..12,
expression: Lambda(
ExprLambda {
@ -66,7 +65,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 12..14,
value: " x",
},
@ -111,5 +110,5 @@ Module(
|
1 | f"{lambda x: x}"
| ^ Syntax Error: Expected an f-string element or the end of the f-string
| ^ Syntax Error: Expected an f-string or t-string element or the end of the f-string or t-string
|

View file

@ -21,8 +21,8 @@ Module(
FString {
range: 0..4,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 2..3,
expression: Name(
ExprName {
@ -62,8 +62,8 @@ Module(
FString {
range: 5..14,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 7..14,
expression: Name(
ExprName {
@ -103,8 +103,8 @@ Module(
FString {
range: 15..23,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 17..22,
expression: Name(
ExprName {
@ -150,8 +150,8 @@ Module(
FString {
range: 24..28,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 26..27,
expression: Name(
ExprName {
@ -177,8 +177,8 @@ Module(
FString {
range: 29..37,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 33..34,
expression: Name(
ExprName {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_unclosed_lbrace_in_format_spec.py
snapshot_kind: text
---
## AST
@ -23,13 +22,13 @@ Module(
range: 0..12,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 2..8,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 8..11,
expression: Name(
ExprName {
@ -41,7 +40,7 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 11..11,
elements: [],
},
@ -75,13 +74,13 @@ Module(
range: 13..28,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 15..21,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 21..27,
expression: Name(
ExprName {
@ -93,11 +92,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 24..27,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 24..27,
value: ".3f",
},

View file

@ -179,3 +179,13 @@ Module(
3 | def foo() -> yield x: ...
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|
## Semantic Syntax Errors
|
1 | def foo() -> *int: ...
2 | def foo() -> (*int): ...
3 | def foo() -> yield x: ...
| ^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
|

View file

@ -84,13 +84,13 @@ Module(
range: 29..40,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 31..37,
value: "world ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 37..40,
expression: Name(
ExprName {

View file

@ -34,13 +34,13 @@ Module(
range: 18..31,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 20..26,
value: "world ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 26..29,
expression: Name(
ExprName {
@ -132,7 +132,7 @@ Module(
range: 68..76,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 70..75,
value: "third",
},
@ -198,7 +198,7 @@ Module(
2 | 'hello'
3 | f'world {x}
4 | )
| ^ Syntax Error: Expected an f-string element or the end of the f-string
| ^ Syntax Error: Expected an f-string or t-string element or the end of the f-string or t-string
5 | 1 + 1
6 | (
|

View file

@ -1397,7 +1397,7 @@ Module(
|
1 | def d[T]() -> (await 1): ...
| ^^^^^^^ Syntax Error: await expression cannot be used within a generic definition
| ^^^^^^^ Syntax Error: await expression cannot be used within a type annotation
2 | def e[T](arg: (await 1)): ...
3 | def f[T]() -> (y := 3): ...
|
@ -1406,7 +1406,7 @@ Module(
|
1 | def d[T]() -> (await 1): ...
2 | def e[T](arg: (await 1)): ...
| ^^^^^^^ Syntax Error: await expression cannot be used within a generic definition
| ^^^^^^^ Syntax Error: await expression cannot be used within a type annotation
3 | def f[T]() -> (y := 3): ...
4 | def g[T](arg: (x := 1)): ...
|
@ -1416,7 +1416,7 @@ Module(
1 | def d[T]() -> (await 1): ...
2 | def e[T](arg: (await 1)): ...
3 | def f[T]() -> (y := 3): ...
| ^^^^^^ Syntax Error: named expression cannot be used within a generic definition
| ^^^^^^ Syntax Error: named expression cannot be used within a type annotation
4 | def g[T](arg: (x := 1)): ...
5 | def h[T](x: (yield 1)): ...
|
@ -1426,7 +1426,7 @@ Module(
2 | def e[T](arg: (await 1)): ...
3 | def f[T]() -> (y := 3): ...
4 | def g[T](arg: (x := 1)): ...
| ^^^^^^ Syntax Error: named expression cannot be used within a generic definition
| ^^^^^^ Syntax Error: named expression cannot be used within a type annotation
5 | def h[T](x: (yield 1)): ...
6 | def j[T]() -> (yield 1): ...
|
@ -1436,7 +1436,7 @@ Module(
3 | def f[T]() -> (y := 3): ...
4 | def g[T](arg: (x := 1)): ...
5 | def h[T](x: (yield 1)): ...
| ^^^^^^^ Syntax Error: yield expression cannot be used within a generic definition
| ^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
6 | def j[T]() -> (yield 1): ...
7 | def l[T](x: (yield from 1)): ...
|
@ -1446,7 +1446,7 @@ Module(
4 | def g[T](arg: (x := 1)): ...
5 | def h[T](x: (yield 1)): ...
6 | def j[T]() -> (yield 1): ...
| ^^^^^^^ Syntax Error: yield expression cannot be used within a generic definition
| ^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
7 | def l[T](x: (yield from 1)): ...
8 | def n[T]() -> (yield from 1): ...
|
@ -1456,7 +1456,7 @@ Module(
5 | def h[T](x: (yield 1)): ...
6 | def j[T]() -> (yield 1): ...
7 | def l[T](x: (yield from 1)): ...
| ^^^^^^^^^^^^ Syntax Error: yield expression cannot be used within a generic definition
| ^^^^^^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
8 | def n[T]() -> (yield from 1): ...
9 | def p[T: (yield 1)](): ... # yield in TypeVar bound
|
@ -1466,7 +1466,7 @@ Module(
6 | def j[T]() -> (yield 1): ...
7 | def l[T](x: (yield from 1)): ...
8 | def n[T]() -> (yield from 1): ...
| ^^^^^^^^^^^^ Syntax Error: yield expression cannot be used within a generic definition
| ^^^^^^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
9 | def p[T: (yield 1)](): ... # yield in TypeVar bound
10 | def q[T = (yield 1)](): ... # yield in TypeVar default
|

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/invalid_fstring_literal_element.py
snapshot_kind: text
---
## AST
@ -23,7 +22,7 @@ Module(
range: 0..26,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 2..25,
value: "",
},
@ -55,7 +54,7 @@ Module(
range: 27..57,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 31..54,
value: "",
},

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/mixed_bytes_and_non_bytes_literals.py
snapshot_kind: text
---
## AST
@ -61,7 +60,7 @@ Module(
range: 18..26,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 20..25,
value: "first",
},
@ -117,7 +116,7 @@ Module(
range: 45..54,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 47..53,
value: "second",
},

View file

@ -224,3 +224,13 @@ Module(
3 | def foo(arg: x := int): ...
| ^^ Syntax Error: Expected ',', found ':='
|
## Semantic Syntax Errors
|
1 | def foo(arg: *int): ...
2 | def foo(arg: yield int): ...
| ^^^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
3 | def foo(arg: x := int): ...
|

View file

@ -308,3 +308,14 @@ Module(
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
5 | # def foo(*args: **int): ...
|
## Semantic Syntax Errors
|
2 | def foo(*args: (*tuple[int])): ...
3 | def foo(*args: *int or str): ...
4 | def foo(*args: *yield x): ...
| ^^^^^^^ Syntax Error: yield expression cannot be used within a type annotation
5 | # def foo(*args: **int): ...
|

View file

@ -22,13 +22,13 @@ Module(
range: 44..74,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 46..58,
value: "Magic wand: ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 58..73,
expression: Subscript(
ExprSubscript {
@ -92,8 +92,8 @@ Module(
FString {
range: 95..112,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 97..111,
expression: Call(
ExprCall {
@ -173,13 +173,13 @@ Module(
range: 148..220,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 152..169,
value: "A complex trick: ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 169..217,
expression: Subscript(
ExprSubscript {
@ -243,8 +243,8 @@ Module(
FString {
range: 221..254,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 223..253,
expression: FString(
ExprFString {
@ -255,8 +255,8 @@ Module(
FString {
range: 224..252,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 226..251,
expression: FString(
ExprFString {
@ -267,8 +267,8 @@ Module(
FString {
range: 227..250,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 229..249,
expression: FString(
ExprFString {
@ -279,8 +279,8 @@ Module(
FString {
range: 230..248,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 232..247,
expression: FString(
ExprFString {
@ -291,8 +291,8 @@ Module(
FString {
range: 233..246,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 235..245,
expression: FString(
ExprFString {
@ -303,8 +303,8 @@ Module(
FString {
range: 236..244,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 238..243,
expression: BinOp(
ExprBinOp {
@ -444,8 +444,8 @@ Module(
FString {
range: 276..310,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 278..303,
expression: FString(
ExprFString {
@ -456,8 +456,8 @@ Module(
FString {
range: 279..302,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 283..293,
expression: StringLiteral(
ExprStringLiteral {
@ -483,7 +483,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 293..299,
value: " inner",
},
@ -506,7 +506,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 303..309,
value: " outer",
},
@ -538,13 +538,13 @@ Module(
range: 336..359,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 338..343,
value: "test ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 343..353,
expression: Name(
ExprName {
@ -559,7 +559,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 353..358,
value: " more",
},
@ -590,8 +590,8 @@ Module(
FString {
range: 403..422,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 407..419,
expression: FString(
ExprFString {
@ -602,8 +602,8 @@ Module(
FString {
range: 408..418,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 412..415,
expression: Name(
ExprName {
@ -660,8 +660,8 @@ Module(
FString {
range: 468..502,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 470..501,
expression: Call(
ExprCall {

View file

@ -527,13 +527,13 @@ Module(
range: 895..905,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 897..903,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 903..905,
expression: Name(
ExprName {

View file

@ -22,13 +22,13 @@ Module(
range: 162..192,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 164..171,
value: "middle ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 171..191,
expression: StringLiteral(
ExprStringLiteral {
@ -51,11 +51,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 181..191,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 181..191,
value: " ",
},
@ -116,13 +116,13 @@ Module(
range: 207..228,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 209..216,
value: "middle ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 216..228,
expression: StringLiteral(
ExprStringLiteral {
@ -145,11 +145,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 226..228,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 226..228,
value: "\\",
},
@ -209,13 +209,13 @@ Module(
range: 253..285,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 255..262,
value: "middle ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 262..284,
expression: StringLiteral(
ExprStringLiteral {
@ -238,11 +238,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 272..284,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 272..284,
value: "\\ ",
},

View file

@ -22,13 +22,13 @@ Module(
range: 166..178,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 170..176,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 176..178,
expression: Name(
ExprName {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/invalid/re_lexing/triple_quoted_fstring_2.py
snapshot_kind: text
---
## AST
@ -22,8 +21,8 @@ Module(
FString {
range: 167..183,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 171..180,
expression: Name(
ExprName {
@ -35,11 +34,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 176..180,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 176..180,
value: ".3f\n",
},

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/invalid/re_lexing/triple_quoted_fstring_3.py
snapshot_kind: text
---
## AST
@ -35,8 +34,8 @@ Module(
FString {
range: 239..253,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 243..250,
expression: Name(
ExprName {
@ -48,11 +47,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 246..250,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 246..250,
value: ".3f\n",
},

View file

@ -782,8 +782,8 @@ Module(
FString {
range: 576..585,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 578..584,
expression: Name(
ExprName {
@ -833,8 +833,8 @@ Module(
FString {
range: 591..609,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 593..598,
expression: Name(
ExprName {
@ -849,13 +849,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 598..603,
value: " and ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 603..608,
expression: Name(
ExprName {

View file

@ -688,8 +688,8 @@ Module(
FString {
range: 387..396,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 389..395,
expression: Name(
ExprName {
@ -738,8 +738,8 @@ Module(
FString {
range: 403..421,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 405..410,
expression: Name(
ExprName {
@ -754,13 +754,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 410..415,
value: " and ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 415..420,
expression: Name(
ExprName {

View file

@ -0,0 +1,113 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_empty_expression.py
---
## AST
```
Module(
ModModule {
range: 0..58,
body: [
Expr(
StmtExpr {
range: 44..49,
value: TString(
ExprTString {
range: 44..49,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..49,
elements: [
Interpolation(
InterpolatedElement {
range: 46..48,
expression: Name(
ExprName {
range: 47..47,
id: Name(""),
ctx: Invalid,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 50..57,
value: TString(
ExprTString {
range: 50..57,
value: TStringValue {
inner: Single(
TString(
TString {
range: 50..57,
elements: [
Interpolation(
InterpolatedElement {
range: 52..56,
expression: Name(
ExprName {
range: 53..53,
id: Name(""),
ctx: Invalid,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{}"
| ^ Syntax Error: Expected an expression
3 | t"{ }"
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{}"
3 | t"{ }"
| ^ Syntax Error: Expected an expression
|

View file

@ -0,0 +1,63 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_invalid_conversion_flag_name_tok.py
---
## AST
```
Module(
ModModule {
range: 0..53,
body: [
Expr(
StmtExpr {
range: 44..52,
value: TString(
ExprTString {
range: 44..52,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..52,
elements: [
Interpolation(
InterpolatedElement {
range: 46..51,
expression: Name(
ExprName {
range: 47..48,
id: Name("x"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{x!z}"
| ^ Syntax Error: t-string: invalid conversion character
|

View file

@ -0,0 +1,113 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_invalid_conversion_flag_other_tok.py
---
## AST
```
Module(
ModModule {
range: 0..66,
body: [
Expr(
StmtExpr {
range: 44..54,
value: TString(
ExprTString {
range: 44..54,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..54,
elements: [
Interpolation(
InterpolatedElement {
range: 46..53,
expression: Name(
ExprName {
range: 47..48,
id: Name("x"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 55..65,
value: TString(
ExprTString {
range: 55..65,
value: TStringValue {
inner: Single(
TString(
TString {
range: 55..65,
elements: [
Interpolation(
InterpolatedElement {
range: 57..64,
expression: Name(
ExprName {
range: 58..59,
id: Name("x"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{x!123}"
| ^^^ Syntax Error: t-string: invalid conversion character
3 | t"{x!'a'}"
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{x!123}"
3 | t"{x!'a'}"
| ^^^ Syntax Error: t-string: invalid conversion character
|

View file

@ -0,0 +1,205 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_invalid_starred_expr.py
---
## AST
```
Module(
ModModule {
range: 0..156,
body: [
Expr(
StmtExpr {
range: 121..127,
value: TString(
ExprTString {
range: 121..127,
value: TStringValue {
inner: Single(
TString(
TString {
range: 121..127,
elements: [
Interpolation(
InterpolatedElement {
range: 123..126,
expression: Starred(
ExprStarred {
range: 124..125,
value: Name(
ExprName {
range: 125..125,
id: Name(""),
ctx: Invalid,
},
),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 128..141,
value: TString(
ExprTString {
range: 128..141,
value: TStringValue {
inner: Single(
TString(
TString {
range: 128..141,
elements: [
Interpolation(
InterpolatedElement {
range: 130..140,
expression: Starred(
ExprStarred {
range: 131..139,
value: BoolOp(
ExprBoolOp {
range: 132..139,
op: And,
values: [
Name(
ExprName {
range: 132..133,
id: Name("x"),
ctx: Load,
},
),
Name(
ExprName {
range: 138..139,
id: Name("y"),
ctx: Load,
},
),
],
},
),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 142..155,
value: TString(
ExprTString {
range: 142..155,
value: TStringValue {
inner: Single(
TString(
TString {
range: 142..155,
elements: [
Interpolation(
InterpolatedElement {
range: 144..154,
expression: Starred(
ExprStarred {
range: 145..153,
value: Yield(
ExprYield {
range: 146..153,
value: Some(
Name(
ExprName {
range: 152..153,
id: Name("x"),
ctx: Load,
},
),
),
},
),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | # Starred expression inside t-string has a minimum precedence of bitwise or.
3 | t"{*}"
| ^ Syntax Error: Expected an expression
4 | t"{*x and y}"
5 | t"{*yield x}"
|
|
2 | # Starred expression inside t-string has a minimum precedence of bitwise or.
3 | t"{*}"
4 | t"{*x and y}"
| ^^^^^^^ Syntax Error: Boolean expression cannot be used here
5 | t"{*yield x}"
|
|
3 | t"{*}"
4 | t"{*x and y}"
5 | t"{*yield x}"
| ^^^^^^^ Syntax Error: Yield expression cannot be used here
|

View file

@ -0,0 +1,118 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_lambda_without_parentheses.py
---
## AST
```
Module(
ModModule {
range: 0..61,
body: [
Expr(
StmtExpr {
range: 44..60,
value: TString(
ExprTString {
range: 44..60,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..60,
elements: [
Interpolation(
InterpolatedElement {
range: 46..56,
expression: Lambda(
ExprLambda {
range: 47..56,
parameters: Some(
Parameters {
range: 54..55,
posonlyargs: [],
args: [
ParameterWithDefault {
range: 54..55,
parameter: Parameter {
range: 54..55,
name: Identifier {
id: Name("x"),
range: 54..55,
},
annotation: None,
},
default: None,
},
],
vararg: None,
kwonlyargs: [],
kwarg: None,
},
),
body: Name(
ExprName {
range: 56..56,
id: Name(""),
ctx: Invalid,
},
),
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
Literal(
InterpolatedStringLiteralElement {
range: 56..58,
value: " x",
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{lambda x: x}"
| ^^ Syntax Error: Expected an expression
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{lambda x: x}"
| ^^^^^^^^^ Syntax Error: t-string: lambda expressions are not allowed without parentheses
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{lambda x: x}"
| ^^ Syntax Error: t-string: expecting '}'
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{lambda x: x}"
| ^ Syntax Error: Expected an f-string or t-string element or the end of the f-string or t-string
|

View file

@ -0,0 +1,359 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_unclosed_lbrace.py
---
## AST
```
Module(
ModModule {
range: 0..82,
body: [
Expr(
StmtExpr {
range: 44..48,
value: TString(
ExprTString {
range: 44..48,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..48,
elements: [
Interpolation(
InterpolatedElement {
range: 46..47,
expression: Name(
ExprName {
range: 47..47,
id: Name(""),
ctx: Invalid,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 49..58,
value: TString(
ExprTString {
range: 49..58,
value: TStringValue {
inner: Single(
TString(
TString {
range: 49..58,
elements: [
Interpolation(
InterpolatedElement {
range: 51..58,
expression: Name(
ExprName {
range: 52..55,
id: Name("foo"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 59..67,
value: TString(
ExprTString {
range: 59..67,
value: TStringValue {
inner: Single(
TString(
TString {
range: 59..67,
elements: [
Interpolation(
InterpolatedElement {
range: 61..66,
expression: Name(
ExprName {
range: 62..65,
id: Name("foo"),
ctx: Load,
},
),
debug_text: Some(
DebugText {
leading: "",
trailing: "=",
},
),
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 68..81,
value: TString(
ExprTString {
range: 68..81,
value: TStringValue {
inner: Concatenated(
[
TString(
TString {
range: 68..72,
elements: [
Interpolation(
InterpolatedElement {
range: 70..71,
expression: Name(
ExprName {
range: 71..71,
id: Name(""),
ctx: Invalid,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
TString(
TString {
range: 73..81,
elements: [
Interpolation(
InterpolatedElement {
range: 77..78,
expression: Name(
ExprName {
range: 78..78,
id: Name(""),
ctx: Invalid,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: true,
},
},
),
],
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
| ^ Syntax Error: missing closing quote in string literal
3 | t"{foo!r"
4 | t"{foo="
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
| ^ Syntax Error: t-string: unterminated string
3 | t"{foo!r"
4 | t"{foo="
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
| ^ Syntax Error: t-string: unterminated string
3 | t"{foo!r"
4 | t"{foo="
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
3 | t"{foo!r"
| ^^ Syntax Error: missing closing quote in string literal
4 | t"{foo="
5 | t"{"
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
3 | t"{foo!r"
| ^ Syntax Error: t-string: unterminated string
4 | t"{foo="
5 | t"{"
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
3 | t"{foo!r"
| ^ Syntax Error: t-string: unterminated string
4 | t"{foo="
5 | t"{"
|
|
2 | t"{"
3 | t"{foo!r"
4 | t"{foo="
| ^^ Syntax Error: t-string: expecting '}'
5 | t"{"
6 | t"""{"""
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"{"
3 | t"{foo!r"
| ^ Syntax Error: Expected TStringEnd, found Unknown
4 | t"{foo="
5 | t"{"
|
|
2 | t"{"
3 | t"{foo!r"
4 | t"{foo="
| ^ Syntax Error: missing closing quote in string literal
5 | t"{"
6 | t"""{"""
|
|
2 | t"{"
3 | t"{foo!r"
4 | t"{foo="
| ^ Syntax Error: t-string: unterminated string
5 | t"{"
6 | t"""{"""
|
|
2 | t"{"
3 | t"{foo!r"
4 | t"{foo="
| ^ Syntax Error: t-string: unterminated string
5 | t"{"
6 | t"""{"""
|
|
3 | t"{foo!r"
4 | t"{foo="
5 | t"{"
| ^ Syntax Error: missing closing quote in string literal
6 | t"""{"""
|
|
4 | t"{foo="
5 | t"{"
6 | t"""{"""
| ^^^^ Syntax Error: Expected TStringEnd, found TStringStart
|
|
4 | t"{foo="
5 | t"{"
6 | t"""{"""
| ^^^ Syntax Error: Expected an expression
|
|
5 | t"{"
6 | t"""{"""
| ^ Syntax Error: unexpected EOF while parsing
|
|
5 | t"{"
6 | t"""{"""
| ^ Syntax Error: t-string: unterminated string
|

View file

@ -0,0 +1,142 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/t_string_unclosed_lbrace_in_format_spec.py
---
## AST
```
Module(
ModModule {
range: 0..73,
body: [
Expr(
StmtExpr {
range: 44..56,
value: TString(
ExprTString {
range: 44..56,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..56,
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 46..52,
value: "hello ",
},
),
Interpolation(
InterpolatedElement {
range: 52..55,
expression: Name(
ExprName {
range: 53..54,
id: Name("x"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: Some(
InterpolatedStringFormatSpec {
range: 55..55,
elements: [],
},
),
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 57..72,
value: TString(
ExprTString {
range: 57..72,
value: TStringValue {
inner: Single(
TString(
TString {
range: 57..72,
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 59..65,
value: "hello ",
},
),
Interpolation(
InterpolatedElement {
range: 65..71,
expression: Name(
ExprName {
range: 66..67,
id: Name("x"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: Some(
InterpolatedStringFormatSpec {
range: 68..71,
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 68..71,
value: ".3f",
},
),
],
},
),
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```
## Errors
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"hello {x:"
| ^ Syntax Error: t-string: expecting '}'
3 | t"hello {x:.3f"
|
|
1 | # parse_options: {"target-version": "3.14"}
2 | t"hello {x:"
3 | t"hello {x:.3f"
| ^ Syntax Error: t-string: expecting '}'
|

View file

@ -74,13 +74,13 @@ Module(
range: 14..24,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 16..22,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 22..24,
expression: Name(
ExprName {
@ -148,13 +148,13 @@ Module(
range: 31..42,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 33..39,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 39..42,
expression: Name(
ExprName {
@ -166,7 +166,7 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 42..42,
elements: [],
},
@ -227,13 +227,13 @@ Module(
range: 49..60,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 51..57,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 57..60,
expression: Name(
ExprName {

View file

@ -173,7 +173,7 @@ Module(
|
1 | del __debug__
| ^^^^^^^^^ Syntax Error: cannot delete `__debug__` on Python 3.13 (syntax was removed in 3.9)
| ^^^^^^^^^ Syntax Error: cannot delete `__debug__` on Python 3.14 (syntax was removed in 3.9)
2 | del x, y, __debug__, z
3 | __debug__ = 1
|
@ -182,7 +182,7 @@ Module(
|
1 | del __debug__
2 | del x, y, __debug__, z
| ^^^^^^^^^ Syntax Error: cannot delete `__debug__` on Python 3.13 (syntax was removed in 3.9)
| ^^^^^^^^^ Syntax Error: cannot delete `__debug__` on Python 3.14 (syntax was removed in 3.9)
3 | __debug__ = 1
4 | x, y, __debug__, z = 1, 2, 3, 4
|

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/valid/expressions/f_string.py
snapshot_kind: text
---
## AST
@ -147,8 +146,8 @@ Module(
FString {
range: 47..56,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 49..55,
expression: StringLiteral(
ExprStringLiteral {
@ -199,8 +198,8 @@ Module(
FString {
range: 57..67,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 59..66,
expression: Name(
ExprName {
@ -240,8 +239,8 @@ Module(
FString {
range: 68..75,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 70..74,
expression: Tuple(
ExprTuple {
@ -291,8 +290,8 @@ Module(
FString {
range: 76..86,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 78..85,
expression: Compare(
ExprCompare {
@ -323,7 +322,7 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 84..84,
elements: [],
},
@ -356,8 +355,8 @@ Module(
FString {
range: 87..102,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 89..101,
expression: NumberLiteral(
ExprNumberLiteral {
@ -370,11 +369,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 92..100,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 92..97,
expression: StringLiteral(
ExprStringLiteral {
@ -400,7 +399,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 97..100,
value: ">10",
},
@ -436,8 +435,8 @@ Module(
FString {
range: 103..118,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 105..117,
expression: NumberLiteral(
ExprNumberLiteral {
@ -450,11 +449,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 108..116,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 108..113,
expression: StringLiteral(
ExprStringLiteral {
@ -480,7 +479,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 113..116,
value: ">10",
},
@ -516,8 +515,8 @@ Module(
FString {
range: 119..133,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 121..132,
expression: Name(
ExprName {
@ -562,8 +561,8 @@ Module(
FString {
range: 134..154,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 136..153,
expression: Name(
ExprName {
@ -580,11 +579,11 @@ Module(
),
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 147..152,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 147..152,
value: ".3f ",
},
@ -620,8 +619,8 @@ Module(
FString {
range: 155..173,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 157..172,
expression: Name(
ExprName {
@ -666,8 +665,8 @@ Module(
FString {
range: 174..190,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 176..189,
expression: Tuple(
ExprTuple {
@ -730,8 +729,8 @@ Module(
FString {
range: 191..217,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 193..216,
expression: FString(
ExprFString {
@ -742,8 +741,8 @@ Module(
FString {
range: 194..210,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 196..209,
expression: NumberLiteral(
ExprNumberLiteral {
@ -761,11 +760,11 @@ Module(
),
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 205..208,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 205..208,
value: ".1f",
},
@ -790,11 +789,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 211..215,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 211..215,
value: "*^20",
},
@ -849,13 +848,13 @@ Module(
range: 227..242,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 229..233,
value: "bar ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 233..240,
expression: BinOp(
ExprBinOp {
@ -883,7 +882,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 240..241,
value: " ",
},
@ -1036,13 +1035,13 @@ Module(
range: 347..364,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 349..350,
value: "\\",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 350..355,
expression: Name(
ExprName {
@ -1057,13 +1056,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 355..356,
value: "\\",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 356..363,
expression: Name(
ExprName {
@ -1075,11 +1074,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 361..362,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 361..362,
value: "\\",
},
@ -1116,7 +1115,7 @@ Module(
range: 365..379,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 367..378,
value: "\\{foo\\}",
},
@ -1147,8 +1146,8 @@ Module(
FString {
range: 380..420,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 384..417,
expression: Name(
ExprName {
@ -1160,11 +1159,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 394..416,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 394..416,
value: "x\n y\n z\n",
},
@ -1200,8 +1199,8 @@ Module(
FString {
range: 421..439,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 423..438,
expression: Name(
ExprName {
@ -1247,13 +1246,13 @@ Module(
range: 441..486,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 443..450,
value: "normal ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 450..455,
expression: Name(
ExprName {
@ -1268,13 +1267,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 455..468,
value: " {another} ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 468..473,
expression: Name(
ExprName {
@ -1289,13 +1288,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 473..476,
value: " {",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 476..483,
expression: Name(
ExprName {
@ -1310,7 +1309,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 483..485,
value: "}",
},
@ -1342,13 +1341,13 @@ Module(
range: 487..529,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 489..496,
value: "normal ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 496..503,
expression: Name(
ExprName {
@ -1363,13 +1362,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 503..504,
value: " ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 504..511,
expression: Name(
ExprName {
@ -1384,13 +1383,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 511..512,
value: " ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 512..519,
expression: Name(
ExprName {
@ -1405,13 +1404,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 519..520,
value: " ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 520..528,
expression: Name(
ExprName {
@ -1452,13 +1451,13 @@ Module(
range: 530..549,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 532..539,
value: "normal ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 539..548,
expression: Name(
ExprName {
@ -1470,11 +1469,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 542..547,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 542..547,
value: "y + 2",
},
@ -1510,8 +1509,8 @@ Module(
FString {
range: 550..568,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 552..567,
expression: Name(
ExprName {
@ -1523,11 +1522,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 555..566,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 555..566,
expression: Call(
ExprCall {
@ -1600,8 +1599,8 @@ Module(
FString {
range: 569..588,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 571..587,
expression: Lambda(
ExprLambda {
@ -1676,8 +1675,8 @@ Module(
FString {
range: 589..597,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 591..596,
expression: Name(
ExprName {
@ -1722,8 +1721,8 @@ Module(
FString {
range: 598..611,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 600..610,
expression: Name(
ExprName {
@ -1768,8 +1767,8 @@ Module(
FString {
range: 612..621,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 614..620,
expression: Name(
ExprName {
@ -1814,8 +1813,8 @@ Module(
FString {
range: 622..636,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 624..635,
expression: Name(
ExprName {
@ -1827,11 +1826,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 627..634,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 627..634,
value: ".3f!r =",
},
@ -1867,8 +1866,8 @@ Module(
FString {
range: 637..653,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 639..652,
expression: Name(
ExprName {
@ -1885,11 +1884,11 @@ Module(
),
conversion: Repr,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 648..651,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 648..651,
value: ".3f",
},
@ -1925,8 +1924,8 @@ Module(
FString {
range: 654..667,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 656..666,
expression: Name(
ExprName {
@ -1938,11 +1937,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 659..665,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 659..665,
value: ".3f=!r",
},
@ -1990,8 +1989,8 @@ Module(
FString {
range: 676..682,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 678..681,
expression: Name(
ExprName {
@ -2033,8 +2032,8 @@ Module(
FString {
range: 683..689,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 685..688,
expression: Name(
ExprName {
@ -2060,8 +2059,8 @@ Module(
FString {
range: 690..696,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 692..695,
expression: Name(
ExprName {
@ -2103,8 +2102,8 @@ Module(
FString {
range: 697..703,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 699..702,
expression: Name(
ExprName {
@ -2157,13 +2156,13 @@ Module(
range: 712..756,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 714..739,
value: "Invalid args in command: ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 739..755,
expression: Tuple(
ExprTuple {
@ -2237,8 +2236,8 @@ Module(
FString {
range: 763..769,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 765..768,
expression: Name(
ExprName {
@ -2292,7 +2291,7 @@ Module(
range: 782..786,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 784..785,
value: "a",
},
@ -2310,7 +2309,7 @@ Module(
range: 791..795,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 793..794,
value: "b",
},
@ -2339,7 +2338,7 @@ Module(
range: 808..813,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 811..812,
value: "d",
},
@ -2359,7 +2358,7 @@ Module(
range: 818..823,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 821..822,
value: "e",
},
@ -2405,8 +2404,8 @@ Module(
FString {
range: 857..865,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 859..864,
expression: Name(
ExprName {
@ -2481,8 +2480,8 @@ Module(
FString {
range: 886..894,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 888..893,
expression: Name(
ExprName {
@ -2557,8 +2556,8 @@ Module(
FString {
range: 916..924,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 918..923,
expression: Name(
ExprName {
@ -2634,13 +2633,13 @@ Module(
range: 947..966,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 949..953,
value: "bar ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 953..958,
expression: Name(
ExprName {
@ -2655,7 +2654,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 958..965,
value: " really",
},

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/ok/fstring_format_spec_terminator.py
snapshot_kind: text
---
## AST
@ -23,13 +22,13 @@ Module(
range: 0..19,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 2..8,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 8..12,
expression: Name(
ExprName {
@ -41,7 +40,7 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 11..11,
elements: [],
},
@ -49,7 +48,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 12..18,
value: " world",
},
@ -81,13 +80,13 @@ Module(
range: 20..42,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 22..28,
value: "hello ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 28..35,
expression: Name(
ExprName {
@ -99,11 +98,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 31..34,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 31..34,
value: ".3f",
},
@ -114,7 +113,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 35..41,
value: " world",
},

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/ok/match_classify_as_keyword_1.py
snapshot_kind: text
---
## AST
@ -223,13 +222,13 @@ Module(
range: 140..150,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 142..146,
value: "foo ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 146..149,
expression: Name(
ExprName {

View file

@ -7,7 +7,7 @@ input_file: crates/ruff_python_parser/resources/inline/ok/param_with_annotation.
```
Module(
ModModule {
range: 0..84,
range: 0..54,
body: [
FunctionDef(
StmtFunctionDef {
@ -145,72 +145,6 @@ Module(
],
},
),
FunctionDef(
StmtFunctionDef {
range: 54..83,
is_async: false,
decorator_list: [],
name: Identifier {
id: Name("foo"),
range: 58..61,
},
type_params: None,
parameters: Parameters {
range: 61..78,
posonlyargs: [],
args: [
ParameterWithDefault {
range: 62..77,
parameter: Parameter {
range: 62..77,
name: Identifier {
id: Name("arg"),
range: 62..65,
},
annotation: Some(
Named(
ExprNamed {
range: 68..76,
target: Name(
ExprName {
range: 68..69,
id: Name("x"),
ctx: Store,
},
),
value: Name(
ExprName {
range: 73..76,
id: Name("int"),
ctx: Load,
},
),
},
),
),
},
default: None,
},
],
vararg: None,
kwonlyargs: [],
kwarg: None,
},
returns: None,
body: [
Expr(
StmtExpr {
range: 80..83,
value: EllipsisLiteral(
ExprEllipsisLiteral {
range: 80..83,
},
),
},
),
],
},
),
],
},
)

View file

@ -22,13 +22,13 @@ Module(
range: 44..72,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 46..52,
value: "outer ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 52..71,
expression: StringLiteral(
ExprStringLiteral {
@ -80,13 +80,13 @@ Module(
range: 73..106,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 75..81,
value: "outer ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 81..105,
expression: Name(
ExprName {
@ -98,11 +98,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 84..104,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 84..103,
expression: StringLiteral(
ExprStringLiteral {
@ -128,7 +128,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 103..104,
value: " ",
},
@ -164,8 +164,8 @@ Module(
FString {
range: 107..147,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 111..144,
expression: FString(
ExprFString {
@ -176,8 +176,8 @@ Module(
FString {
range: 112..143,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 116..140,
expression: FString(
ExprFString {
@ -188,8 +188,8 @@ Module(
FString {
range: 117..139,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 119..138,
expression: StringLiteral(
ExprStringLiteral {
@ -274,8 +274,8 @@ Module(
FString {
range: 148..230,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 152..208,
expression: FString(
ExprFString {
@ -287,13 +287,13 @@ Module(
range: 153..207,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 157..177,
value: "# before expression ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 177..204,
expression: FString(
ExprFString {
@ -305,13 +305,13 @@ Module(
range: 178..203,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 180..185,
value: "# aro",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 185..197,
expression: FString(
ExprFString {
@ -323,13 +323,13 @@ Module(
range: 186..196,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 188..189,
value: "#",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 189..194,
expression: BinOp(
ExprBinOp {
@ -359,7 +359,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 194..195,
value: "#",
},
@ -382,7 +382,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 197..202,
value: "und #",
},
@ -422,7 +422,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 208..227,
value: " # after expression",
},
@ -454,13 +454,13 @@ Module(
range: 231..263,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 233..254,
value: "escape outside of \t ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 254..260,
expression: Name(
ExprName {
@ -475,7 +475,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 260..262,
value: "\n",
},
@ -507,7 +507,7 @@ Module(
range: 264..277,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 266..276,
value: "test\"abcd",
},

View file

@ -22,13 +22,13 @@ Module(
range: 44..74,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 46..58,
value: "Magic wand: ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 58..73,
expression: Subscript(
ExprSubscript {
@ -92,8 +92,8 @@ Module(
FString {
range: 95..112,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 97..111,
expression: Call(
ExprCall {
@ -173,13 +173,13 @@ Module(
range: 148..220,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 152..169,
value: "A complex trick: ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 169..217,
expression: Subscript(
ExprSubscript {
@ -243,8 +243,8 @@ Module(
FString {
range: 221..254,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 223..253,
expression: FString(
ExprFString {
@ -255,8 +255,8 @@ Module(
FString {
range: 224..252,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 226..251,
expression: FString(
ExprFString {
@ -267,8 +267,8 @@ Module(
FString {
range: 227..250,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 229..249,
expression: FString(
ExprFString {
@ -279,8 +279,8 @@ Module(
FString {
range: 230..248,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 232..247,
expression: FString(
ExprFString {
@ -291,8 +291,8 @@ Module(
FString {
range: 233..246,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 235..245,
expression: FString(
ExprFString {
@ -303,8 +303,8 @@ Module(
FString {
range: 236..244,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 238..243,
expression: BinOp(
ExprBinOp {
@ -444,8 +444,8 @@ Module(
FString {
range: 276..310,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 278..303,
expression: FString(
ExprFString {
@ -456,8 +456,8 @@ Module(
FString {
range: 279..302,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 283..293,
expression: StringLiteral(
ExprStringLiteral {
@ -483,7 +483,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 293..299,
value: " inner",
},
@ -506,7 +506,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 303..309,
value: " outer",
},
@ -538,13 +538,13 @@ Module(
range: 336..359,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 338..343,
value: "test ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 343..353,
expression: Name(
ExprName {
@ -559,7 +559,7 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 353..358,
value: " more",
},

View file

@ -0,0 +1,584 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/ok/pep750_t_string_py314.py
---
## AST
```
Module(
ModModule {
range: 0..403,
body: [
Expr(
StmtExpr {
range: 44..74,
value: TString(
ExprTString {
range: 44..74,
value: TStringValue {
inner: Single(
TString(
TString {
range: 44..74,
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 46..58,
value: "Magic wand: ",
},
),
Interpolation(
InterpolatedElement {
range: 58..73,
expression: Subscript(
ExprSubscript {
range: 60..71,
value: Name(
ExprName {
range: 60..63,
id: Name("bag"),
ctx: Load,
},
),
slice: StringLiteral(
ExprStringLiteral {
range: 64..70,
value: StringLiteralValue {
inner: Single(
StringLiteral {
range: 64..70,
value: "wand",
flags: StringLiteralFlags {
quote_style: Single,
prefix: Empty,
triple_quoted: false,
},
},
),
},
},
),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Single,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 95..112,
value: TString(
ExprTString {
range: 95..112,
value: TStringValue {
inner: Single(
TString(
TString {
range: 95..112,
elements: [
Interpolation(
InterpolatedElement {
range: 97..111,
expression: Call(
ExprCall {
range: 98..110,
func: Attribute(
ExprAttribute {
range: 98..107,
value: StringLiteral(
ExprStringLiteral {
range: 98..102,
value: StringLiteralValue {
inner: Single(
StringLiteral {
range: 98..102,
value: "\n",
flags: StringLiteralFlags {
quote_style: Single,
prefix: Empty,
triple_quoted: false,
},
},
),
},
},
),
attr: Identifier {
id: Name("join"),
range: 103..107,
},
ctx: Load,
},
),
arguments: Arguments {
range: 107..110,
args: [
Name(
ExprName {
range: 108..109,
id: Name("a"),
ctx: Load,
},
),
],
keywords: [],
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 148..220,
value: TString(
ExprTString {
range: 148..220,
value: TStringValue {
inner: Single(
TString(
TString {
range: 148..220,
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 152..169,
value: "A complex trick: ",
},
),
Interpolation(
InterpolatedElement {
range: 169..217,
expression: Subscript(
ExprSubscript {
range: 175..185,
value: Name(
ExprName {
range: 175..178,
id: Name("bag"),
ctx: Load,
},
),
slice: StringLiteral(
ExprStringLiteral {
range: 179..184,
value: StringLiteralValue {
inner: Single(
StringLiteral {
range: 179..184,
value: "bag",
flags: StringLiteralFlags {
quote_style: Single,
prefix: Empty,
triple_quoted: false,
},
},
),
},
},
),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Single,
prefix: Regular,
triple_quoted: true,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 221..254,
value: TString(
ExprTString {
range: 221..254,
value: TStringValue {
inner: Single(
TString(
TString {
range: 221..254,
elements: [
Interpolation(
InterpolatedElement {
range: 223..253,
expression: TString(
ExprTString {
range: 224..252,
value: TStringValue {
inner: Single(
TString(
TString {
range: 224..252,
elements: [
Interpolation(
InterpolatedElement {
range: 226..251,
expression: TString(
ExprTString {
range: 227..250,
value: TStringValue {
inner: Single(
TString(
TString {
range: 227..250,
elements: [
Interpolation(
InterpolatedElement {
range: 229..249,
expression: TString(
ExprTString {
range: 230..248,
value: TStringValue {
inner: Single(
TString(
TString {
range: 230..248,
elements: [
Interpolation(
InterpolatedElement {
range: 232..247,
expression: TString(
ExprTString {
range: 233..246,
value: TStringValue {
inner: Single(
TString(
TString {
range: 233..246,
elements: [
Interpolation(
InterpolatedElement {
range: 235..245,
expression: TString(
ExprTString {
range: 236..244,
value: TStringValue {
inner: Single(
TString(
TString {
range: 236..244,
elements: [
Interpolation(
InterpolatedElement {
range: 238..243,
expression: BinOp(
ExprBinOp {
range: 239..242,
left: NumberLiteral(
ExprNumberLiteral {
range: 239..240,
value: Int(
1,
),
},
),
op: Add,
right: NumberLiteral(
ExprNumberLiteral {
range: 241..242,
value: Int(
1,
),
},
),
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 276..310,
value: TString(
ExprTString {
range: 276..310,
value: TStringValue {
inner: Single(
TString(
TString {
range: 276..310,
elements: [
Interpolation(
InterpolatedElement {
range: 278..303,
expression: TString(
ExprTString {
range: 279..302,
value: TStringValue {
inner: Single(
TString(
TString {
range: 279..302,
elements: [
Interpolation(
InterpolatedElement {
range: 283..293,
expression: StringLiteral(
ExprStringLiteral {
range: 284..292,
value: StringLiteralValue {
inner: Single(
StringLiteral {
range: 284..292,
value: "nested",
flags: StringLiteralFlags {
quote_style: Double,
prefix: Empty,
triple_quoted: false,
},
},
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
Literal(
InterpolatedStringLiteralElement {
range: 293..299,
value: " inner",
},
),
],
flags: TStringFlags {
quote_style: Single,
prefix: Regular,
triple_quoted: true,
},
},
),
),
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
Literal(
InterpolatedStringLiteralElement {
range: 303..309,
value: " outer",
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
Expr(
StmtExpr {
range: 336..359,
value: TString(
ExprTString {
range: 336..359,
value: TStringValue {
inner: Single(
TString(
TString {
range: 336..359,
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 338..343,
value: "test ",
},
),
Interpolation(
InterpolatedElement {
range: 343..353,
expression: Name(
ExprName {
range: 344..345,
id: Name("a"),
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
Literal(
InterpolatedStringLiteralElement {
range: 353..358,
value: " more",
},
),
],
flags: TStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
},
),
],
},
)
```

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/valid/statement/ambiguous_lpar_with_items.py
snapshot_kind: text
---
## AST
@ -945,8 +944,8 @@ Module(
FString {
range: 1186..1201,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 1188..1200,
expression: Name(
ExprName {
@ -958,11 +957,11 @@ Module(
debug_text: None,
conversion: None,
format_spec: Some(
FStringFormatSpec {
InterpolatedStringFormatSpec {
range: 1195..1199,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 1195..1199,
value: "= 42",
},
@ -1017,8 +1016,8 @@ Module(
FString {
range: 1214..1231,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 1216..1230,
expression: Named(
ExprNamed {

View file

@ -3767,8 +3767,8 @@ Module(
FString {
range: 2932..2938,
elements: [
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 2934..2937,
expression: Name(
ExprName {

View file

@ -1,7 +1,6 @@
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/valid/statement/try.py
snapshot_kind: text
---
## AST
@ -577,13 +576,13 @@ Module(
range: 505..524,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 507..514,
value: "caught ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 514..523,
expression: Call(
ExprCall {
@ -682,13 +681,13 @@ Module(
range: 557..576,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 559..566,
value: "caught ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 566..575,
expression: Call(
ExprCall {
@ -955,13 +954,13 @@ Module(
range: 704..750,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 706..713,
value: "caught ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 713..722,
expression: Call(
ExprCall {
@ -994,13 +993,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 722..735,
value: " with nested ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 735..749,
expression: Attribute(
ExprAttribute {
@ -1091,13 +1090,13 @@ Module(
range: 784..830,
elements: [
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 786..793,
value: "caught ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 793..802,
expression: Call(
ExprCall {
@ -1130,13 +1129,13 @@ Module(
},
),
Literal(
FStringLiteralElement {
InterpolatedStringLiteralElement {
range: 802..815,
value: " with nested ",
},
),
Expression(
FStringExpressionElement {
Interpolation(
InterpolatedElement {
range: 815..829,
expression: Attribute(
ExprAttribute {