ruff/crates/ruff_python_formatter
Micha Reiser 954a48b129
Fix instable formatting for trailing subscribt end-of-line comment (#10492)
## Summary

This PR fixes an instability where formatting a subscribt 
where the `slice` is not an `ExprSlice` and it has a trailing
end-of-line comment after its opening `[` required two formatting passes
to be stable.

The fix is to associate the trailing end-of-line comment as dangling
comment on `[` to preserve its position, similar to how Ruff does it for
other parenthesized expressions.
This also matches how trailing end-of-line subscript comments are
handled when the `slice` is an `ExprSlice`.

Fixes https://github.com/astral-sh/ruff/issues/10355

## Versioning

Shipping this as part of a patch release is fine because:

* It fixes a stability issue
* It doesn't impact already formatted code because Ruff would already
have moved to the comment to the end of the line (instead of preserving
it)

## Test Plan

Added tests
2024-03-20 18:12:10 +01:00
..
resources/test/fixtures Fix instable formatting for trailing subscribt end-of-line comment (#10492) 2024-03-20 18:12:10 +01:00
src Fix instable formatting for trailing subscribt end-of-line comment (#10492) 2024-03-20 18:12:10 +01:00
tests Fix instable formatting for trailing subscribt end-of-line comment (#10492) 2024-03-20 18:12:10 +01:00
Cargo.toml Simplify formatting of strings by using flags from the AST nodes (#10489) 2024-03-20 16:16:54 +00:00
CONTRIBUTING.md Fix typo in documentation (#9069) 2023-12-09 16:06:49 +00:00
generate.py Split string formatting to individual nodes (#9058) 2023-12-14 12:55:10 -06:00
orphan_rules_in_the_formatter.svg Generate FormatRule definitions (#4724) 2023-06-01 08:38:53 +02:00
README.md Move deviations from formatter README to documentation (#10444) 2024-03-18 08:22:28 +00:00
shrink_formatter_errors.py Add script to shrink all formatter errors (#5943) 2023-07-21 11:32:35 +02:00

Ruff Formatter

The Ruff formatter is an extremely fast Python code formatter that ships as part of the ruff CLI.

Goals

The formatter is designed to be a drop-in replacement for Black, but with an excessive focus on performance and direct integration with Ruff.

Specifically, the formatter is intended to emit near-identical output when run over Black-formatted code. When run over extensive Black-formatted projects like Django and Zulip, > 99.9% of lines are formatted identically. When migrating an existing project from Black to Ruff, you should expect to see a few differences on the margins, but the vast majority of your code should be unchanged.

If you identify deviations in your project, spot-check them against the intentional deviations enumerated below, as well as the unintentional deviations filed in the issue tracker. If you've identified a new deviation, please file an issue.

When run over non-Black-formatted code, the formatter makes some different decisions than Black, and so more deviations should be expected, especially around the treatment of end-of-line comments. For details, see Black compatibility.

Getting started

The Ruff formatter is available as of Ruff v0.1.2. Head to The Ruff Formatter for usage instructions and a comparison to Black.