ruff/crates/ruff_python_formatter
konsti 9a817a2922
Insert empty line between suite and alternative branch after def/class (#12294)
When there is a function or class definition at the end of a suite
followed by the beginning of an alternative block, we have to insert a
single empty line between them.

In the if-else-statement example below, we insert an empty line after
the `foo` in the if-block, but none after the else-block `foo`, since in
the latter case the enclosing suite already adds empty lines.

```python
if sys.version_info >= (3, 10):
    def foo():
        return "new"
else:
    def foo():
        return "old"
class Bar:
    pass
```

To do so, we track whether the current suite is the last one in the
current statement with a new option on the suite kind.

Fixes #12199

---------

Co-authored-by: Micha Reiser <micha@reiser.io>
2024-07-15 12:59:33 +02:00
..
resources/test/fixtures Insert empty line between suite and alternative branch after def/class (#12294) 2024-07-15 12:59:33 +02:00
src Insert empty line between suite and alternative branch after def/class (#12294) 2024-07-15 12:59:33 +02:00
tests Insert empty line between suite and alternative branch after def/class (#12294) 2024-07-15 12:59:33 +02:00
Cargo.toml Fix formatter instability for lines only consisting of zero-width characters (#11748) 2024-06-05 17:55:14 +02:00
CONTRIBUTING.md Remove remaining ruff_shrinking references (#11272) 2024-05-03 20:22:08 +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
README.md Move deviations from formatter README to documentation (#10444) 2024-03-18 08:22:28 +00: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.