ruff/crates/ruff_python_formatter
Micha Reiser 6ab3fc60f4
Correctly handle newlines after/before comments (#4895)
<!--
Thank you for contributing to Ruff! To help us out with reviewing, please consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

This issue fixes the removal of empty lines between a leading comment and the previous statement:

```python
a  = 20

# leading comment
b = 10
```

Ruff removed the empty line between `a` and `b` because:
* The leading comments formatting does not preserve leading newlines (to avoid adding new lines at the top of a body)
* The `JoinNodesBuilder` counted the lines before `b`, which is 1 -> Doesn't insert a new line

This is fixed by changing the `JoinNodesBuilder` to count the lines instead *after* the last node. This correctly gives 1, and the `# leading comment` will insert the empty lines between any other leading comment or the node.



## Test Plan

I added a new test for empty lines.
2023-06-07 14:49:43 +02:00
..
resources/test/fixtures Correctly handle newlines after/before comments (#4895) 2023-06-07 14:49:43 +02:00
src Correctly handle newlines after/before comments (#4895) 2023-06-07 14:49:43 +02:00
Cargo.toml Move universal newline handling into its own crate (#4729) 2023-05-31 12:00:47 -04:00
Docs.md Generate FormatRule definitions (#4724) 2023-06-01 08:38:53 +02:00
generate.py Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
orphan_rules_in_the_formatter.svg Generate FormatRule definitions (#4724) 2023-06-01 08:38:53 +02:00