ruff/crates
Alex Waygood b6b1947010
Improve API exposed on `ExprStringLiteral` nodes (#16192)
## Summary

This PR makes the following changes:
- It adjusts various callsites to use the new
`ast::StringLiteral::contents_range()` method that was introduced in
https://github.com/astral-sh/ruff/pull/16183. This is less verbose and
more type-safe than using the `ast::str::raw_contents()` helper
function.
- It adds a new `ast::ExprStringLiteral::as_unconcatenated_literal()`
helper method, and adjusts various callsites to use it. This addresses
@MichaReiser's review comment at
https://github.com/astral-sh/ruff/pull/16183#discussion_r1957334365.
There is no functional change here, but it helps readability to make it
clearer that we're differentiating between implicitly concatenated
strings and unconcatenated strings at various points.
- It renames the `StringLiteralValue::flags()` method to
`StringLiteralFlags::first_literal_flags()`. If you're dealing with an
implicitly concatenated string `string_node`,
`string_node.value.flags().closer_len()` could give an incorrect result;
this renaming makes it clearer that the `StringLiteralFlags` instance
returned by the method is only guaranteed to give accurate information
for the first `StringLiteral` contained in the `ExprStringLiteral` node.
- It deletes the unused `BytesLiteralValue::flags()` method. This seems
prone to misuse in the same way as `StringLiteralValue::flags()`: if
it's an implicitly concatenated bytestring, the `BytesLiteralFlags`
instance returned by the method would only give accurate information for
the first `BytesLiteral` in the bytestring.

## Test Plan

`cargo test`
2025-02-17 07:58:54 +00:00
..
red_knot Move `red_knot_python_semantic::PythonVersion` to the `ruff_python_ast` crate (#16147) 2025-02-14 12:48:08 -05:00
red_knot_project Move `red_knot_python_semantic::PythonVersion` to the `ruff_python_ast` crate (#16147) 2025-02-14 12:48:08 -05:00
red_knot_python_semantic Improve API exposed on `ExprStringLiteral` nodes (#16192) 2025-02-17 07:58:54 +00:00
red_knot_server add diagnostic `Span` (couples `File` and `TextRange`) (#16101) 2025-02-11 14:55:12 -05:00
red_knot_test Move `red_knot_python_semantic::PythonVersion` to the `ruff_python_ast` crate (#16147) 2025-02-14 12:48:08 -05:00
red_knot_vendored Sync vendored typeshed stubs (#16173) 2025-02-15 10:01:34 +00:00
red_knot_wasm Move `red_knot_python_semantic::PythonVersion` to the `ruff_python_ast` crate (#16147) 2025-02-14 12:48:08 -05:00
ruff Warn on invalid noqa even when there are no diagnostics (#16178) 2025-02-16 13:58:18 -06:00
ruff_annotate_snippets Fix docstring in ruff_annotate_snippets (#15748) 2025-01-26 22:25:29 -05:00
ruff_benchmark Move `red_knot_python_semantic::PythonVersion` to the `ruff_python_ast` crate (#16147) 2025-02-14 12:48:08 -05:00
ruff_cache Fix cache key collisions for paths with separators (#12159) 2024-07-03 07:36:46 -05:00
ruff_db ruff_db: add a vector for configuring diagnostic output (#16118) 2025-02-12 14:38:05 +00:00
ruff_dev Add knot.toml schema (#15735) 2025-02-07 10:59:40 +01:00
ruff_diagnostics Show errors for attempted fixes only when passed `--verbose` (#15237) 2025-01-03 08:50:13 -06:00
ruff_formatter Upgrade Rust toolchain to 1.84.0 (#15408) 2025-01-11 09:51:58 +01:00
ruff_graph Move `red_knot_python_semantic::PythonVersion` to the `ruff_python_ast` crate (#16147) 2025-02-14 12:48:08 -05:00
ruff_index Transition to salsa coarse-grained tracked structs (#15763) 2025-02-11 11:38:50 +01:00
ruff_linter Improve API exposed on `ExprStringLiteral` nodes (#16192) 2025-02-17 07:58:54 +00:00
ruff_macros Add knot.toml schema (#15735) 2025-02-07 10:59:40 +01:00
ruff_notebook Update Rust crate rand to 0.9.0 (#15899) 2025-02-03 12:25:57 +01:00
ruff_python_ast Improve API exposed on `ExprStringLiteral` nodes (#16192) 2025-02-17 07:58:54 +00:00
ruff_python_ast_integration_tests Update insta snapshots (#14366) 2024-11-15 19:31:15 +01:00
ruff_python_codegen Preserve triple quotes and prefixes for strings (#15818) 2025-02-04 08:41:06 -05:00
ruff_python_formatter Improve API exposed on `ExprStringLiteral` nodes (#16192) 2025-02-17 07:58:54 +00:00
ruff_python_index Extract `LineIndex` independent methods from `Locator` (#13938) 2024-10-28 07:53:41 +00:00
ruff_python_literal Preserve triple quotes and prefixes for strings (#15818) 2025-02-04 08:41:06 -05:00
ruff_python_parser Improve API exposed on `ExprStringLiteral` nodes (#16192) 2025-02-17 07:58:54 +00:00
ruff_python_resolver Update insta snapshots (#14366) 2024-11-15 19:31:15 +01:00
ruff_python_semantic Consider `__new__` methods as special function type for enforcing class method or static method rules (#13305) 2025-02-16 14:12:25 -06:00
ruff_python_stdlib Revert "Add all PEP-585 names to UP006 rule" (#15250) 2025-01-04 12:23:53 +01:00
ruff_python_trivia [red-knot] Hand-written MDTest parser (#15926) 2025-02-04 14:01:53 +01:00
ruff_python_trivia_integration_tests Update insta snapshots (#14366) 2024-11-15 19:31:15 +01:00
ruff_server Root exclusions in the server to project root (#16043) 2025-02-10 04:57:14 +00:00
ruff_source_file [`pyupgrade`] Do not report when a UTF-8 comment is followed by a non-UTF-8 one (`UP009`) (#14728) 2024-12-11 10:30:41 +00:00
ruff_text_size [`ruff`] `itertools.starmap(..., zip(...))` (`RUF058`) (#15483) 2025-01-16 15:18:12 +01:00
ruff_wasm Bump version to 0.9.6 (#16074) 2025-02-10 18:14:04 +05:30
ruff_workspace [`flake8-builtins`] Update documentation (`A005`) (#16097) 2025-02-12 12:50:13 -05:00