ruff/crates/ruff_python_formatter/src/statement
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
..
mod.rs Suite formatting and JoinNodesBuilder (#4805) 2023-06-02 14:14:38 +00:00
stmt_ann_assign.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_assert.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_assign.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_async_for.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_async_function_def.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_async_with.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_aug_assign.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_break.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_class_def.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_continue.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_delete.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_expr.rs Format binary expressions (#4862) 2023-06-06 08:34:53 +00:00
stmt_for.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_function_def.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_global.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_if.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_import.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_import_from.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_match.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_nonlocal.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_pass.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_raise.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_return.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_try.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_try_star.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
stmt_while.rs Format binary expressions (#4862) 2023-06-06 08:34:53 +00:00
stmt_with.rs Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
suite.rs Correctly handle newlines after/before comments (#4895) 2023-06-07 14:49:43 +02:00