Commit Graph

3577 Commits

Author SHA1 Message Date
Micha Reiser cb6788ab5f
Handle trailing body end-of-line comments (#4811)
### Summary

This PR adds custom logic to handle end-of-line comments of the last statement in a body. 

For example: 

```python
while True:
    if something.changed:
        do.stuff()  # trailing comment

b
```

The `# trailing comment` is a trailing comment of the `do.stuff()` expression statement. We incorrectly attached the comment as a trailing comment of the enclosing `while` statement  because the comment is between the end of the while statement (the `while` statement ends right after `do.stuff()`) and before the `b` statement. 


This PR fixes the placement to correctly attach these comments to the last statement in a body (recursively). 

## Test Plan

I reviewed the snapshots and they now look correct. This may appear odd because a lot comments have now disappeared. This is the expected result because we use `verbatim` formatting for the block statements (like `while`) and that means that it only formats the inner content of the block, but not any trailing comments. The comments were visible before, because they were associated with the block statement (e.g. `while`).
2023-06-03 15:17:33 +02:00
Justin Prieto e82160a83a
[`flake8-pyi`] Implement PYI035 (#4820) 2023-06-03 03:13:04 +00:00
Charlie Marsh 26b1dd0ca2
Remove `name` field from import binding kinds (#4817) 2023-06-02 23:02:47 -04:00
Charlie Marsh fcfd6ad129
Rename outlier Pathlib rule (#4816) 2023-06-02 18:42:17 +00:00
Charlie Marsh 6a0cebdf7b
Remove regex from partial-path rule (#4815) 2023-06-02 18:28:55 +00:00
Ville Skyttä 0a5dfcb26a
Implement S609, linux_commands_wildcard_injection (#4504) 2023-06-02 18:19:02 +00:00
Charlie Marsh 3ff1f003f4
Omit internal and documentation changes from changelog (#4814) 2023-06-02 15:39:37 +00:00
Micha Reiser ebdc4afc33
Suite formatting and `JoinNodesBuilder` (#4805) 2023-06-02 14:14:38 +00:00
Jonathan Plasse 03ee6033f9
Fix flake8-fixme architecture (#4807) 2023-06-02 09:15:44 -04:00
Micha Reiser a401989b7a
Format StmtExpr (#4788) 2023-06-02 12:52:38 +00:00
Micha Reiser 4cd4b37e74
Format the comment content (#4786) 2023-06-02 11:22:34 +00:00
konstin 602b4b3519
Merge registry into codes (#4651)
* Document codes.rs

* Refactor codes.rs before merging

Helper script:
```python
# %%

from pathlib import Path

codes = Path("crates/ruff/src/codes.rs").read_text().splitlines()
rules = Path("a.txt").read_text().strip().splitlines()
rule_map = {i.split("::")[-1]: i for i in rules}

# %%

codes_new = []
for line in codes:
    if ", Rule::" in line:
        left, right = line.split(", Rule::")
        right = right[:-2]
        line = left + ", " + rule_map[right] + "),"
    codes_new.append(line)

# %%

Path("crates/ruff/src/codes.rs").write_text("\n".join(codes_new))
```

Co-authored-by: Jonathan Plasse <13716151+JonathanPlasse@users.noreply.github.com>
2023-06-02 10:33:01 +00:00
konstin c4fdbf8903
Switch PyFormatter lifetimes (#4804)
Stylistic change to have the input lifetime first and the output lifetime second. I'll rebase my other PR on top of this.

Test plan: `cargo clippy`
2023-06-02 12:26:39 +02:00
Micha Reiser 5d939222db
Leading, Dangling, and Trailing comments formatting (#4785) 2023-06-02 09:26:36 +02:00
Evan Rittenhouse b2498c576f
Implement `flake8_fixme` and refactor `TodoDirective` (#4681) 2023-06-02 08:18:47 +02:00
Micha Reiser c89d2f835e
Add to `AnyNode` and `AnyNodeRef` conversion methods to `AstNode` (#4783) 2023-06-02 08:10:41 +02:00
Charlie Marsh 211d8e170d
Ignore error calls with `exc_info` in TRY400 (#4797) 2023-06-02 04:59:45 +00:00
Charlie Marsh b92be59ffe
Remove some matches on `Stmt` (#4796) 2023-06-02 04:36:36 +00:00
Charlie Marsh b030c70dda
Move unused imports rule into its own module (#4795) 2023-06-02 04:27:23 +00:00
Charlie Marsh 10ba79489a
Exclude function definition from too-many-statements rule (#4794) 2023-06-02 04:04:25 +00:00
Charlie Marsh ea3cbcc362
Avoid enforcing native-literals rule within nested f-strings (#4488) 2023-06-02 04:00:31 +00:00
Charlie Marsh b8f45c93b4
Use a separate fix-isolation group for every parent node (#4774) 2023-06-02 03:07:55 +00:00
Charlie Marsh 621718784a
Replace deletion-tracking with enforced isolation levels (#4766) 2023-06-02 02:45:56 +00:00
qdegraaf fcbf5c3fae
Add PYI034 for `flake8-pyi` plugin (#4764) 2023-06-02 02:15:57 +00:00
Justin Prieto c68686b1de
[`flake8-pyi`] Implement PYI054 (#4775) 2023-06-02 01:21:27 +00:00
Justin Prieto 583411a29f
[`flake8-pyi`] Implement PYI053 (#4770) 2023-06-01 23:00:15 +00:00
qdegraaf 6d94aa89e3
[`flake8-pyi`] Implement `PYI025` (#4791) 2023-06-01 22:45:31 +00:00
Sladyn 8d5d34c6d1
Migrate flake8_pyi_rules from `unspecified` to `suggested` and `automatic` (#4750) 2023-06-01 22:35:47 +00:00
Jonathan Plasse edadd7814f
Add `pyflakes.extend-generics` setting (#4677) 2023-06-01 22:19:37 +00:00
Charlie Marsh 3180f9978a
Avoid extra newline between diagnostics in grouped mode (#4776) 2023-06-01 21:33:29 +00:00
Tom Kuson bdff4a66ac
Add Pylint rule `C0208` (`use-sequence-for-iteration`) as `PLC0208` (`iteration-over-set`) (#4706) 2023-06-01 21:26:23 +00:00
Charlie Marsh ab26f2dc9d
Use saturating_sub in more token-walking methods (#4773) 2023-06-01 17:16:32 -04:00
Dhruv Manilawala 0099f9720f
Add autofix for `PLR1701` (repeated-isinstance-calls) (#4792) 2023-06-01 20:43:04 +00:00
Tom Kuson d9fdcebfc1
Complete the Pyflakes documention (#4787) 2023-06-01 20:25:32 +00:00
Charlie Marsh b7038cee13
Include ImportError in non-fixable try-catch imports (#4793) 2023-06-01 19:53:49 +00:00
Charlie Marsh be740106e0
Remove some lexer usages from `Insertion` (#4763) 2023-06-01 19:45:43 +00:00
konstin 63d892f1e4
Implement basic module formatting (#4784)
* Add Format for Stmt

* Implement basic module formatting

This implements formatting each statement in a module with a hard line break in between, so that we can start formatting statements.

Basic testing is done by the snapshots
2023-06-01 15:25:50 +02:00
Micha Reiser 28aad95414
Remove collapsing `space` behaviour from `Printer` (#4782) 2023-06-01 13:38:42 +02:00
Micha Reiser 5f4bce6d2b
Implement `IntoFormat` for `&T` (#4781) 2023-06-01 12:20:49 +02:00
Micha Reiser 4ea4fd1984
Introduce `lines_before` helper (#4780) 2023-06-01 11:56:43 +02:00
konstin d4027d8b65
Use new formatter infrastructure in CLI and test (#4767)
* Use dummy verbatim formatter for all nodes

* Use new formatter infrastructure in CLI and test

* Expose the new formatter in the CLI

* Merge import blocks
2023-06-01 11:55:04 +02:00
konstin 9bf168c0a4
Use dummy verbatim formatter for all nodes (#4755) 2023-06-01 08:25:26 +00:00
Micha Reiser 59148344be
Place comments of left and right binary expression operands (#4751) 2023-06-01 07:01:32 +00:00
konstin 0945803427
Generate FormatRule definitions (#4724)
* Generate FormatRule definitions

* Generate verbatim output

* pub(crate) everything

* clippy fix

* Update crates/ruff_python_formatter/src/lib.rs

Co-authored-by: Micha Reiser <micha@reiser.io>

* Update crates/ruff_python_formatter/src/lib.rs

Co-authored-by: Micha Reiser <micha@reiser.io>

* stub out with Ok(()) again

* Update crates/ruff_python_formatter/src/lib.rs

Co-authored-by: Micha Reiser <micha@reiser.io>

* PyFormatContext::{contents, locator} with `#[allow(unused)]`

* Can't leak private type

* remove commented code

* Fix ruff errors

* pub struct Format{node} due to rust rules

---------

Co-authored-by: Julian LaNeve <lanevejulian@gmail.com>
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-06-01 08:38:53 +02:00
Micha Reiser b7294b48e7
Handle positional-only-arguments separator comments (#4748) 2023-06-01 06:22:49 +00:00
Micha Reiser be31d71849
Correctly associate own-line comments in bodies (#4671) 2023-06-01 08:12:53 +02:00
Charlie Marsh 46c3b3af94
Use `ALL` in `fixable` documentation (#4772) 2023-05-31 22:30:12 -04:00
Charlie Marsh 3d34d9298d
Remove erroneous method calls in flake8-unused-arguments docs (#4771) 2023-06-01 02:23:59 +00:00
Charlie Marsh 1156c65be1
Add autofix to move runtime-imports out of type-checking blocks (#4743) 2023-05-31 18:09:04 +00:00
Charlie Marsh 1a53996f53
Add autofix for flake8-type-checking (#4742) 2023-05-31 17:53:36 +00:00