Commit Graph

1168 Commits

Author SHA1 Message Date
Evan Rittenhouse 741e180e2d
Change TODO directive detection to work with multiple pound signs on the same line (#4558) 2023-05-25 16:51:45 +02:00
konstin b6a382eeaf
Lint pyproject.toml (#4496)
This adds a new rule `InvalidPyprojectToml` that lints pyproject.toml by checking if https://github.com/PyO3/pyproject-toml-rs can parse it. This means the linting is currently very basic, e.g. we don't check whether the name is actually a valid python project name or appropriately normalized. It does catch errors e.g. with invalid dependency requirements or problems withs the license specifications. It is open to be extended in the future (validate name, SPDX expressions, classifiers, ...), either in ruff or in pyproject-toml-rs.

Test plan:

```
scripts/ecosystem_all_check.sh check --select RUF200
```
This lead to a bunch of 
```
RUF200 Failed to parse pyproject.toml: missing field `name`
```
(e.g. https://github.com/amitsk/fastapi-todos/blob/main/pyproject.toml) which is indeed invalid (https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#specification).

Filtering those out, the following other problems were found by `cd target/ecosystem_all_results/ && rg RUF200`:
```
UCL-ARC:rred-reports.stdout.txt
1:pyproject.toml:27:16: RUF200 Failed to parse pyproject.toml: Version specifier `>='3.9'` doesn't match PEP 440 rules
EndlessTrax:python-start-project.stdout.txt
1:pyproject.toml:14:16: RUF200 Failed to parse pyproject.toml: Expected package name starting with an alphanumeric character, found '#'
redjax:gardening-api.stdout.txt
1:pyproject.toml:7:11: RUF200 Failed to parse pyproject.toml: Version `` doesn't match PEP 440 rules
ajslater:codex.stdout.txt
2:  3:17 RUF200 Failed to parse pyproject.toml: invalid type: sequence, expected a string
LDmitriy7:404_AvatarsBot.stdout.txt
1:pyproject.toml:3:11: RUF200 Failed to parse pyproject.toml: Version `` doesn't match PEP 440 rules
ajslater:comicbox.stdout.txt
1:pyproject.toml:3:17: RUF200 Failed to parse pyproject.toml: invalid type: sequence, expected a string
manueldevillena:forecast-earnings.stdout.txt
1:pyproject.toml:24:12: RUF200 Failed to parse pyproject.toml: Expected one of `@`, `(`, `<`, `=`, `>`, `~`, `!`, `;`, found `^`
redjax:ohio_utility_scraper.stdout.txt
1:pyproject.toml:11:11: RUF200 Failed to parse pyproject.toml: Version `` doesn't match PEP 440 rules
agronholm:typeguard.stdout.txt
1:pyproject.toml:40:8: RUF200 Failed to parse pyproject.toml: Expected a valid marker name, found 'python_implementation'
cyuss:decathlon-turnover.stdout.txt
1:pyproject.toml:7:12: RUF200 Failed to parse pyproject.toml: invalid type: string "Youcef", expected a table with 'name' and 'email' keys
ajslater:boilerplate.stdout.txt
1:pyproject.toml:3:17: RUF200 Failed to parse pyproject.toml: invalid type: sequence, expected a string
kaparoo:lightning-project-template.stdout.txt
1:pyproject.toml:56:16: RUF200 Failed to parse pyproject.toml: You can't mix a >= operator with a local version (`+cu117`)
dijital20:pytexas2023-decorators.stdout.txt
1:pyproject.toml:5:11: RUF200 Failed to parse pyproject.toml: Version `` doesn't match PEP 440 rules
pfouque:django-anymail-history.stdout.txt
1:pyproject.toml:137:12: RUF200 Failed to parse pyproject.toml: Version specifier `> = 1.2.0` doesn't match PEP 440 rules
pfouque:django-fakemessages.stdout.txt
1:pyproject.toml:130:12: RUF200 Failed to parse pyproject.toml: Version specifier `> = 1.2.0` doesn't match PEP 440 rules
pypa:build.stdout.txt
1:tests/packages/test-invalid-requirements/pyproject.toml:2:12: RUF200 Failed to parse pyproject.toml: Expected one of `@`, `(`, `<`, `=`, `>`, `~`, `!`, `;`, found `i`
4:tests/packages/test-no-requires/pyproject.toml:1:1: RUF200 Failed to parse pyproject.toml: missing field `requires`
UnoYakshi:FRAAND.stdout.txt
2:  3:11 RUF200 Failed to parse pyproject.toml: Version `` doesn't match PEP 440 rules
DHolmanCoding:python-template.stdout.txt
1:pyproject.toml:22:1: RUF200 Failed to parse pyproject.toml: missing field `requires`
```
Overall, this emitted errors in 43 out of 3408 projects (`rg -c RUF200 target/ecosystem_all_results/ | wc -l`)


Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-25 12:05:28 +00:00
qdegraaf 050350527c
Add autofix for PYI010 (#4634) 2023-05-24 22:17:44 +00:00
Charlie Marsh c9b39e31fc
Use class name as range for `B024` (#4647) 2023-05-24 22:16:13 +00:00
bersbersbers 28a5e607b4
Docs: mention `task-tags` option in two rules (#4644) 2023-05-24 16:31:41 -04:00
Micha Reiser 09c50c311c
Testing Macros: Add `extra-traits` feature (#4643) 2023-05-24 17:14:58 +00:00
Charlie Marsh f4572fe40b
Bump version to 0.0.270 (#4637) 2023-05-24 16:34:29 +00:00
Sladyn 8c9215489e
Migrate flake8_bugbear rules to `unspecified` to `suggested` (#4616) 2023-05-24 16:16:33 +00:00
qdegraaf dcd2bfaab7
Migrate flake8_pie autofix rules from `unspecified` to `suggested` and `automatic` (#4621) 2023-05-24 16:08:22 +00:00
Charlie Marsh f0e173d9fd
Use `BindingId` copies in lieu of `&BindingId` in semantic model methods (#4633) 2023-05-24 15:55:45 +00:00
Micha Reiser edc6c4058f
Move `shared_traits` to `ruff_formatter` (#4632) 2023-05-24 17:38:11 +02:00
Jonathan Plasse 4233f6ec91
Update to the new rule architecture (#4589) 2023-05-24 11:30:40 -04:00
Charlie Marsh fcdc7bdd33
Remove separate `ReferenceContext` enum (#4631) 2023-05-24 15:12:38 +00:00
Micha Reiser 86ced3516b
Introduce `SourceCodeSlice` to reduce the size of `FormatElement` (#4622)
Introduce `SourceCodeSlice` to reduce the size of `FormatElement`
2023-05-24 15:04:52 +00:00
Micha Reiser 6943beee66
Remove source position from `FormatElement::DynamicText` (#4619) 2023-05-24 16:36:14 +02:00
Micha Reiser 85f094f592
Improve `Message` sorting performance (#4624) 2023-05-24 16:34:48 +02:00
konstin 17d938f078
Add Checker::any_enabled shortcut (#4630)
Add Checker::any_enabled shortcut

 ## Summary

 Akin to #4625, This is a refactoring that shortens a bunch of code by replacing `checker.settings.rules.any_enabled` with `checker.any_enabled`.

 ## Test Plan

 `cargo clippy`
2023-05-24 14:32:55 +00:00
Charlie Marsh 5cedf0f724
Remove `ReferenceContext::Synthetic` (#4612) 2023-05-24 14:30:35 +00:00
Charlie Marsh 040fb9cef4
Use a separate `PrinterFlag` for including fix diffs (#4615) 2023-05-24 10:22:37 -04:00
Charlie Marsh 8961d8eb6f
Track all read references in semantic model (#4610) 2023-05-24 14:14:27 +00:00
Charlie Marsh 31bddef98f
Visit `TypeVar` and `NewType` name arguments (#4627) 2023-05-24 10:10:15 -04:00
konstin a59d252246
Add Checker::enabled shortcut (#4625)
This is a refactoring that shortens a bunch of code by replacing `checker.settings.rules.enabled` with `checker.enabled`
2023-05-24 14:56:41 +02:00
Jonathan Plasse c6a760e298
Introduce `tab-size` to correcly calculate the line length with tabulations (#4167) 2023-05-24 08:37:24 +02:00
konstin 3644695bf2
Include hidden ecosystem_ci option to show fixes without feature (#4528) 2023-05-23 22:22:23 -04:00
Sladyn 4e84e8a8e2
Migrate some rules from `Fix::unspecified` (#4587) 2023-05-23 22:10:58 -04:00
Hoël Bagard a256fdb9f4
Extend `RUF005` to recursive and literal-literal concatenations (#4557) 2023-05-24 01:26:34 +00:00
Tom Kuson 7479dfd815
Add Pyflakes docs (#4588) 2023-05-24 00:45:32 +00:00
Charlie Marsh ba4c0a21fa
Rename `ContextFlags` to `SemanticModelFlags` (#4611) 2023-05-23 17:47:07 -04:00
konstin 73e179ffab
Update maturin to 1.0 (#4605)
* Refactor and fix task trigger for dependent jobs in other repos

I have confirmed (https://github.com/konstin/ruff-pre-commit/actions/runs/5056928280/jobs/9075029868) that this does dispatch the workflow when running with act, `owner: 'konstin'`, `needs` commented out and personal access token. I can't properly test the actual release workflow, and i'm unsure how to best handle the next release after this was merged (should we do a beta release or will this break everything that assumes we only do stable releases?)

The command for act is
```
act -j update-dependents -s RUFF_PRE_COMMIT_PAT=<...>
```

* delete old file

* Update maturin to 1.0

A 1.0 release for maturin 🎉
2023-05-23 20:55:52 +02:00
Micha Reiser 2681c0e633
Add missing nodes to `AnyNodeRef` and `AnyNode` (#4608) 2023-05-23 18:30:27 +02:00
Charlie Marsh f3bdd2e7be
Make B007 fix relevance stricter (#4607) 2023-05-23 15:43:59 +00:00
Micha Reiser 652c644c2a
Introduce `ruff_index` crate (#4597) 2023-05-23 17:40:35 +02:00
Micha Reiser 154439728a
Add `AnyNode` and `AnyNodeRef` unions (#4578) 2023-05-23 08:53:22 +02:00
Jonathan Plasse 1ddc577204
Rework CST matchers (#4536)
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-23 06:26:51 +00:00
Charlie Marsh 74effb40b9
Rename `index` to `binding_id` in a few iterators (#4594) 2023-05-23 03:56:00 +00:00
Charlie Marsh 6c3724ab98
Move `get_or_import_symbol` onto `Importer` (#4591) 2023-05-23 01:33:00 +00:00
Christopher Covington 3b8121379d
Name ambiguous characters (#4448) 2023-05-22 17:16:57 +00:00
qdegraaf 5ba47c3302
Add autofix for PYI009 (#4583) 2023-05-22 16:41:18 +00:00
Charlie Marsh b613460fe5
Fix `# isort: split` comment detection in nested blocks (#4584) 2023-05-22 12:31:59 -04:00
Micha Reiser daadd24bde
Include decorators in `Function` and `Class` definition ranges (#4467) 2023-05-22 17:50:42 +02:00
Charlie Marsh 9308e939f4
Avoid infinite loop for required imports with isort: off (#4581) 2023-05-22 15:49:03 +00:00
Charlie Marsh 04c9348de0
Make ambiguous-unicode detection sensitive to 'word' context (#4552) 2023-05-22 14:42:25 +00:00
Tom Kuson 2d3766d928
Add flake8-boolean-trap docs (#4572) 2023-05-22 14:11:14 +00:00
Micha Reiser cbe344f4d5
Rename `Checker::model` to `semantic_model` (#4573) 2023-05-22 15:14:30 +02:00
Evan Rittenhouse c6e5fed658
Replace token iteration with Indexer/Locator lookups for relevant rules (#4513) 2023-05-22 09:56:19 +02:00
Charlie Marsh f73b398776
Reduce visibility of more functions, structs, and fields (#4570) 2023-05-22 03:36:48 +00:00
Charlie Marsh 55c4020ba9
Remove regex for noqa code splitting (#4569) 2023-05-21 23:20:49 -04:00
Charlie Marsh d70f899f71
Use `SemanticModel` in lieu of `Checker` in more methods (#4568) 2023-05-22 02:58:47 +00:00
Charlie Marsh 19c4b7bee6
Rename ruff_python_semantic's `Context` struct to `SemanticModel` (#4565) 2023-05-22 02:35:03 +00:00
Jonathan Plasse 3238743a7b
Fix Flake8Todo typo (#4566) 2023-05-21 16:32:13 -04:00
Charlie Marsh f22c269ccf
Point LSP, VS Code, and pre-commut URLs to Astral org (#4562) 2023-05-21 15:27:35 -04:00
Arne de Laat 8ca3977602
Fix false-positive for TRY302 if exception cause is given (#4559) 2023-05-21 11:49:53 -04:00
Jonathan Plasse fc63c6f2e2
Fix PLE01310 typo (#4550) 2023-05-20 19:34:03 +00:00
Jonathan Plasse f7f5bc9085
Fix SIM401 snapshot (#4547) 2023-05-20 14:18:19 -04:00
Charlie Marsh 6b85430a14
Ignore `#region` code folding marks in eradicate rules (#4546) 2023-05-20 16:45:49 +00:00
Jonathan Plasse a68c865010
Fix SIM110 and SIM111 ranges (#4545) 2023-05-20 12:40:35 -04:00
Charlie Marsh fe7f2e2e4d
Move submodule alias resolution into `Context` (#4543) 2023-05-20 16:34:10 +00:00
Charlie Marsh bf5b463c0d
Include empty success test in JUnit output (#4537) 2023-05-20 03:38:51 +00:00
Charlie Marsh 6aa9900c03
Improve handling of `__qualname__`, `__module__`, and `__class__` (#4512) 2023-05-20 03:03:45 +00:00
Charlie Marsh 9e21414294
Improve reference resolution for deferred-annotations-within-classes (#4509) 2023-05-20 02:54:18 +00:00
Charlie Marsh bb4e674415
Move reference-resolution into Context (#4510) 2023-05-20 02:47:15 +00:00
Charlie Marsh b42ff08612
Parenthesize more sub-expressions in f-string conversion (#4535) 2023-05-19 19:41:30 +00:00
Jonathan Plasse 03fb62c174
Fix RUF010 auto-fix with parenthesis (#4524) 2023-05-19 19:05:51 +00:00
Jonathan Plasse 2dfc645ea9
Fix UP032 auto-fix with integers (#4525) 2023-05-19 18:53:50 +00:00
Hoël Bagard fe8e2bb237
[`pylint`] Add `named_expr_without_context` (`W0131`) (#4531) 2023-05-19 18:00:01 +00:00
Tom Kuson a9ed8d5391
Add Pylint docs (#4530) 2023-05-19 17:40:18 +00:00
Aaron Cunningham 41a681531d
Support new `extend-per-file-ignores` setting (#4265) 2023-05-19 12:24:04 -04:00
Justin Prieto 837e70677b
[`flake8-pyi`] Implement `PYI013` (#4517) 2023-05-19 15:39:55 +00:00
Hoël Bagard 7ebe372122
[`pylint`] Add `duplicate-value` (`W0130`) (#4515) 2023-05-19 15:03:47 +00:00
konstin 32f1edc555
Create dummy format CLI (#4453)
* Create dummy format CLI

* Hide format from clap, too

Missed that this is a separate option from `#[doc(hidden)]`

* Remove cargo feature and replace with warning

* No-alloc files parameter matching

* beta warning: warn -> warn_user_once

* Rephrase warning
2023-05-19 11:45:52 +02:00
Micha Reiser 2f35099f81
Remove `regex` dependency from `ruff_python_ast` (#4518) 2023-05-19 06:44:18 +00:00
Ville Skyttä fdb241cad2
[`flake8-bandit`] Implement `paramiko-call` (`S601`) (#4500) 2023-05-19 03:40:50 +00:00
Charlie Marsh ab303f4e09
Gate `schemars` skip under feature flag (#4514) 2023-05-19 03:01:31 +00:00
Charlie Marsh 15cb21a6f4
Implement `--extend-fixable` option (#4297) 2023-05-18 22:20:19 -04:00
Ville Skyttä 2e2ba2cb16
Avoid some false positives in dunder variable assigments (#4508) 2023-05-19 02:11:20 +00:00
Charlie Marsh d4c0a41b00
Bump version to 0.0.269 (#4506) 2023-05-18 19:45:20 +00:00
Charlie Marsh 8702b5a40a
Bump version to 0.0.268 (#4501) 2023-05-18 15:35:46 -04:00
konstin a3aa841fc9
Overhaul sdist handling (#4439)
* Reduce sdist size

`maturin sdist && du -sh target/wheels/ruff-0.0.267.tar.gz`:
Before: 1,1M
After: 668K

* Test sdist before release

* Update maturin to fix the sdist
2023-05-18 19:02:22 +02:00
Ville Skyttä fdd894145b
S608 improvements (#4499) 2023-05-18 11:27:22 -04:00
Charlie Marsh 85f67b2ee3
Make the AST Checker `pub(crate)` (#4498) 2023-05-18 15:17:26 +00:00
Charlie Marsh e9c6f16c56
Move unparse utility methods onto Generator (#4497) 2023-05-18 15:00:46 +00:00
Charlie Marsh d3b18345c5
Move triple-quoted string detection into `Indexer` method (#4495) 2023-05-18 14:42:05 +00:00
Jonathan Plasse 0e4d174551
Fix COM812 false positive in string subscript (#4493) 2023-05-18 14:35:41 +00:00
Charlie Marsh 73efbeb581
Invert quote-style when generating code within f-strings (#4487) 2023-05-18 14:33:33 +00:00
Charlie Marsh 2fb312bb2b
Fix scoping of comprehensions within classes (#4494) 2023-05-18 14:30:02 +00:00
Charlie Marsh e8e66f3824
Remove unnecessary path prefixes (#4492) 2023-05-18 10:19:09 -04:00
Charlie Marsh a8d080c825
Extend multi-line noqa directives to start-of-line (#4490) 2023-05-18 13:05:27 +00:00
Charlie Marsh ddd541b198
Move `Insertion` into its own module (#4478) 2023-05-17 21:11:41 +00:00
Tom Kuson 3090aec97d
Add PLW docs (#4469) 2023-05-17 18:30:45 +00:00
Charlie Marsh 14c6419bc1
Bring pycodestyle rules into full compatibility (on SciPy) (#4472) 2023-05-17 16:51:55 +00:00
Charlie Marsh 3bc29d6c0c
Allow shebang comments at start-of-file (#4473) 2023-05-17 16:32:12 +00:00
Charlie Marsh 67c5086aba
Include precise tokens for extraneous-whitespace diagnostics (#4471) 2023-05-17 16:25:17 +00:00
Charlie Marsh cd82b83f89
Avoid triggering `pd#at` and friends on non-subscripts (#4474) 2023-05-17 16:20:58 +00:00
Charlie Marsh 39fb2cc732
Remove special-casing for whitespace-around-@ (#4458) 2023-05-17 15:32:08 +00:00
John Kelly 9c732c7946
Implement TRY302 - `raise` after `except` (#4461) 2023-05-17 01:36:10 +00:00
Charlie Marsh 2332ea5753
Remove type-complexity ignores from `map_codes.rs` (#4463) 2023-05-17 01:02:24 +00:00
Charlie Marsh 6b1062ccc3
Enable `pycodestyle` rules under new "nursery" category (#4407) 2023-05-16 21:21:58 +00:00
Charlie Marsh 39fa38cb35
Enable `pycodestyle` rules (#3689) 2023-05-16 20:39:43 +00:00
Micha Reiser ddf7de7e86
Prototype Black's string joining/splitting (#4449) 2023-05-16 18:42:40 +01:00
Charlie Marsh e5101e8eac
Split logical lines tests into one test per assertion (#4457) 2023-05-16 17:40:39 +00:00
Charlie Marsh d9c3f8e249
Avoid flagging missing whitespace for decorators (#4454) 2023-05-16 13:15:01 -04:00
Charlie Marsh 7e0d018b35
Avoid emitting empty logical lines (#4452) 2023-05-16 16:33:33 +00:00
Jeong, YunWon 4b05ca1198
Specialize ConversionFlag (#4450) 2023-05-16 18:00:13 +02:00
Charlie Marsh f0465bf106
Emit non-logical newlines for "empty" lines (#4444) 2023-05-16 14:58:56 +00:00
Charlie Marsh 8134ec25f0
Fix expected-indentation errors with end-of-line comments (#4438) 2023-05-16 10:45:54 -04:00
Jeong, YunWon badade3ccc
Impl `Default` for `SourceLocation` (#4328)
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-16 07:03:43 +00:00
Micha Reiser fa26860296
Refactor range from `Attributed` to `Node`s (#4422) 2023-05-16 06:36:32 +00:00
Sladyn c711db11ce
[`flake8-pyi`] Implement `unannotated-assignment-in-stub` (`PY052`) (#4293) 2023-05-16 02:06:55 +00:00
Charlie Marsh 1fe6954150
Fix bidirectional-unicode formatting (#4445) 2023-05-15 22:36:25 +00:00
Charlie Marsh 2414469ac3
Enable automatic rewrites of `typing.Deque` and `typing.DefaultDict` (#4420) 2023-05-15 22:33:24 +00:00
Tom Kuson 838ba1ca3d
Add `PLE` rule docs (#4437) 2023-05-15 19:48:18 +00:00
qdegraaf 8ba9eb83af
Implement `flake8-async` plugin (#4432) 2023-05-15 09:15:28 -04:00
Zanie Adkins 2c6efc2f5f
Update C419 to be a suggested fix (#4424) 2023-05-15 10:30:40 +02:00
Ben Doerry d6930ca991
Merge subsettings when extending configurations (#4431) 2023-05-15 02:34:58 +00:00
Charlie Marsh dcff515ad8
Make `extend_function_names` an `Option` type (#4434) 2023-05-15 02:15:02 +00:00
Jonathan Plasse b9e387013f
Fix `RUF010` autofix within f-strings (#4423) 2023-05-15 02:08:30 +00:00
Charlie Marsh a69451ff46
[`pyupgrade`] Remove `keep-runtime-typing` setting (#4427) 2023-05-14 03:12:52 +00:00
Tyler Yep 01b372a75c
Implement `flake8-future-annotations` FA100 (#3979) 2023-05-14 03:00:06 +00:00
Charlie Marsh cd2e7fa72a
Use `TextSize` for flake8-todos `Directive` methods (#4426) 2023-05-13 22:05:51 -04:00
Charlie Marsh fdf0b999cd
Replace TODO tag regex with a lexer (#4413) 2023-05-13 15:23:46 +00:00
Jonathan Plasse 45b5fa573f
Ignore ANN401 for overridden methods (#4409) 2023-05-13 15:20:04 +00:00
Jonathan Plasse a0258f2205
[`pylint`] Fix `PLW3301` auto-fix with generators (#4412) 2023-05-13 11:17:13 -04:00
alm 0a68636de3
[`pylint`] Add `duplicate-bases` rule (#4411) 2023-05-13 14:28:03 +00:00
Evan Rittenhouse 2f53781a77
Implement `flake8_todos` (#3921) 2023-05-13 14:19:06 +00:00
Micha Reiser f5afa8198c
Use new `rustpython_format` crate over `rustpython-common` (#4388) 2023-05-13 12:35:02 +00:00
Charlie Marsh eeabfd6d18
Enable autofix for split-assertions at top level (#4405) 2023-05-12 17:35:49 -04:00
Charlie Marsh 490301f9fe
Replace `macro_rules!` visitors with dedicated methods (#4402) 2023-05-12 17:05:59 -04:00
Charlie Marsh dcedd5cd9d
Bump version to 0.0.267 (#4400) 2023-05-12 19:04:56 +00:00
Lotem 52f6663089
Implement `RUF010` to detect explicit type conversions within f-strings (#4387) 2023-05-12 18:12:58 +00:00
Charlie Marsh 67076b2dcb
Bump version to 0.0.266 (#4391) 2023-05-12 13:11:03 -04:00
Charlie Marsh 7e3ba7f32a
Use `bitflags` for tracking `Context` flags (#4381) 2023-05-12 16:07:26 +00:00
konstin 09dbd2029c
Update maturin to maturin 0.15 (#3999)
* Update maturin to maturin>=0.14.17

This allows removing the deprecated `[package.metadata.maturin]`

* Update to maturin 0.15
2023-05-12 15:43:06 +02:00
Jonathan Plasse 1380bd94da
Expose more fields in rule explanation (#4367) 2023-05-11 19:22:23 -04:00
Jonathan Plasse c10a4535b9
Disallow `unreachable_pub` (#4314) 2023-05-11 18:00:00 -04:00
Charlie Marsh 97802e7466
Ignore some methods on list in `flake8-boolean-trap` (#4385) 2023-05-11 21:54:59 +00:00
Jonathan Plasse 4fd4a65718
Isolate show statistic integration test (#4383) 2023-05-11 21:42:34 +00:00
Charlie Marsh d78c614764
Remove special-casing for `flake8-builtins` rules (#4380) 2023-05-11 16:39:28 -04:00
Charlie Marsh 3f3dd7af99
Move some recursion out of the pre-visit statement phase (#4379) 2023-05-11 15:46:25 -04:00
Charlie Marsh 871b92a385
Avoid re-using imports beyond current edit site (#4378) 2023-05-11 14:47:18 -04:00
Charlie Marsh 9158f13ee6
Respect `__all__` imports when determining definition visibility (#4357) 2023-05-11 17:43:51 +00:00
Charlie Marsh 72e0ffc1ac
Delay computation of `Definition` visibility (#4339) 2023-05-11 17:14:29 +00:00
Charlie Marsh ffcf0618c7
Avoid underflow in expected-special-method-signature (#4377) 2023-05-11 12:47:47 -04:00
Micha Reiser 1ccef5150d
Remove lifetime from FormatContext (#4376) 2023-05-11 15:43:42 +00:00
konstin 3c2f41b615
Also show rule codes in autofix errors in production codes (#4327)
I needed those changes for #4326
2023-05-11 17:36:03 +02:00
Jeong, YunWon bbadbb5de5
Refactor code to use the new RustPython `is` method (#4369) 2023-05-11 16:16:36 +02:00
Jeong, YunWon be6e00ef6e
Re-integrate RustPython parser repository (#4359)
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-11 07:47:17 +00:00
Charlie Marsh 865205d992
Implement pygrep-hook's Mock-mistake diagnostic (#4366) 2023-05-11 03:26:29 +00:00
Charlie Marsh 572adf7994
Use target name in hardcoded-password diagnostics (#4365) 2023-05-11 02:54:27 +00:00
Charlie Marsh 3b26bf84f5
Avoid debug panic with empty indent replacement (#4364) 2023-05-11 02:42:18 +00:00
Charlie Marsh f4f88308ae
Remove `Copy` and destructure `Snapshot` (#4358) 2023-05-10 19:46:18 +00:00
Charlie Marsh ea3d3a655d
Add a `Snapshot` abstraction for deferring and restoring visitor context (#4353) 2023-05-10 16:50:47 +00:00
Charlie Marsh fd34797d0f
Add a specialized `StatementVisitor` (#4349) 2023-05-10 12:42:20 -04:00
Charlie Marsh 257c571c43
Remove pub from some `Checker` fields (#4352) 2023-05-10 12:33:47 -04:00
Charlie Marsh ccdee55e6e
Tweak capitalization of B021 message (#4350) 2023-05-10 15:59:00 +00:00
Charlie Marsh 6d6d7abf70
Use short-import for `HashMap` (#4351) 2023-05-10 15:46:55 +00:00
konstin 0096938789
Optionally show fixes when using `--features ecosystem_ci` with cargo and `--show-fixes` at runtime (#4191)
* Generate fixes when using --show-fixes

Example command: `cargo run --bin ruff -- --no-cache --select F401
--show-source --show-fixes
crates/ruff/resources/test/fixtures/pyflakes/F401_9.py`

Before, `--show-fixes` was ignored:

```
crates/ruff/resources/test/fixtures/pyflakes/F401_9.py:4:22: F401 [*] `foo.baz` imported but unused
  |
4 | __all__ = ("bar",)
5 | from foo import bar, baz
  |                      ^^^ F401
  |
  = help: Remove unused import: `foo.baz`

Found 1 error.
[*] 1 potentially fixable with the --fix option.
```

After:

```
crates/ruff/resources/test/fixtures/pyflakes/F401_9.py:4:22: F401 [*] `foo.baz` imported but unused
  |
4 | __all__ = ("bar",)
5 | from foo import bar, baz
  |                      ^^^ F401
  |
  = help: Remove unused import: `foo.baz`

ℹ Suggested fix
1 1 | """Test: late-binding of `__all__`."""
2 2 |
3 3 | __all__ = ("bar",)
4   |-from foo import bar, baz
  4 |+from foo import bar

Found 1 error.
[*] 1 potentially fixable with the --fix option.
```

* Add `--format ecosystem-ci`

* cargo dev generate-all

* Put behind cargo feature

* Regenerate docs

* Don't test ecosystem_ci feature on CI

* Use top level flag instead

* Fix

* Simplify code based on #4191

* Remove old TODO comment
2023-05-10 17:45:57 +02:00
Micha Reiser 853d8354cb
JSON Emitter: Use one indexed column numbers for edits (#4007)
I noticed in the byte-offsets refactor that the `JsonEmitter` uses one indexed column numbers for the diagnostic start and end locations but not for `edits`.

This PR changes the `JsonEmitter` to emit one-indexed column numbers for edits, as we already do for `Message::location` and `Message::end_location`.

## Open questions

~We'll need to change the LSP to subtract 1 from the columns in `_parse_fix`~

6e44fadf8a/ruff_lsp/server.py (L129-L150)

~@charliermarsh is there a way to get the ruff version in that method? If not, then I recommend adding a `version` that we increment whenever we make incompatible changes to the serialized message. We can then use it in the LSP to correctly compute the column offset.~

I'll use the presence of the `Fix::applicability` field to detect if the Ruff version uses one or zero-based column indices.

See https://github.com/charliermarsh/ruff-lsp/pull/103
2023-05-10 17:21:02 +02:00
Charlie Marsh 5f64d2346f
Enforce max-doc-length for multi-line docstrings (#4347) 2023-05-10 11:06:07 -04:00
Micha Reiser ddbe5a1243
Add `Fix::applicability` to JSON output (#4341) 2023-05-10 14:34:53 +00:00
Evan Rittenhouse 04097d194c
Fix false positives in PD002 (#4337) 2023-05-10 16:04:28 +02:00
Micha Reiser a2b8487ae3
Remove functor from autofix title (#4245) 2023-05-10 07:21:15 +00:00
Micha Reiser 8969ad5879
Always generate fixes (#4239) 2023-05-10 07:06:14 +00:00
Micha Reiser bfa1c28c00
Use non-empty ranges for logical-lines diagnostics (#4133) 2023-05-10 06:44:33 +00:00
Zanie Adkins cf7aa26aa4
Add `Applicability` to `Fix` (#4303)
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-10 08:42:46 +02:00
Micha Reiser d66ce76691
Truncate `SyntaxError`s before newline character (#4124) 2023-05-10 08:37:57 +02:00
Tom Kuson b8bb9e8b92
Add docs for `flake8-simplify` rules (#4334) 2023-05-10 03:03:24 +00:00
Charlie Marsh 5e46dcbf21
Handle `.encode` calls on parenthesized expressions (#4338) 2023-05-09 22:57:10 -04:00
trag1c 045449ab12
Improved E713 & E714 code examples (#4336) 2023-05-09 22:27:44 -04:00
Tom Kuson d5ff8d7c43
Add `flake8-pie` documentation (#4332) 2023-05-09 22:11:30 +00:00
Charlie Marsh d92fb11e80
Include positional- and keyword-only arguments in too-many-arguments (#4329) 2023-05-09 18:05:53 -04:00
Charlie Marsh 3d947196f8
Make violation struct fields private (#4331) 2023-05-09 18:00:20 -04:00
Charlie Marsh e846f2688b
Avoid SIM105 autofixes that would remove comments (#4330) 2023-05-09 21:30:56 +00:00
Charlie Marsh 7b91a162c6
Remove `current_` prefix from some Context methods (#4325) 2023-05-09 19:40:12 +00:00
Charlie Marsh 8c2cfade90
Move `show_source` onto CLI settings group (#4317) 2023-05-09 17:26:25 +00:00
Charlie Marsh a435c0df4b
Remove deprecated `update-check` setting (#4313) 2023-05-09 13:10:02 -04:00
Aaron Cunningham 48e1852893
Revert the B027 autofix logic (#4310) 2023-05-09 13:08:20 -04:00
Calum Young 03f141f53d
Check that all rules have descriptions (#4315) 2023-05-09 16:53:23 +00:00
Charlie Marsh d3b71f1e04
Run autofix on initial watcher pass (#4311) 2023-05-09 12:35:32 -04:00
Mikko Leppänen 04e8e74499
Feat: detect changes also in configuration files (#4169) 2023-05-09 16:22:52 +00:00
konstin 318653c427
Write diagnostic name when failing to create fix (#4309) 2023-05-09 17:46:40 +02:00
Micha Reiser 99a755f936
Add `schemars` feature (#4305) 2023-05-09 16:15:18 +02:00
Aurelio Jargas e7dfb35778
UP011: Fix typo in rule description (#4306) 2023-05-09 08:49:15 -04:00
Dhruv Manilawala 085fd37209
Preserve whitespace around `ListComp` brackets in `C419` (#4099) 2023-05-09 08:43:05 +02:00
Charlie Marsh 83536cf87b
Ignore `TRY301` exceptions without except handlers (#4301) 2023-05-09 03:38:02 +00:00
Charlie Marsh 9366eb919d
Specify exact command in incorrect parentheses suggestion (#4300) 2023-05-09 02:21:54 +00:00
Charlie Marsh 8be51942dd
Use `ruff_python_semantic` abstract utility in flake8-pytest-style (#4299) 2023-05-08 22:12:28 -04:00
Charlie Marsh d365dab904
Include static and class methods in in abstract decorator list (#4298) 2023-05-08 21:54:02 -04:00
Charlie Marsh f23851130a
Add `flynt` to documentation (#4295) 2023-05-09 00:52:41 +00:00
Aarni Koskela efdf383f5e
Implement Flynt static string join transform as FLY002 (#4196) 2023-05-08 20:46:38 -04:00
Charlie Marsh 61f21a6513
Rewrite `not not a` as `bool(a)` in boolean contexts (#4294) 2023-05-08 23:38:24 +00:00
Charlie Marsh c54e48dce5
Avoid panics for f-string rewrites at start-of-file (#4291) 2023-05-08 19:44:57 +00:00
Charlie Marsh b913e99bde
Explicitly support ASCII-only for capitalization checks (#4290) 2023-05-08 15:41:11 -04:00
Dhruv Manilawala 4ac506526b
Avoid `D403` if first char cannot be uppercased (#4283) 2023-05-08 15:33:24 -04:00
Calum Young cd41de2588
Check docs formatting check (#4270) 2023-05-08 19:03:22 +00:00
Dhruv Manilawala 3344d367f5
Avoid fixing `PD002` in a lambda expression (#4286) 2023-05-08 18:24:27 +00:00
Aarni Koskela d7a369e7dc
Update confusable character mapping (#4274) 2023-05-08 14:20:44 -04:00
Jonathan Plasse 1b1788c8ad
Fix replace_whitespace() tabulation to space (#4226)
Co-authored-by: Micha Reiser <micha@reiser.io>
2023-05-08 12:03:04 +00:00
Micha Reiser 4d5a339d9e
Remove `Fix::from(Edit)` and add deprecated replacement methods to `Diagnostic`s (#4275) 2023-05-08 10:25:50 +00:00
Zanie Adkins 0801f14046
Refactor `Fix` and `Edit` API (#4198) 2023-05-08 11:57:03 +02:00
Trevor McCulloch 3beff29026
[`pylint`] Implement `nested-min-max` (`W3301`) (#4200) 2023-05-07 03:14:14 +00:00