mirror of
https://github.com/astral-sh/ruff.git
synced 2025-12-23 09:19:39 +00:00
|
Some checks are pending
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / ty completion evaluation (push) Blocked by required conditions
CI / cargo test (macos-latest) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / cargo test (${{ github.repository == 'astral-sh/ruff' && 'depot-windows-2022-16' || 'windows-latest' }}) (push) Blocked by required conditions
CI / benchmarks walltime (small|large) (push) Blocked by required conditions
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / check playground (push) Blocked by required conditions
CI / benchmarks instrumented (ruff) (push) Blocked by required conditions
CI / benchmarks instrumented (ty) (push) Blocked by required conditions
CI / benchmarks walltime (medium|multithreaded) (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
## Summary Fixes https://github.com/astral-sh/ruff/issues/19771 Fixes incorrect parsing of Unicode named escape sequences like `Hey \N{snowman}` in `FormatString`, which were being incorrectly split into separate literal and field parts instead of being treated as a single literal unit. ## Problem The `FormatString` parser incorrectly handles Unicode named escape sequences: - **Current**: `Hey \N{snowman}` is parsed into 2 parts `Literal("Hey \N")` & `Field("snowman")` - **Expected**: `Hey \N{snowman}` should be parsed into 1 part `Literal("Hey \N{snowman}")` This affects f-string conversion rules when fixing `UP032` that rely on proper format string parsing. ## Solution I modified `parse_literal` to detect and handle Unicode named escape sequences before parsing single characters: - Introduced a flag to track when a backslash is "available" to escape something. - When the flag is `true`, and the text starts with `N{`, try to parse the complete Unicode escape sequence as one unit, and set the flag to `false` after parsing successfully. - Set the flag to `false` when the backslash is already consumed. ## Manual Verification `"\N{angle}AOB = {angle}°".format(angle=180)` **Result** ```bash def foo(): - "\N{angle}AOB = {angle}°".format(angle=180) + f"\N{angle}AOB = {180}°" Would fix 1 error. ``` `"\N{snowman} {snowman}".format(snowman=1)` **Result** ```bash def foo(): - "\N{snowman} {snowman}".format(snowman=1) + f"\N{snowman} {1}" Would fix 1 error. ``` `"\\N{snowman} {snowman}".format(snowman=1)` **Result** ```bash def foo(): - "\\N{snowman} {snowman}".format(snowman=1) + f"\\N{1} {1}" Would fix 1 error. ``` ## Test Plan - Added test cases (happy case, invalid case, edge case) for `FormatString` when parsing Unicode escape sequence. - Updated snapshots. |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||