rustpython-ruff_python_parser 0.15.8

Unofficial fork for RustPython
Documentation
---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/inline/err/f_string_conversion_follows_exclamation.py
---
## AST

```
Module(
    ModModule {
        node_index: NodeIndex(None),
        range: 0..30,
        body: [
            Expr(
                StmtExpr {
                    node_index: NodeIndex(None),
                    range: 0..9,
                    value: FString(
                        ExprFString {
                            node_index: NodeIndex(None),
                            range: 0..9,
                            value: FStringValue {
                                inner: Single(
                                    FString(
                                        FString {
                                            range: 0..9,
                                            node_index: NodeIndex(None),
                                            elements: [
                                                Interpolation(
                                                    InterpolatedElement {
                                                        range: 2..8,
                                                        node_index: NodeIndex(None),
                                                        expression: Name(
                                                            ExprName {
                                                                node_index: NodeIndex(None),
                                                                range: 3..4,
                                                                id: Name("x"),
                                                                ctx: Load,
                                                            },
                                                        ),
                                                        debug_text: None,
                                                        conversion: Str,
                                                        format_spec: None,
                                                    },
                                                ),
                                            ],
                                            flags: FStringFlags {
                                                quote_style: Double,
                                                prefix: Regular,
                                                triple_quoted: false,
                                                unclosed: false,
                                            },
                                        },
                                    ),
                                ),
                            },
                        },
                    ),
                },
            ),
            Expr(
                StmtExpr {
                    node_index: NodeIndex(None),
                    range: 10..19,
                    value: TString(
                        ExprTString {
                            node_index: NodeIndex(None),
                            range: 10..19,
                            value: TStringValue {
                                inner: Single(
                                    TString {
                                        range: 10..19,
                                        node_index: NodeIndex(None),
                                        elements: [
                                            Interpolation(
                                                InterpolatedElement {
                                                    range: 12..18,
                                                    node_index: NodeIndex(None),
                                                    expression: Name(
                                                        ExprName {
                                                            node_index: NodeIndex(None),
                                                            range: 13..14,
                                                            id: Name("x"),
                                                            ctx: Load,
                                                        },
                                                    ),
                                                    debug_text: None,
                                                    conversion: Str,
                                                    format_spec: None,
                                                },
                                            ),
                                        ],
                                        flags: TStringFlags {
                                            quote_style: Double,
                                            prefix: Regular,
                                            triple_quoted: false,
                                            unclosed: false,
                                        },
                                    },
                                ),
                            },
                        },
                    ),
                },
            ),
            Expr(
                StmtExpr {
                    node_index: NodeIndex(None),
                    range: 20..29,
                    value: FString(
                        ExprFString {
                            node_index: NodeIndex(None),
                            range: 20..29,
                            value: FStringValue {
                                inner: Single(
                                    FString(
                                        FString {
                                            range: 20..29,
                                            node_index: NodeIndex(None),
                                            elements: [
                                                Interpolation(
                                                    InterpolatedElement {
                                                        range: 22..28,
                                                        node_index: NodeIndex(None),
                                                        expression: Name(
                                                            ExprName {
                                                                node_index: NodeIndex(None),
                                                                range: 23..24,
                                                                id: Name("x"),
                                                                ctx: Load,
                                                            },
                                                        ),
                                                        debug_text: None,
                                                        conversion: None,
                                                        format_spec: None,
                                                    },
                                                ),
                                            ],
                                            flags: FStringFlags {
                                                quote_style: Double,
                                                prefix: Regular,
                                                triple_quoted: false,
                                                unclosed: false,
                                            },
                                        },
                                    ),
                                ),
                            },
                        },
                    ),
                },
            ),
        ],
    },
)
```
## Errors

  |
1 | f"{x! s}"
  |      ^ Syntax Error: f-string: conversion type must come right after the exclamation mark
2 | t"{x! s}"
3 | f"{x! z}"
  |


  |
1 | f"{x! s}"
2 | t"{x! s}"
  |      ^ Syntax Error: t-string: conversion type must come right after the exclamation mark
3 | f"{x! z}"
  |


  |
1 | f"{x! s}"
2 | t"{x! s}"
3 | f"{x! z}"
  |      ^ Syntax Error: f-string: conversion type must come right after the exclamation mark
  |


  |
1 | f"{x! s}"
2 | t"{x! s}"
3 | f"{x! z}"
  |       ^ Syntax Error: f-string: invalid conversion character
  |