Charlie Marsh
7617519b4f
Skip python -m ruff --help on linux-cross
2023-05-12 15:46:42 -04:00
Charlie Marsh
bc7ddd8f3a
Temporarily create release on-tag
2023-05-12 15:31:48 -04:00
Charlie Marsh
e6bb5cddcf
Add Astral badge to the repo ( #4401 )
2023-05-12 19:27:38 +00:00
Charlie Marsh
dcedd5cd9d
Bump version to 0.0.267 ( #4400 )
2023-05-12 19:04:56 +00:00
konstin
606b6ac3df
Workaround for maturin bug ( #4399 )
2023-05-12 18:55:55 +00:00
Zanie Adkins
ebda9b31d9
Update CI to test python -m ruff on release ( #4397 )
2023-05-12 18:47:30 +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
a6176d2c70
Add PyTorch to user list ( #4393 )
2023-05-12 18:02:13 +00:00
OMEGA_RAZER
1d165f7e9d
Add linting badge that can be used to display usage ( #3938 )
2023-05-12 17:58:29 +00:00
Charlie Marsh
e96092291d
Update Ruff badge ( #4392 )
2023-05-12 13:42:33 -04: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
6a52577630
Ecosystem CI: Allow storing checkouts locally ( #4192 )
...
* Ecosystem CI: Allow storing checkouts locally
This adds a --checkouts options to (re)use a local directory instead of checkouts into a tempdir
* Fix missing path conversion
2023-05-11 17:36:44 +02: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
Calum Young
b76b4b6016
List rule changes in ecosystem ( #4371 )
...
* Count changes for each rule
* Handle case where rule matches were found in a line
* List and sort by changes
* Remove detail from rule changes
* Add comment about leading :
* Only print rule changes if rule changes are present
* Use re.search and match group
* Remove dict().items()
* Use match group to extract rule code
2023-05-11 16:33:15 +02:00
Jeong, YunWon
bbadbb5de5
Refactor code to use the new RustPython is method ( #4369 )
2023-05-11 16:16:36 +02:00
Calum Young
ba6370e5d0
Move black excludes from pre-commit config to pyproject.toml ( #4370 )
2023-05-11 09:00:05 -04: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
dependabot[bot]
6532455672
Bump json5 from 1.0.1 to 1.0.2 in /playground ( #4354 )
2023-05-10 16:34:37 +00: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 SyntaxErrors 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
Calum Young
8dea47afc1
Update mkdocs unformatted example error message ( #4312 )
2023-05-09 12:36:13 -04: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
Marti Raudsepp
f08fd5cbf0
Tweak package metadata URLs, add changelog and docs ( #4304 )
2023-05-09 11:32:47 -04: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
43d6aa9173
Clarify some docstring-related docs ( #4292 )
2023-05-08 22:24:53 +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 Diagnostics ( #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
Micha Reiser
edaf891042
Fix jemalloc page size on aarch64 ( #4247 )
...
Co-authored-by: konstin <konstin@mailbox.org >
2023-05-08 08:10:03 +02:00
Trevor McCulloch
3beff29026
[pylint] Implement nested-min-max (W3301) ( #4200 )
2023-05-07 03:14:14 +00:00
Jerome Leclanche
5ac2c7d293
Add .git-rewrite folder to default ignored folder paths ( #4261 )
2023-05-06 22:40:38 -04:00
Charlie Marsh
e66fdb83d0
Respect insertion location when importing symbols ( #4258 )
2023-05-07 02:32:40 +00:00
Charlie Marsh
a95bafefb0
Fix RET504 example in docs ( #4260 )
2023-05-06 16:56:52 -04:00
Charlie Marsh
539af34f58
Add a utility method to detect top-level state ( #4259 )
2023-05-06 20:24:27 +00:00
Charlie Marsh
983bb31577
Remove RefEquality usages from Context ( #4257 )
2023-05-06 15:55:14 -04:00
Charlie Marsh
b98b604071
Remove some deferred &Stmt references ( #4256 )
2023-05-06 18:42:35 +00:00
Charlie Marsh
cd27b39aff
Re-order some code in scope.rs ( #4255 )
2023-05-06 16:36:20 +00:00
Charlie Marsh
a9fc648faf
Use NodeId for Binding source ( #4234 )
2023-05-06 16:20:08 +00:00
Charlie Marsh
c1f0661225
Replace parents statement stack with a Nodes abstraction ( #4233 )
2023-05-06 16:12:41 +00:00
Dhruv Manilawala
2c91412321
Consider Flask app logger as logger candidate ( #4253 )
2023-05-06 11:31:10 -04:00
Charlie Marsh
11e1380df4
Bump version to 0.0.265 ( #4248 )
2023-05-05 13:16:05 -04:00
Micha Reiser
e93f378635
Refactor whitespace around operator ( #4223 )
2023-05-05 09:37:56 +02:00
Micha Reiser
2124feb0e7
Fail lint tests if the fix creates a syntax error ( #4202 )
2023-05-05 07:59:33 +02:00
Charlie Marsh
c0e7269b07
Update doc defaults for section-order ( #4232 )
2023-05-04 21:35:27 +00:00
Chris Chan
c2921e957b
[pylint] Implement import-self (W0406) ( #4154 )
2023-05-04 16:05:15 -04:00
Charlie Marsh
93cfce674a
Ignore __debuggerskip__ in unused variable checks ( #4229 )
2023-05-04 15:45:49 -04:00
Charlie Marsh
b71cc3789f
Change --fix-only exit semantics to mirror --fix ( #4146 )
2023-05-04 19:03:15 +00:00
Zanie Adkins
717128112d
Fix panic in pydocstyle D214 when docstring indentation is empty ( #4216 )
2023-05-04 14:42:34 -04:00
Arya Kumar
e9e194ab32
[flake8-pyi] Implement PYI042 and PYI043 ( #4214 )
2023-05-04 14:35:26 -04:00
Calum Young
890e630c41
Allow linking to individual rules ( #4158 )
2023-05-04 13:43:53 -04:00
Aaron Cunningham
d78287540d
Update B027 to support autofixing ( #4178 )
2023-05-04 16:36:32 +00:00
Charlie Marsh
494e807315
Add space when joining rule codes for debug messages ( #4225 )
2023-05-04 15:34:34 +00:00
Tom Kuson
6db1a32eb9
Add docs for PLC rules ( #4224 )
2023-05-04 10:56:00 -04:00
Dhruv Manilawala
bb2cbf1f25
End of statement insertion should occur after newline ( #4215 )
2023-05-04 16:17:41 +02:00
konstin
badfdab61a
Show rule codes on autofix failure ( #4220 )
2023-05-04 15:25:07 +02:00
Dhruv Manilawala
59d40f9f81
Show settings path in --show-settings output ( #4199 )
2023-05-04 08:22:31 +02:00
Arya Kumar
37aae666c7
[flake8-pyi] PYI020 ( #4211 )
2023-05-03 22:37:32 -04:00
Leiser Fernández Gallo
460023a959
Fix era panic caused by out of bound edition ( #4206 )
2023-05-03 15:48:43 +02:00
Aarni Koskela
d0e3ca29d9
Print out autofix-broken or non-converging code when debugging ( #4201 )
2023-05-03 13:50:03 +02:00
Christian Clauss
ccfc78e2d5
faq: Clarify how Ruff and Black treat line-length. ( #4180 )
2023-05-02 23:19:38 +00:00
Micha Reiser
b14358fbfe
Render tabs as 4 spaces in diagnostics ( #4132 )
2023-05-02 13:14:02 +00:00
wookie184
ac600bb3da
Warn on PEP 604 syntax not in an annotation, but don't autofix ( #4170 )
2023-05-01 23:49:20 -07:00
Charlie Marsh
8cb76f85eb
Bump version to 0.0.264 ( #4179 )
2023-05-01 23:33:38 -07:00
Charlie Marsh
56c45013c2
Allow boolean parameters for pytest.param ( #4176 )
2023-05-02 01:07:50 +00:00
Calum Young
a4ce746892
Reference related settings in rules ( #4157 )
2023-05-02 00:59:00 +00:00
Calum Young
2d6d51f3a1
Add flake8-return docs ( #4164 )
2023-05-02 00:53:46 +00:00
Jonathan Plasse
814731364a
Fix UP032 auto-fix ( #4165 )
2023-04-30 16:57:41 -04:00
Jonathan Plasse
8c97e7922b
Fix F811 false positive with match ( #4161 )
2023-04-30 14:39:45 -04:00
Jonathan Plasse
a32617911a
Use --filter=blob:none to clone CPython faster ( #4156 )
2023-04-30 13:39:22 +02:00
Charlie Marsh
64b7280eb8
Respect parent-scoping rules for NamedExpr assignments ( #4145 )
2023-04-29 22:45:30 +00:00
Evan Rittenhouse
8d64747d34
Remove pyright comment prefix from PYI033 checks ( #4152 )
2023-04-29 18:41:04 -04:00
Charlie Marsh
2115d99c43
Remove ScopeStack in favor of child-parent ScopeId pointers ( #4138 )
2023-04-29 18:23:51 -04:00
Calum Young
39ed75f643
Document flake8-unused-arguments ( #4147 )
2023-04-29 19:17:50 +00:00
Calum Young
8f61eae1e7
Add remaining pep8-naming docs ( #4149 )
2023-04-29 15:13:10 -04:00
Calum Young
f0f4bf2929
Move typos to pre-commit config ( #4148 )
2023-04-29 12:13:35 -04:00
Calum Young
03144b2fad
Document flake8-commas ( #4142 )
2023-04-29 03:24:15 +00:00
Calum Young
0172cc51a7
Document flake8-print ( #4144 )
2023-04-29 03:19:00 +00:00
Calum Young
12d64a223b
Document RUF100 ( #4141 )
2023-04-28 22:14:15 +00:00
Charlie Marsh
432ea6f2e2
Tweak rule documentation for B008 ( #4137 )
2023-04-28 01:29:03 +00:00
Evan Rittenhouse
b34804ceb5
Make D410/D411 autofixes mutually exclusive ( #4110 )
2023-04-28 01:24:35 +00:00
Moritz Sauter
ee6d8f7467
Add bugbear immutable functions as allowed in dataclasses ( #4122 )
2023-04-27 21:23:06 -04:00
Dhruv Manilawala
089b64e9c1
Autofix EM101, EM102, EM103 if possible ( #4123 )
2023-04-27 18:53:27 +00:00
Tom Kuson
3e81403fbe
Add pygrep-hooks documentation ( #4131 )
2023-04-27 18:33:07 +00:00
Charlie Marsh
3c9f5e2fdc
Preserve star-handling special-casing for force-single-line ( #4129 )
2023-04-27 00:02:17 -04:00
Micha Reiser
17db2e2a62
Fix B023 shadowed variables in nested functions ( #4111 )
2023-04-26 22:01:31 +01:00
Micha Reiser
e04ef42334
Use memchr to speedup newline search on x86 ( #3985 )
2023-04-26 20:15:47 +01:00
Micha Reiser
f3e6ddda62
perf(logical-lines): Various small perf improvements ( #4022 )
2023-04-26 20:10:35 +01:00
Micha Reiser
cab65b25da
Replace row/column based Location with byte-offsets. ( #3931 )
2023-04-26 18:11:02 +00:00
Charlie Marsh
ee91598835
Tweak --show-fixes documentation ( #4117 )
2023-04-26 15:15:56 +00:00
Calum Young
ab65eaea7f
Add docs build validation stage to CI ( #4116 )
...
Nice. Thank you
2023-04-26 14:57:59 +01:00
konstin
19d8913e32
Use musl in ecosystem docker ( #3998 )
...
This prevents errors when the host glibc is newer than the one in the docker container
2023-04-26 05:54:53 +02:00
Dhruv Manilawala
b9c06b48e1
Document that --diff implies --fix-only ( #4098 )
2023-04-25 21:19:44 -06:00
Charlie Marsh
7266eb0d69
Add support for providing command-line arguments via argfile ( #4087 )
2023-04-25 17:58:21 -06:00
Jonathan Plasse
4df7bc0bcd
Fix E713 and E714 false positives for multiple comparisons ( #4083 )
2023-04-25 11:37:56 -06:00
Calum Young
464a0ff483
Fix docs failure ( #4097 )
2023-04-25 11:30:37 -06:00
Charlie Marsh
fd7ccb4c9e
Bump version to 0.0.263 ( #4086 )
2023-04-24 23:32:29 -06:00
Evan Rittenhouse
ae6f38344a
Unify positional and keyword arguments when checking for missing arguments in docstring ( #4067 )
2023-04-25 05:32:15 +00:00
Trevor McCulloch
bbf658d4c5
[pylint] Implement PLE0302 unexpected-special-method-signature ( #4075 )
2023-04-25 04:51:21 +00:00
Jonathan Plasse
1f3b0fd602
Fix SIM222 and SIM223 false positives and auto-fix ( #4063 )
2023-04-25 04:44:02 +00:00
Dhruv Manilawala
37483f3ac9
Ignore ClassVar annotation for RUF008, RUF009 ( #4081 )
2023-04-24 23:58:30 +00:00
Zanie Adkins
4d3a1e0581
Add PrefectHQ/prefect to list of ruff users ( #4084 )
2023-04-24 17:49:12 -06:00
Bartosz Sokorski
9e5f348a17
Add Poetry to the list of projects using Ruff ( #4085 )
2023-04-24 17:48:35 -06:00
Jonathan Plasse
5e91211e6d
Add in_boolean_test to Context ( #4072 )
2023-04-23 23:18:23 -06:00
Jonathan Plasse
df77595426
Move Truthiness into ruff_python_ast ( #4071 )
2023-04-24 04:54:31 +00:00
Charlie Marsh
407af6e0ae
Avoid infinite-propagation of inline comments when force-splitting imports ( #4074 )
2023-04-23 22:39:51 -06:00
Dhruv Manilawala
d64146683e
Increment priority should be (branch-local, global) ( #4070 )
2023-04-23 00:04:15 -06:00
Charlie Marsh
0e7914010f
Misc. small clean-up of flake8-import-conventions rules ( #4069 )
2023-04-23 04:57:15 +00:00
Edgar R. M
cfc7d8a2b5
[flake8-import-conventions] Implement new rule ICN003 to ban from ... import ... for selected modules ( #4040 )
2023-04-23 04:40:36 +00:00
Tom Kuson
f5cd659292
Add docs for tryceratops rules ( #4042 )
2023-04-23 04:35:56 +00:00
Charlie Marsh
260138b427
Use Context for pep8-naming helpers ( #4068 )
2023-04-22 18:44:54 -04:00
Jonathan Plasse
2da149fd7e
Ignore N815 for TypedDict fields ( #4066 )
2023-04-22 18:17:14 -04:00
Micha Reiser
e33887718d
Use Rust 1.69 ( #4065 )
2023-04-22 23:04:17 +01:00
Micha Reiser
ba4f4f4672
Upgrade dependencies ( #4064 )
2023-04-22 18:04:01 +01:00
Pronoy Mandal
b7a57ce120
Update tutorial.md ( #4055 )
2023-04-21 10:56:31 -06:00
Alan Du
82abbc7234
[flake8-bugbear] Add pytest.raises(Exception) support to B017 ( #4052 )
2023-04-21 03:43:01 +00:00
Dhruv Manilawala
ba98149022
Avoid RUF008 if field annotation is immutable ( #4039 )
2023-04-20 16:02:12 -04:00
Dhruv Manilawala
7fd44a3e12
Avoid PYI015 for valid default value without annotation ( #4043 )
2023-04-20 15:45:47 -04:00
Evan Rittenhouse
6e8d561090
Support --fix in watch mode ( #4035 )
2023-04-19 23:33:12 -04:00
Jacob Coffee
cb762f4cad
Add Astral announcement to README ( #4010 )
2023-04-19 20:28:45 +00:00
Charlie Marsh
eed6866b7e
Add relative-path tests for banned-api ( #4033 )
2023-04-19 16:04:22 -04:00
Charlie Marsh
25a6bfa9ee
Bump version to 0.0.262 ( #4032 )
2023-04-19 15:49:28 -04:00
Charlie Marsh
b3f8f2a5c1
Remove TODO in handle_node_store ( #4031 )
2023-04-19 15:28:56 -04:00
Charlie Marsh
cc8b5a543b
Ignore stub file assignments to value-requiring targets ( #4030 )
2023-04-19 15:26:00 -04:00
Charlie Marsh
10d5415bcb
Ignore certain flake8-pyi errors within function bodies ( #4029 )
2023-04-19 15:10:29 -04:00
Charlie Marsh
827cbe7f97
Treat non-future function annotations as required-at-runtime ( #4028 )
2023-04-19 14:43:55 -04:00
Charlie Marsh
0d84517fbc
Use module path resolver for relative autofix ( #4027 )
2023-04-19 14:43:45 -04:00
Charlie Marsh
7fa1da20fb
Support relative imports in banned-api enforcement ( #4025 )
2023-04-19 14:30:13 -04:00
Francesco Nuzzo
f13a161ead
remove unnecessary f-string formatting ( #4026 )
2023-04-19 18:14:33 +00:00
Charlie Marsh
c4cda301aa
Ignore relative imports in banned-api rules ( #4024 )
2023-04-19 13:30:08 -04:00
Charlie Marsh
13fda30051
Refactor flake8_tidy_imports rules to consistently take Checker ( #4023 )
2023-04-19 16:42:15 +00:00
Micha Reiser
a3146ab1ca
Fix (doc-)line-too-long start location ( #4006 )
2023-04-19 08:42:28 +02:00
Micha Reiser
c0cf87356e
Set non-empty range for indentation diagnostics ( #4005 )
2023-04-18 16:26:13 +02:00
Andrei Grazhdankov
6c3e4ef441
Add Robyn to user list ( #4008 )
2023-04-18 09:51:20 -04:00
Charlie Marsh
6c038830a8
Ignore argument assignments when enforcing RET504 ( #4004 )
2023-04-18 03:22:38 +00:00
Charlie Marsh
064a293b80
Fix defaults for section-order ( #4003 )
2023-04-18 03:00:17 +00:00
Charlie Marsh
79c47e29ee
Avoid short-circuiting when detecting RET rules ( #4002 )
2023-04-17 22:52:26 -04:00
Charlie Marsh
be87a29a9d
Respect typing-modules when evaluating no-return functions ( #4001 )
2023-04-17 20:25:44 +00:00
Micha Reiser
280dffb5e1
Add parser benchmark ( #3990 )
2023-04-17 16:43:59 +02:00
Charlie Marsh
336993ea06
Change Alpha trove classifier to Beta ( #3995 )
2023-04-17 13:55:49 +00:00
Tom Kuson
516cb10000
Add more documentation for flake8-type-checking ( #3994 )
2023-04-17 09:51:54 -04:00
Charlie Marsh
1cdd5e3424
Remove autofix behavior for uncapitalized-environment-variables (SIM112) ( #3988 )
2023-04-16 23:19:05 +00:00
Dhruv Manilawala
bd78c6ade2
Preserve type annotations when fixing E731 ( #3983 )
2023-04-16 23:15:38 +00:00
Dhruv Manilawala
5ce35faa86
Do not consider nested comment as part of code ( #3984 )
2023-04-16 19:11:01 -04:00
Justin Chu
484b572e6b
Add ONNX Runtime to user list ( #3982 )
2023-04-16 18:21:46 -04:00
Charlie Marsh
81805a45f0
Add some additional users ( #3975 )
2023-04-14 12:41:22 -04:00
Charlie Marsh
c457752f36
Redirect PIE802 to C419 ( #3971 )
2023-04-13 22:12:32 -04:00
Charlie Marsh
289289bfd3
Implement unnecessary-literal-within-dict-call (C418) ( #3969 )
2023-04-14 01:39:35 +00:00
Charlie Marsh
09274307e8
Add multi-edit change to BREAKING_CHANGES.md ( #3968 )
2023-04-13 23:12:00 +00:00
Charlie Marsh
d8718dcf54
Remove extraneous debug and TODO ( #3967 )
2023-04-13 18:45:18 -04:00
Charlie Marsh
fb9eeba422
Move user-defined section validation into Settings ( #3966 )
2023-04-13 22:40:05 +00:00
Paul
2d2630ef07
Implement isort custom sections and ordering ( #2419 ) ( #3900 )
2023-04-13 21:28:22 +00:00
Charlie Marsh
1f22e035e3
Add 'or if cond' to E712 message ( #3962 )
2023-04-13 19:02:23 +00:00
Rob Young
a6a7584d79
Implement flake8-bandit shell injection rules ( #3924 )
2023-04-13 14:45:27 -04:00
Charlie Marsh
ffac4f6ec3
Ignore assert errors (S101) in TYPE_CHECKING blocks ( #3960 )
2023-04-13 18:20:44 +00:00
Dhruv Manilawala
032a84b167
Check for parenthesis in implicit str concat in PT006 ( #3955 )
2023-04-13 17:56:18 +00:00
Charlie Marsh
3357aaef4b
Add docs for assert rule (S101) ( #3959 )
2023-04-13 13:43:00 -04:00
Charlie Marsh
d9ed43d112
Clarify some isort differences in FAQ ( #3954 )
2023-04-13 04:05:28 +00:00
Charlie Marsh
e160a52bfd
Raise percent-format upgrade rule (UP031) for hanging modulos ( #3953 )
2023-04-12 23:59:20 -04:00
Charlie Marsh
9067ae47d1
Allow typing_extensions.TypeVar assignments in .pyi files ( #3951 )
2023-04-12 17:30:15 -04:00
Charlie Marsh
71e807b3be
Add Prefect to user list ( #3949 )
2023-04-12 12:09:36 -04:00
Charlie Marsh
1e2df07544
Use identifier range for pytest rules ( #3948 )
2023-04-12 15:28:25 +00:00
USER-5
860841468c
[flake8-pyi] Implement duplicate types in unions (PYI016) ( #3922 )
2023-04-12 04:06:09 +00:00
Charlie Marsh
ed4ecc3255
Remove unused import ( #3944 )
2023-04-12 03:55:38 +00:00
Charlie Marsh
b999e4b1e2
Allow users to extend the set of included files via include ( #3914 )
2023-04-11 23:39:43 -04:00
Charlie Marsh
8ce227047d
Tidy up some pygrep-hooks rules ( #3942 )
2023-04-12 03:35:15 +00:00
Daniel Stancl
523515f936
[flake8-import-conventions] Add a rule for BannedImportAlias ( #3926 )
2023-04-12 03:29:24 +00:00
Charlie Marsh
10da3bc8dd
Support pyright: ignore comments ( #3941 )
2023-04-12 03:10:29 +00:00
Charlie Marsh
eb0dd74040
Avoid adding required imports to stub files ( #3940 )
2023-04-11 22:31:20 -04:00
Micha Reiser
61200d2171
lint snapshots: Use filename only to avoid platform specific separators ( #3930 )
2023-04-11 11:40:51 +02:00
Micha Reiser
e8aebee3f6
Pretty print Diagnostics in snapshot tests ( #3906 )
2023-04-11 09:03:00 +00:00
Micha Reiser
210083bdd8
Order Edits by Locations ( #3905 )
2023-04-11 08:56:41 +00:00
Micha Reiser
c33c9dc585
Introduce SourceFile to avoid cloning the message filename ( #3904 )
2023-04-11 08:28:55 +00:00
Micha Reiser
056c212975
Render code frame with context ( #3901 )
2023-04-11 10:22:11 +02:00
Micha Reiser
381203c084
Store source code on message ( #3897 )
2023-04-11 07:57:36 +00:00
Micha Reiser
76c47a9a43
Cheap cloneable LineIndex ( #3896 )
2023-04-11 07:33:40 +00:00
Micha Reiser
9209e57c5a
Extract message emitters from Printer ( #3895 )
2023-04-11 07:24:25 +00:00
Leiser Fernández Gallo
333f1bd9ce
Extend SIM105 to match also 'Ellipsis only' bodies in exception handlers ( #3925 )
2023-04-10 09:55:02 -04:00
Leiser Fernández Gallo
002caadf9e
[flake8-simplify] Add autofix for contextlib.suppress (SIM105) ( #3915 )
2023-04-09 22:45:19 +00:00
Dhruv Manilawala
311ba29d0f
Do not skip analysis if *args present for F523 ( #3923 )
2023-04-09 18:34:52 -04:00
Dhruv Manilawala
237a64d922
Check for arguments in inner/outer call for C414 ( #3916 )
2023-04-09 18:33:11 -04:00
Moritz Sauter
d4af2dd5cf
[ruff] Add checks for mutable defaults in dataclasses ( #3877 )
2023-04-09 02:46:28 +00:00
Charlie Marsh
a36ce585ce
Remove extract_path_names helper ( #3920 )
2023-04-08 11:14:42 -04:00
Charlie Marsh
29ec6df24f
Avoid N802 violations for @override methods ( #3912 )
2023-04-08 03:11:50 +00:00
Evan Rittenhouse
8b17508ef1
Remove old documentation ( #3911 )
2023-04-07 22:51:19 -04:00
Evan Rittenhouse
abaf0a198d
Ensure that tab characters aren't in multi-line strings before throwing a violation ( #3837 )
2023-04-06 22:25:40 -04:00
konstin
454c6d9c2f
Extended ecosystem check with scraped data ( #3858 )
2023-04-06 22:39:48 +00:00
konstin
cae5503e34
[pylint] Fix unicode handling in PLE2515 ( #3898 )
2023-04-06 13:54:52 -04:00
Dhruv Manilawala
34e9786a41
Visit comprehension to detect group name usage/overrides ( #3887 )
2023-04-05 18:03:11 -04:00
Dhruv Manilawala
5467d45dfa
Ignore PLW2901 when using typing cast ( #3891 )
2023-04-05 18:02:32 -04:00
Charlie Marsh
ac87137c1c
Avoid printing docs on cargo dev generate-all ( #3890 )
2023-04-05 14:18:33 -04:00
Charlie Marsh
e0bccfd2d9
Allow legacy C and T selectors in JSON schema ( #3889 )
2023-04-05 17:58:36 +00:00
Tom Kuson
7b6e55a2e0
Add documentation for flake8-type-checking ( #3886 )
2023-04-05 17:30:25 +00:00
brucearctor
5c374b5793
Consistent Style/Levels in Usage ( #3884 )
2023-04-05 03:06:43 +00:00
Edgar R. M
ffdd0de522
Add Meltano to users ( #3883 )
2023-04-04 23:05:53 -04:00
Charlie Marsh
5370968839
Add some additional users and alphabetize ( #3882 )
2023-04-05 02:40:02 +00:00
Charlie Marsh
255b094b33
Bump version to 0.0.261 ( #3881 )
2023-04-04 22:31:01 -04:00
Dhruv Manilawala
b6155232ac
Consider logger candidate from logging module only ( #3878 )
2023-04-04 19:52:57 +00:00
kyoto7250
390d7dcf39
Supports more cases in SIM112 ( #3876 )
2023-04-04 15:49:24 -04:00
Charlie Marsh
251340a246
Add LangChain and LlamaIndex ( #3879 )
2023-04-04 19:36:31 +00:00
Charlie Marsh
d919adc13c
Introduce a ruff_python_semantic crate ( #3865 )
2023-04-04 16:50:47 +00:00
kyoto7250
46bcb1f725
[flake8-simplify] Implement dict-get-with-none-default (SIM910) ( #3874 )
2023-04-04 03:52:10 +00:00
Dhruv Manilawala
2b21effa77
fixup! Support mutually exclusive branches for B031 ( #3844 ) ( #3875 )
2023-04-03 23:34:11 -04:00
Chris Chan
10504eb9ed
Generate ImportMap from module path to imported dependencies ( #3243 )
2023-04-04 03:31:37 +00:00
Dhruv Manilawala
76e111c874
Support mutually exclusive branches for B031 ( #3844 )
2023-04-04 02:33:17 +00:00
brucearctor
e006b922a6
Add documentation for ruff-action (GitHub Action!) ( #3857 )
2023-04-03 23:47:26 +00:00
Charlie Marsh
60f6a8571a
Allow starred arguments in B030 ( #3871 )
2023-04-03 23:20:34 +00:00
Charlie Marsh
f4173b2a93
Move shadow tracking into Scope directly ( #3854 )
2023-04-03 15:33:44 -04:00
Charlie Marsh
449e08ed08
Rename autofix::helpers to autofix::actions ( #3866 )
2023-04-03 13:34:49 -04:00
Charlie Marsh
5625410936
Remove uses_magic_variable_access dependence on Checker ( #3864 )
2023-04-03 12:22:06 -04:00
Charlie Marsh
3744e9ab3f
Remove contains_effect's dependency on Context ( #3855 )
2023-04-03 12:08:13 -04:00
Nicolas Vuillamy
b52cb93e58
Add thank you in README.md + usage in MegaLinter ( #3848 )
2023-04-03 15:45:25 +00:00
Nazia Povey
849091d846
When checking module visibility, don't check entire ancestry ( #3835 )
2023-04-03 11:38:41 -04:00
Ran Benita
d2f2544f6e
flake8-pyi: fix PYI015 false positive on assignment of TypeVar & friends ( #3861 )
2023-04-03 11:28:46 -04:00
Charlie Marsh
25771cd4b9
Use references for Export binding type ( #3853 )
2023-04-03 15:26:42 +00:00
Charlie Marsh
924bebbb4a
Change "indexes" to "indices" in various contexts ( #3856 )
2023-04-02 23:08:03 +00:00
Charlie Marsh
08e5b3fa61
Make collect_call_path return an Option ( #3849 )
2023-04-01 22:29:32 -04:00
Charlie Marsh
d822e08111
Move CallPath into its own module ( #3847 )
2023-04-01 11:25:04 -04:00
Charlie Marsh
2f90157ce2
Move logging resolver into logging.rs ( #3843 )
2023-04-01 03:50:44 +00:00
Charlie Marsh
88308ef9cc
Move Binding structs out of scope.rs ( #3842 )
2023-03-31 23:49:48 -04:00
Charlie Marsh
6d80c79bac
Combine operations.rs and helpers.rs ( #3841 )
2023-04-01 03:40:34 +00:00
Charlie Marsh
2fbc620ad3
Move __all__ utilities to all.rs ( #3840 )
2023-04-01 03:31:15 +00:00
Charlie Marsh
27e40e9b31
Remove helpers.rs dependency on Binding ( #3839 )
2023-04-01 03:19:45 +00:00
Charlie Marsh
b6276e2d95
Move f-string identification into rule module ( #3838 )
2023-03-31 23:10:11 -04:00
Charlie Marsh
66d72b1c7b
Move keyword checks into is_identifier ( #3834 )
2023-03-31 16:56:33 -04:00
Jonathan Plasse
968c7df770
Fix is_module_name() and improve perf of is_identifier() ( #3795 )
2023-03-31 15:15:36 -04:00
Jonathan Plasse
fe38597279
Fix SIM222 and SIM223 false positive ( #3832 )
2023-03-31 14:50:35 -04:00
Jonathan Plasse
f3f9a9f297
Fix pre-commit CI job exit code ( #3833 )
2023-03-31 14:47:04 -04:00
Micha Reiser
48d8680e71
Ambiguous unicode, only test unicode characters ( #3814 )
2023-03-31 18:03:00 +01:00
Charlie Marsh
82584ad101
Extend unncessary-generator-any-all to set comprehensions ( #3824 )
2023-03-31 16:29:25 +00:00
konstin
13e52b1f76
Use cache in cargo udeps CI ( #3809 )
2023-03-31 11:07:14 -04:00
Charlie Marsh
dfc872c9a0
Track star imports on Scope directly ( #3822 )
2023-03-31 15:01:12 +00:00
Charlie Marsh
cf7e1ddd08
Remove some usize references ( #3819 )
2023-03-30 17:35:42 -04:00
Charlie Marsh
9de1f82658
Avoid unnecessary-comprehension-any-all for async generators ( #3823 )
2023-03-30 18:43:59 +00:00
Charlie Marsh
54ad9397e5
Flag non-Name expressions in duplicate-isinstance-call ( #3817 )
2023-03-30 12:19:53 -04:00
Jonathan Plasse
29c8b75fd4
Ignore collapsible-if violations for if False: and if True: ( #3732 )
2023-03-30 15:52:43 +00:00
Charlie Marsh
0b586d5451
Use panic instead of unreachable for invalid arguments ( #3816 )
2023-03-30 15:40:53 +00:00
Charlie Marsh
01357f62e5
Add import insertion support to autofix capabilities ( #3787 )
2023-03-30 15:33:46 +00:00
Micha Reiser
d7113d3995
refactor: StateMachine use match statement ( #3811 )
2023-03-30 15:55:54 +02:00
Madison Swain-Bowden
a142d71e0b
Add Openverse to users of ruff in README ( #3806 )
2023-03-30 09:14:47 -04:00
Charlie Marsh
f79506f5a4
Move some generic structs out of isort ( #3788 )
2023-03-30 08:58:01 -04:00
Dhruv Manilawala
44ae3237b8
Additional simple magic return types ( #3805 )
2023-03-30 08:57:49 -04:00
konstin
f4cda31708
Use crates.io version of pep440_rs ( #3812 )
...
* Use crates.io version of pep440_rs
* Update Cargo.lock
2023-03-30 12:47:07 +00:00
Charlie Marsh
4328448a2f
Use multi-fix semantics for inplace removal ( #3804 )
2023-03-30 00:16:43 +00:00
Charlie Marsh
88298759ce
Misc. follow-up changes to #3802 ( #3803 )
2023-03-29 19:18:36 -04:00
Charlie Marsh
3c0e789b19
Improve robustness of argument removal for encode calls ( #3802 )
2023-03-29 23:07:13 +00:00
Charlie Marsh
8601dcc09b
Add import name resolution to Context ( #3777 )
2023-03-29 21:47:50 +00:00
Charlie Marsh
134fdd1609
Remove star-import handling from sys-exit-alias ( #3776 )
2023-03-29 21:33:50 +00:00
Charlie Marsh
2e6eddc7bd
Improve top-of-file insertions for required imports ( #3779 )
2023-03-29 21:25:39 +00:00
Jonathan Plasse
cb588d1d6d
Allow TID252 to fix all valid module paths ( #3796 )
2023-03-29 15:13:12 -04:00
Charlie Marsh
9d3b8eb67b
Bump version to v0.0.260 ( #3799 )
2023-03-29 14:51:50 -04:00
Charlie Marsh
e1e5532ab1
Add flymake-ruff to docs ( #3800 )
2023-03-29 18:48:59 +00:00
Andy Freeland
7d962bf80c
[flake8-bugbear] Allow pathlib.Path() in B008 ( #3794 )
2023-03-29 15:42:43 +00:00
Micha Reiser
595cd065f3
Reduce explcit clones ( #3793 )
2023-03-29 15:15:14 +02:00
Anže Starič
b6f1fed424
[isort]: support submodules in known_(first|third)_party config options ( #3768 )
2023-03-29 03:53:38 +00:00
Jonathan Plasse
5501fc9572
Exempt return with side effects for TRY300 ( #3780 )
2023-03-28 19:52:05 -04:00
Charlie Marsh
5977862a60
Enumerate all codes in default configuration example ( #3790 )
2023-03-28 23:36:22 +00:00
Leiser Fernández Gallo
224e85c6d7
Implement flake8-gettext ( #3785 )
2023-03-28 23:32:02 +00:00
Charlie Marsh
515e436cfa
Clarify order of pre-commit hooks ( #3789 )
2023-03-28 23:15:36 +00:00
Charlie Marsh
f322bcd2bd
Minor nits on reference names ( #3786 )
2023-03-28 22:18:19 +00:00
Charlie Marsh
22d5b0071d
Rename end_of_statement to end_of_last_statement ( #3775 )
2023-03-28 12:31:06 -04:00
Charlie Marsh
990b378c4d
Set parents even in same-line cases ( #3773 )
2023-03-28 12:09:30 -04:00
Charlie Marsh
e88fbae926
Use import alias locations for pep8-naming import rules ( #3772 )
2023-03-28 11:41:23 -04:00
Charlie Marsh
81de3a16bc
Include with statements in complexity calculation ( #3771 )
2023-03-28 15:20:22 +00:00
Andy Freeland
bfecf684ce
[flake8-bugbear] Add more immutable functions for B008 ( #3764 )
2023-03-28 10:50:05 -04:00
konstin
756e9956a2
Fix cargo test --doc ( #3766 )
2023-03-28 11:36:07 +00:00
Micha Reiser
f68c26a506
perf(pycodestyle): Initialize Stylist from tokens ( #3757 )
2023-03-28 11:53:35 +02:00
Micha Reiser
000394f428
perf(pycodestyle): Introduce TokenKind ( #3745 )
2023-03-28 11:22:39 +02:00
Micha Reiser
2fdf98ef4e
perf(pycodestyle): Refactor checks to iterate over tokens insteadof text ( #3736 )
2023-03-28 10:37:13 +02:00
Micha Reiser
1d724b1495
perf(pycodestyle): Remove regex captures ( #3735 )
2023-03-28 09:50:34 +02:00
Micha Reiser
113a8b8fda
perf(pycodestyle): Reduce allocations when computing logical lines ( #3715 )
2023-03-28 09:09:27 +02:00
Charlie Marsh
c3917eab38
Revert "Implement flake8-i18n ( #3741 )" ( #3765 )
2023-03-27 21:14:38 +00:00
JBLDSKY
0eb5a22dd1
[flake8-pyi] Implement PYI012 ( #3743 )
2023-03-27 18:27:24 +00:00
Charlie Marsh
450c6780ff
Avoid useless-import alias (C0414) in .pyi files ( #3761 )
2023-03-27 18:27:03 +00:00
Leiser Fernández Gallo
5cb120327c
Implement flake8-i18n ( #3741 )
2023-03-27 18:03:39 +00:00
trag1c
8dbffb576d
Removed unnecessary pipe escape ( #3760 )
2023-03-27 13:49:47 -04:00
Charlie Marsh
31fff4b10e
Disallow some restriction lints ( #3754 )
2023-03-26 23:20:20 +00:00
Jonathan Plasse
2326335f5c
Improve performance of statistics ( #3751 )
2023-03-26 18:46:44 -04:00
Charlie Marsh
6ed6da3e82
Move fix::FixMode to flags::FixMode ( #3753 )
2023-03-26 21:40:06 +00:00
Jonathan Plasse
cd75b57036
Sort statistics by count ( #3748 )
2023-03-26 16:45:35 -04:00
Charlie Marsh
e603382cf0
Allow diagnostics to generate multi-edit fixes ( #3709 )
2023-03-26 16:45:19 -04:00
Charlie Marsh
32be63fd1e
Avoid overlong-line errors for lines that end with URLs ( #3663 )
2023-03-26 18:17:35 +00:00
Jonathan Plasse
d594179275
Fix SIM222 and SIM223 false negatives ( #3740 )
2023-03-26 18:09:11 +00:00
Agriya Khetarpal
c0befb4670
Use wild::args() and add wild as a dependency ( #3739 )
2023-03-26 14:32:45 +00:00
Charlie Marsh
a66481ed28
Rename setter methods on Diagnostic ( #3738 )
2023-03-26 10:28:30 -04:00
Charlie Marsh
5c7898124f
Traverse over nested string type annotations ( #3724 )
2023-03-25 21:56:09 -04:00
Jonathan Plasse
50a7916e84
[pydocstyle] Implement autofix for D403 ( #3731 )
2023-03-25 19:21:45 +00:00
Charlie Marsh
6a40a5c5a2
Add a note on src ( #3733 )
2023-03-25 16:18:34 +00:00
Jonathan Plasse
fec4fa39a7
Improve add_rule.py and add_plugin.py scripts ( #3725 )
2023-03-25 16:05:39 +00:00
Dhruv Manilawala
2659336ed1
Add support for .log(level, msg) calls in flake8-logging-format ( #3726 )
2023-03-25 15:55:53 +00:00
Jonathan Plasse
8ac7584756
[flake8-pyi] Implement PYI015 ( #3728 )
2023-03-25 15:48:11 +00:00
Jonathan Plasse
4a1740a4c4
[flake8-pyi] Add autofix for PYI014 ( #3729 )
2023-03-25 15:41:11 +00:00
Charlie Marsh
2083134a96
Rename Fix to Edit ( #3702 )
2023-03-24 19:29:14 -04:00
Charlie Marsh
c721eedc37
Remove 'b lifetime from Checker ( #3723 )
2023-03-24 21:42:18 +00:00
Dhruv Manilawala
c1d89d8c93
[flake8-bugbear]: Implement rule B031 ( #3680 )
2023-03-24 17:26:11 -04:00
Jonathan Plasse
b8ae1e0e05
Add pre-commit in CI ( #3707 )
2023-03-24 17:20:13 -04:00
Dhruv Manilawala
63adf9f5e8
Allow aliased logging module as a logger candidate ( #3718 )
2023-03-24 17:19:09 -04:00
Micha Reiser
7af83460ce
Use unicode-width to determine line-length instead of character count ( #3714 )
2023-03-24 17:17:05 -04:00
Jonathan Plasse
dc4d7619ee
Add Diagnostic.try_amend() to simplify error handling ( #3701 )
2023-03-24 17:10:11 -04:00
Jonathan Plasse
1bac206995
Revert "Replace logical_lines feature with debug_assertions ( #3648 )" ( #3708 )
2023-03-23 23:42:56 -04:00
Jonathan Plasse
efc6e8cb39
Exempt PLR1711 and RET501 if non-None annotation ( #3705 )
2023-03-24 03:11:58 +00:00
Jonathan Plasse
7f3b748401
Fix Ruff pre-commit hook errors ( #3706 )
2023-03-23 22:52:24 -04:00
Jonathan Plasse
7da06b9741
Allow simple container literals as default values ( #3703 )
2023-03-23 22:51:36 -04:00
Charlie Marsh
0f95056f13
Avoid panics for implicitly concatenated forward references ( #3700 )
2023-03-23 19:13:50 -04:00
Charlie Marsh
028329854b
Avoid parsing f-strings in type annotations ( #3699 )
2023-03-23 18:51:44 -04:00
Charlie Marsh
ba43d6bd0b
Avoid parsing ForwardRef contents as type references ( #3698 )
2023-03-23 18:44:02 -04:00
Charlie Marsh
e8d17d23cb
Expand the scope of useless-expression (B018) ( #3455 )
2023-03-23 18:33:58 -04:00
Jonathan Plasse
aea925a898
Fix SIM118 auto-fix ( #3695 )
2023-03-23 17:14:56 -04:00
Charlie Marsh
f58345dee3
Bump version to v0.0.259 ( #3691 )
2023-03-23 14:52:42 -04:00
Charlie Marsh
71c0da27bb
Avoid nested loops in missing_whitespace ( #3688 )
2023-03-23 14:18:59 -04:00
Charlie Marsh
8a2d1a3029
Respect all rule-exemption sources when suppressing parser errors ( #3665 )
2023-03-23 13:36:48 -04:00
Micha Reiser
6161e56ea4
Fix RuleSet.remove ( #3685 )
2023-03-23 17:01:37 +00:00
Charlie Marsh
189c9d4683
Add dedicated structs for BindingKind variants ( #3672 )
2023-03-22 19:08:48 -04:00
Charlie Marsh
615887a7fe
Bump version to v0.0.258 ( #3671 )
2023-03-22 15:02:57 -04:00
Charlie Marsh
07808a58f2
Refactor out common exemption-parsing logic ( #3670 )
2023-03-22 15:02:07 -04:00
Ran Benita
fe568c08d2
isort: fix bad interaction between force-sort-within-sections and force-to-top ( #3645 )
2023-03-22 14:00:00 -04:00
Charlie Marsh
7741d43ae5
Allow pairwise diagnostics for zip(..., strict=True) ( #3669 )
2023-03-22 13:03:43 -04:00
Charlie Marsh
1b3e54231c
Flag, but don't fix, unused imports in ModuleNotFoundError blocks ( #3658 )
2023-03-22 13:03:30 -04:00
Charlie Marsh
3a8e98341b
Enable autofix for annotations within 'simple' string literals ( #3657 )
2023-03-22 12:45:51 -04:00
kyoto7250
8593739f88
Check indentation level when executing E231 ( #3668 )
2023-03-22 12:32:00 -04:00
Charlie Marsh
242dd3dae1
Rename remaining use-* rules ( #3661 )
2023-03-22 11:36:01 -04:00
Charlie Marsh
875f61cb62
Rename pathlib rules to match updated naming convention ( #3660 )
2023-03-22 11:35:45 -04:00
Jonathan Plasse
3ec1ea8ac2
Add cargo-udeps in CI ( #3646 )
2023-03-22 15:53:12 +01:00
Charlie Marsh
1e45b13958
Remove linked issue from flake8-django ( #3664 )
2023-03-22 03:26:22 +00:00
Dhruv Manilawala
9e61956711
[flake8-django]: Implement rule DJ012 ( #3659 )
2023-03-22 03:07:58 +00:00
Jonathan Plasse
5eae3fbbfb
Avoid RUF007 fixes for more than two arguments ( #3654 )
2023-03-21 22:17:31 +00:00
Colin Delahunty
41e38ffa98
[flake8-bandit]: Implement deny-list rules for suspicious member calls ( #3239 )
2023-03-21 15:11:52 -04:00
Charlie Marsh
27903cdb11
Replace logical_lines feature with debug_assertions ( #3648 )
2023-03-21 12:16:41 -04:00
Charlie Marsh
3b1709ba1e
Avoid attempting infinite open fix with re-bound builtin ( #3650 )
2023-03-21 15:32:31 +00:00
Dhruv Manilawala
33394e4a69
docs: all flake8-comprehension rules ( #3631 )
2023-03-21 14:28:19 +00:00
Charlie Marsh
7b9bdc494a
Consider same-site fixes to be overlapping ( #3638 )
2023-03-21 10:09:47 -04:00
James Greenhill
b06ca25421
Add PostHog to users of Ruff in README ( #3641 )
2023-03-21 10:05:35 -04:00
Jonathan Plasse
c42f8b93d2
Add Swatinem/rust-cache to benchmark-compare job ( #3637 )
2023-03-21 14:45:09 +01:00
Micha Reiser
f59a22b6e5
Remove unused dependencies ( #3644 )
2023-03-21 11:02:41 +01:00
Jonathan Plasse
b5edc6dfc9
Add autofix functionality for F523 ( #3613 )
2023-03-21 03:55:23 +00:00
Charlie Marsh
626169e2ef
Avoid raising PEP 604 errors with forward-referenced members ( #3640 )
2023-03-20 23:49:41 -04:00
Charlie Marsh
e9f359ac5e
Convert single-argument %-style format calls ( #3600 )
2023-03-21 03:35:10 +00:00
Jacob Latonis
318c2c80e2
pylint: Implement binary-op-exception (PLW0711) (#3639 )
2023-03-21 03:33:40 +00:00
Jonathan Plasse
92aa3a8178
Use language: system for Rust hooks ( #3616 )
2023-03-20 22:44:21 -04:00
Jonathan Plasse
22a4ab51f9
Handle UP032 autofix with adjacent keywords ( #3636 )
2023-03-21 00:17:45 +00:00
Jonathan Plasse
f70a49ed8b
Add autofix for magic methods (ANN204) ( #3633 )
2023-03-20 19:19:20 -04:00
Charlie Marsh
f039bf36a2
Avoid trimming escaped whitespace in D210 ( #3635 )
2023-03-20 17:17:42 -04:00
Jonathan Plasse
169dd72328
Fix TRY300 false positive ( #3634 )
2023-03-20 20:55:28 +00:00
Jonathan Plasse
fd39ec4bdd
Merge Availability and AutofixKind ( #3629 )
2023-03-20 16:45:33 +00:00
Charlie Marsh
7c0f17279c
Flag PEP 585 and PEP 604 violations in quoted annotations ( #3593 )
2023-03-20 11:15:44 -04:00
konstin
81d0884974
Add basic jupyter notebook support ( #3440 )
...
* Add basic jupyter notebook support behind a feature flag
* Address review comments
* Rename in separate commit to make both git and clippy happy
* cfg(feature = "jupyter_notebook") another test
* Address more review comments
* Address more review comments
* and clippy and windows
* More review comment
2023-03-20 12:06:01 +01:00
Jacob Latonis
a45753f462
[pylint]: Implement assert-on-string-literal (W0129) ( #3610 )
2023-03-19 23:45:51 -04:00
Zhengbo Wang
b08326162b
Doc/CLN: pass pre-commit ( #3604 )
2023-03-19 19:20:11 +00:00
Dhruv Manilawala
3a65af4dae
feat: update C416 with dict comprehension (autofixable) ( #3605 )
2023-03-19 18:37:28 +00:00
Ville Lindholm
474aa0b196
Fix infinite loop due to rules D207 & W605 ( #3609 )
2023-03-19 18:29:13 +00:00
Charlie Marsh
4892167217
Avoid panics for implicitly-concatenated docstrings ( #3584 )
...
## Summary
In the rare event that a docstring contains an implicit string concatenation, we currently have the potential to panic, because we assume that if a string starts with triple quotes, it _ends_ with triple quotes. But with implicit concatenation, that's not the case: a single `Expr` could start and end with different quote styles, because it can contain multiple string tokens.
Supporting these "properly" is pretty hard. In some cases it's hard to even know what the "right" behavior is. So for now, I'm just detecting and warning, which is better than a panic.
Closes #3543 .
Closes #3585 .
2023-03-19 14:16:50 -04:00
Micha Reiser
a5494b8541
Bitflag based RuleSet ( #3606 )
2023-03-19 17:09:06 +01:00
Micha Reiser
9ac9a1c69e
Gracefully handle lint panics ( #3509 )
2023-03-19 17:08:38 +01:00
Rogdham
f06dff8af8
Change broken links in README to beta.ruff.rs ( #3607 )
2023-03-19 15:17:44 +00:00
Charlie Marsh
fe7443ce2f
Use any_enabled in AST checker ( #3601 )
2023-03-19 10:44:33 -04:00
Henry Schreiner
4bdb2dd362
ci(check_ecosystem): add PyPa/build ( #3569 )
2023-03-18 19:09:22 -04:00
Henry Schreiner
53a4743631
ci: fix check_ecosystem ( #3602 )
2023-03-18 19:03:08 -04:00
Charlie Marsh
4ffcd8366a
Rename a variety of rules to match updated conventions ( #3283 )
2023-03-18 17:35:59 -04:00
Charlie Marsh
dfb772c6f1
Avoid removing comment hash for noqa's with trailing content ( #3589 )
2023-03-18 18:48:52 +00:00
Jonathan Plasse
c21eb06922
Fix D417 false positive ( #3596 )
2023-03-18 13:14:03 -04:00
Charlie Marsh
16a350c731
Reduce usage of ALL in ecosystem CI ( #3590 )
2023-03-18 13:13:09 -04:00
Charlie Marsh
fa04861724
Check exclusions prior to resolving pyproject.toml files ( #3588 )
2023-03-18 13:12:49 -04:00
Micha Reiser
404504ab41
CI Checks: Fix malformed markdown ( #3595 )
...
The Benchmark results aren't formatted properly if the ecosystem check finds differences because the ecosystem check doesn't emit a trailing newline.
This PR adds the trailing newline to the ecosystem check script.
2023-03-18 10:04:50 +00:00
Charlie Marsh
621e4353e3
Re-add the list of supported plugins to the README ( #3592 )
2023-03-17 23:33:37 -04:00
Charlie Marsh
0c4926ff7b
Bump version to v0.0.257 ( #3591 )
2023-03-17 22:34:10 -04:00
tomecki
61653b9f27
[pylint] Implement useless-return (R1711) ( #3116 )
2023-03-17 18:30:32 -04:00
Charlie Marsh
8dd3959e74
Update output in resources/test/project/README.md ( #3587 )
2023-03-17 21:51:03 +00:00
Charlie Marsh
50f9db21da
Enable ANSI colors on Windows 10 ( #3583 )
2023-03-17 17:34:39 -04:00
Tomer Chachamu
1dd3cbd047
[pylint] invalid-characters-* ( #3552 )
2023-03-17 19:30:41 +00:00
Johan
bd935cbd49
[flake8-bugbear] Add no-explicit-stacklevel (B028) ( #3550 )
2023-03-17 19:20:08 +00:00
Charlie Marsh
babd0a05ac
Avoid adding dashed line outside of docstring ( #3581 )
2023-03-17 14:40:32 -04:00
Micha Reiser
87fab4a2e1
Benchmark all rules ( #3570 )
2023-03-17 19:29:39 +01:00
Charlie Marsh
2e21920adf
Respect type overrides in E721 ( #3582 )
2023-03-17 14:29:05 -04:00
Micha Reiser
dedf4cbdeb
refactor: Move scope and binding types to scope.rs ( #3573 )
2023-03-17 17:31:33 +01:00
Micha Reiser
92179e6369
Scope and Binding IDs ( #3572 )
2023-03-17 17:12:27 +01:00
Evan Rittenhouse
33d2457909
Prefer itertools.pairwise() over zip() for successive pairs (RUF007) ( #3501 )
2023-03-16 23:50:45 -04:00
Charlie Marsh
373a77e8c2
Avoid C1901 violations within subscripts ( #3517 )
2023-03-17 02:52:05 +00:00
Jacob Latonis
73df267635
[pylint]: Implement continue-in-finally (E0116) ( #3541 )
2023-03-17 02:47:49 +00:00
Jonathan Plasse
f5e5caaa25
Fix autofix conflict between D209 and D400 ( #3564 )
2023-03-17 02:36:25 +00:00
Henry Schreiner
d9ed0aae69
ci(check_ecosystem): add cibuildwheel ( #3567 )
2023-03-16 22:34:56 -04:00
Charlie Marsh
e0df62b841
Rewrite mock import with starred imports ( #3566 )
2023-03-16 20:54:29 -04:00
Henry Schreiner
bbc87b7177
ci(check_ecosystem): add scikit-build-core ( #3563 )
2023-03-16 19:46:42 -04:00
Charlie Marsh
667130a4c3
Add some additional users to the users list ( #3565 )
2023-03-16 23:32:17 +00:00
Nyakku Shigure
72febf98b7
add PaddlePaddle to Who's Using Ruff? ( #3562 )
2023-03-16 14:20:11 -04:00
Xuehai Pan
e99e1fae2b
ci: add python/typeshed to ecosystem check ( #3559 )
2023-03-16 14:19:48 -04:00
Micha Reiser
eff84442bc
refactor: Add Copy implementation to Rule ( #3556 )
2023-03-16 17:50:18 +01:00
Micha Reiser
aa51ecedc5
ci: Benchmark CI Step ( #3480 )
2023-03-16 09:05:10 +01:00
Edgar R. M
9ae9cc9d2f
Use value > max style in pylint and mccabe messages ( #3553 )
2023-03-16 01:37:25 -04:00
Micha Reiser
de1106b95a
Allow dispatching the PR comment job for testing ( #3535 )
2023-03-15 09:34:53 +01:00
Charlie Marsh
e636c5fcf0
Avoid unused argument violations in .pyi files ( #3533 )
2023-03-15 03:17:19 +00:00
Charlie Marsh
12dfd57211
Bump version to v0.0.256 ( #3531 )
2023-03-14 22:52:21 -04:00
Charlie Marsh
d188d242a0
Avoid tracking as-imports separately with force-single-line ( #3530 )
2023-03-15 02:26:01 +00:00
Charlie Marsh
57796c5e59
Add last remaining deprecated typing imports ( #3529 )
2023-03-15 00:08:09 +00:00
Charlie Marsh
2545869797
Avoid PEP 604 isinstance errors for starred tuples ( #3527 )
2023-03-14 22:08:43 +00:00
Charlie Marsh
58353a4bf4
Avoid PEP 604 panic with empty tuple ( #3526 )
2023-03-14 22:02:15 +00:00
Charlie Marsh
a36139ae21
Replicate inline comments when splitting single-line imports ( #3521 )
2023-03-14 14:48:12 -04:00
Jonathan Plasse
7e904111b1
Fix PYI011 and add auto-fix ( #3492 )
2023-03-14 14:43:09 -04:00
Charlie Marsh
344daebb1b
Refine complexity rules for try-except-else-finally ( #3519 )
2023-03-14 14:40:33 -04:00
Charlie Marsh
432059de35
Allow # ruff: prefix for isort action comments ( #3493 )
2023-03-14 14:34:28 -04:00
Charlie Marsh
c50d6da8b4
Allow string percent formatting in os.getenv ( #3518 )
2023-03-14 14:27:21 -04:00
Charlie Marsh
1b738f88c4
Allow f-strings and concatenations in os.getenv ( #3516 )
2023-03-14 17:46:34 +00:00
Charlie Marsh
1eff3dffa5
Ensure that redirect warnings appear exactly once per code ( #3500 )
2023-03-14 15:22:14 +00:00
Xuehai Pan
8c7317eb8d
ci: fix missing short tag for cloudflare/wrangler-action ( #3513 )
2023-03-14 15:16:09 +00:00
Charlie Marsh
106a93eab0
Make Clap an optional feature for ruff crate ( #3498 )
2023-03-14 11:02:05 -04:00
Xuehai Pan
78c2b0ac47
ci: add dependabot integration for GitHub Actions ( #3504 )
2023-03-14 10:31:26 -04:00
Micha Reiser
d5700d7c69
Add Micro Benchmark ( #3466 )
2023-03-14 08:35:07 +01:00
Samuel Cormier-Iijima
3a7bdb39c9
Fix base ref determination for artifact download in ecosystem CI check ( #3499 )
2023-03-13 22:37:12 -04:00
Grzegorz Bokota
a82fe4a139
Fix lack of not in PLC1901 error message ( #3497 )
2023-03-13 19:19:41 -04:00
Charlie Marsh
62ff3b62e3
Add requires-python inference to docs ( #3495 )
2023-03-13 18:14:39 -04:00
Charlie Marsh
1e5db58b7b
Include individual path checks in --verbose logging ( #3489 )
2023-03-13 17:13:47 -04:00
Charlie Marsh
a6e998d639
Remove Wasm-specific Rayon workarounds ( #3490 )
2023-03-13 16:48:43 -04:00
Charlie Marsh
a8c1915e2e
Remove erroneous C4-to-C40 redirect ( #3488 )
2023-03-13 19:52:05 +00:00
Xuehai Pan
c515a1b31a
PYI011: allow math constants in defaults ( #3484 )
2023-03-13 14:23:00 -04:00
Charlie Marsh
aa97a092bd
Bump version to v0.0.255 ( #3485 )
2023-03-13 14:06:51 -04:00
Micha Reiser
685c242761
refactor(ruff_python_ast): Split get_argument ( #3478 )
2023-03-13 18:18:25 +01:00
Jonathan Plasse
b540407b74
Infer target-version from project metadata ( #3470 )
...
* Infer target-version from project metadata
* Fix requires-python with ">=3.8.16"
* Load requires-python at runtime
* Use upstream VersionSpecifiers
* Add debug information when parsing ruff.toml
* Display debug only if target_version is not set
* Bump pep440-rs to add impl Error for Pep440Error
2023-03-13 18:16:01 +01:00
Charlie Marsh
3a5fbd6d74
Upgrade RustPython to fix Serde dependency ( #3481 )
2023-03-13 12:29:31 -04:00
Charlie Marsh
227679b5cb
Re-enable the T and C linter prefix selectors ( #3452 )
2023-03-13 08:20:30 -04:00
Charlie Marsh
c2750a59ab
Implement an iterator for universal newlines ( #3454 )
...
# Summary
We need to support CR line endings (as opposed to LF and CRLF line endings, which are already supported). They're rare, but they do appear in Python code, and we tend to panic on any file that uses them.
Our `Locator` abstraction now supports CR line endings. However, Rust's `str#lines` implementation does _not_.
This PR adds a `UniversalNewlineIterator` implementation that respects all of CR, LF, and CRLF line endings, and plugs it into most of the `.lines()` call sites.
As an alternative design, it could be nice if we could leverage `Locator` for this. We've already computed all of the line endings, so we could probably iterate much more efficiently?
# Test Plan
Largely relying on automated testing, however, also ran over some known failure cases, like #3404 .
2023-03-13 00:01:29 -04:00
Charlie Marsh
2a4d6ab3b2
Remove unnecessary Path::new from fs calls ( #3476 )
2023-03-12 23:18:23 -04:00
Charlie Marsh
7a80bcec58
Output GitLab paths relative to CI_PROJECT_DIR ( #3475 )
2023-03-13 03:03:37 +00:00
Y.D.X
297749a3a8
[doc] Update FAQ on Flake8 for structural pattern matching ( #3473 )
2023-03-13 02:27:22 +00:00
Charlie Marsh
8955e32b5c
Respect ignores for runtime-import-in-type-checking-block (TCH004) ( #3474 )
2023-03-13 02:23:26 +00:00
Charlie Marsh
cd192eddf9
Add some new users to the README ( #3471 )
2023-03-13 00:08:58 +00:00
Jacob Latonis
675227db5c
pylint: E1507 invalid-envvar-value ( #3467 )
2023-03-12 21:43:06 +00:00
Charlie Marsh
a65c6806a6
Avoid respecting noqa directives when RUF100 is enabled ( #3469 )
2023-03-12 14:37:35 -04:00
Calum Young
6c576872d4
List changes for all ecosystem repos ( #3461 )
2023-03-12 14:30:38 -04:00
Xuehai Pan
9858df1ac9
[FIX] PYI011: recognize Bool / Float / Complex numbers as simple defaults ( #3459 )
2023-03-12 17:34:09 +00:00
Charlie Marsh
7fb7268e8a
Use a hash to fingerprint GitLab CI output ( #3456 )
2023-03-12 00:22:39 -05:00
Jacob Latonis
0f78f27713
pylint: W1508 invalid-envvar-default ( #3449 )
2023-03-11 16:44:42 -05:00
Charlie Marsh
12a6fc7041
Avoid removing un-aliased exceptions in OSError-aliased handlers ( #3451 )
2023-03-11 15:24:11 -05:00
Micha Reiser
d2988043af
perf: Optimize UTF8/ASCII byte offset index ( #3439 )
2023-03-11 13:12:10 +01:00
Micha Reiser
cc8b13d3a7
refactor: Replace Vec in options metadata with static array ( #3433 )
2023-03-11 09:03:56 +00:00
Charlie Marsh
1e081cf9a6
Flag deprecated (but renamed) imports in UP035 ( #3448 )
2023-03-11 01:06:32 -05:00
Charlie Marsh
841bcf1cdd
Remove unnecessary Serde derives ( #3447 )
2023-03-11 00:16:51 -05:00
Charlie Marsh
7062d1db16
Run ecosystem CI checks without --isolated ( #3445 )
2023-03-10 19:03:51 -05:00
Jonathan Plasse
8b561313aa
Remove empty line after RUF100 auto-fix ( #3414 )
2023-03-10 22:57:13 +00:00
Samuel Cormier-Iijima
cfa2924664
Setup ecosystem CI ( #3390 )
...
This PR sets up an "ecosystem" check as an optional part of the CI step for pull requests. The primary piece of this is a new script in `scripts/check_ecosystem.py` which takes two ruff binaries as input and compares their outputs against a corpus of open-source code in parallel. I used ruff's `text` reporting format and stdlib's `difflib` (rather than JSON output and jsondiffs) to avoid adding another dependency. There is a new ecosystem-comment workflow to add a comment to the PR (see [this link](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ ) which explains why it needs to be done as a new workflow for security reasons).
2023-03-10 17:39:07 -05:00
Florian Best
a3aeec6377
docs(pycodestyle): document rules ( #3407 )
2023-03-10 22:36:38 +00:00
Micha Reiser
b983d5eb3f
fix: method red not found in release builds ( #3434 )
2023-03-10 10:17:35 +01:00
kyoto7250
bb3bb24b59
Autofix PIE810 rule violations ( #3411 )
2023-03-10 05:17:22 +00:00
Charlie Marsh
872829ca72
When "Args" and "Parameters" are present, prefer NumPy style ( #3430 )
2023-03-10 02:58:05 +00:00
Charlie Marsh
2383228709
Respect --show-fixes with --fix-only ( #3426 )
2023-03-09 21:37:39 +00:00
Aryaman Marathe
952307d39d
[pylint] C1901: compare-to-empty-string ( #3405 )
2023-03-09 21:33:34 +00:00
Charlie Marsh
024caca233
Introduce a ruff_diagnostics crate ( #3409 )
...
## Summary
This PR moves `Diagnostic`, `DiagnosticKind`, and `Fix` into their own crate, which will enable us to further split up Ruff, since sub-linter crates (which need to implement functions that return `Diagnostic`) can now depend on `ruff_diagnostics` rather than Ruff.
2023-03-09 20:48:57 +00:00
DanCardin
08ec11a31e
fix: Emit a more useful error if an extend points at a non-existent ruff.toml file. ( #3417 )
2023-03-09 19:55:09 +00:00
Micha Reiser
bd05a8a74d
fix: WASM tests ( #3415 )
2023-03-09 11:27:59 +01:00
Micha Reiser
229f1c34cb
refactor: Extract ruff_wasm ( #3401 )
2023-03-09 10:07:39 +00:00
Charlie Marsh
a7f3532395
Ignore multiply-assigned variables in RET504 ( #3393 )
2023-03-08 19:11:55 -05:00
Aaron Cunningham
3349ceb969
[flake8-bugbear] Add flake8-bugbear's B030 rule ( #3400 )
2023-03-08 20:41:29 +00:00
Charlie Marsh
da1f83fe32
Remove core module from ruff_python_formatter ( #3373 )
2023-03-08 19:11:39 +00:00
Charlie Marsh
0a9d259f9c
Remove copied core modules from ruff_python_formatter ( #3371 )
2023-03-08 19:03:40 +00:00
Charlie Marsh
130e733023
Implement From<Located> for Range ( #3377 )
2023-03-08 18:50:20 +00:00
Charlie Marsh
ff2c0dd491
Use shared leading_quote implementation in ruff_python_formatter ( #3396 )
2023-03-08 18:21:59 +00:00
Charlie Marsh
dfe1cad928
Rename DiagnosticKind#commit to DiagnosticKind#suggestion ( #3397 )
2023-03-08 18:06:19 +00:00
Charlie Marsh
ffad0bcdaa
Decouple Diagnostic from "all violations" enumeration ( #3352 )
2023-03-08 17:51:37 +00:00
Jonathan Plasse
bc869d4f52
Fix PIE802 broken auto-fix with trailing comma ( #3402 )
2023-03-08 12:49:01 -05:00
Micha Reiser
a3de791f0a
Make ruff_cli binary a small wrapper around lib ( #3398 )
2023-03-08 12:11:55 +01:00
Charlie Marsh
d9dfec30eb
Catch RET504 usages via decorators ( #3395 )
2023-03-08 00:38:01 +00:00
Charlie Marsh
3f04def3a5
Remap ChainMap, Counter, and OrderedDict imports to collections ( #3392 )
2023-03-07 23:53:35 +00:00
Charlie Marsh
98177754de
Handle multi-line fixes for byte-string prefixing ( #3391 )
2023-03-07 23:33:47 +00:00
Tom Forbes
8d5374762c
Relax minimum rust version to allow for point releases ( #3389 )
2023-03-07 13:52:25 -05:00
Charlie Marsh
bad6bdda1f
Create a rust_python_ast crate ( #3370 )
...
This PR productionizes @MichaReiser's suggestion in https://github.com/charliermarsh/ruff/issues/1820#issuecomment-1440204423 , by creating a separate crate for the `ast` module (`rust_python_ast`). This will enable us to further split up the `ruff` crate, as we'll be able to create (e.g.) separate sub-linter crates that have access to these common AST utilities.
This was mostly a straightforward copy (with adjustments to module imports), as the few dependencies that _did_ require modifications were handled in #3366 , #3367 , and #3368 .
2023-03-07 15:18:40 +00:00
Charlie Marsh
a5d302fcbf
Pass Range struct by value ( #3376 )
2023-03-07 09:53:31 -05:00
Charlie Marsh
bced58ce40
Rename runtime-evaluated-baseclasses to runtime-evaluated-base-classes ( #3379 )
2023-03-07 09:51:12 -05:00
Aaron Cunningham
10e252e2fb
Updated forced-separate type from Rust to abstract ( #3380 )
2023-03-07 09:35:39 -05:00
Sasan Jacob Rasti
4dead7541f
Implement configuration options runtime-evaluated-decorators and runtime-evaluated-baseclasses for flake8-type-checking ( #3292 )
2023-03-06 23:34:19 -05:00
Charlie Marsh
fea1af5a63
Include entire prefix when reporting rule selector errors ( #3375 )
2023-03-07 00:04:52 +00:00
Charlie Marsh
c0ad875339
Remove unnecessary quote-stripping method ( #3372 )
2023-03-06 18:28:20 -05:00
Charlie Marsh
8437399496
Remove AST checker's dependency on resolver ( #3368 )
2023-03-06 21:45:09 +00:00
StefanBRas
074f5634a5
Remove duplicate info in azure format ( #3369 )
2023-03-06 16:40:03 -05:00
Charlie Marsh
694d41897a
Move visibility module into ast crate ( #3367 )
2023-03-06 20:14:47 +00:00
Charlie Marsh
e1ebd9130d
Don't enforce typing-import rules in .pyi files ( #3362 )
2023-03-06 15:03:34 -05:00
Charlie Marsh
fc8ca6edd2
Remove source_code's dependency on pydocstyle ( #3366 )
2023-03-06 15:01:01 -05:00
konstin
709dba2e71
Remove old define_violation! (in favor of #[violation]) ( #3310 )
2023-03-06 17:00:29 +00:00
Charlie Marsh
d1c48016eb
Rename ruff_python crate to ruff_python_stdlib ( #3354 )
...
In hindsight, `ruff_python` is too general. A good giveaway is that it's actually a prefix of some other crates. The intent of this crate is to reimplement pieces of the Python standard library and CPython itself, so `ruff_python_stdlib` feels appropriate.
2023-03-06 13:43:22 +00:00
konstin
348a38d261
Deprecate define violation ( #3358 )
...
* Add `#[violation]` proc macro as a replacement for `define_violation!`
* Switch all rules to #[violation]
2023-03-06 10:59:06 +00:00
konstin
22e6778e17
Add cargo dev generate-all --check and catch outdated docs in cargo test ( #3320 )
2023-03-06 11:28:38 +01:00
StefanBRas
30c71dc59a
Add Azure Devops as a -format option. ( #3335 )
2023-03-06 02:48:39 +00:00
Charlie Marsh
5d8591fec4
Skip byte-order-mark at start of file ( #3343 )
2023-03-05 21:37:14 -05:00
Carlos Gonçalves
673aa6e90f
feat(e231): add rule + autofix ( #3344 )
2023-03-05 20:09:35 +00:00
Charlie Marsh
51fe9f7d4b
Treat unary operations on constants as constant-like ( #3348 )
2023-03-04 16:30:33 -05:00
Charlie Marsh
d7767b2bad
Use u8 to represent ambiguous representants ( #3345 )
2023-03-04 16:01:05 -05:00
Charlie Marsh
40d3b40c14
Move binding and scope tracking into a separate ast::Context struct ( #3298 )
2023-03-04 14:01:20 -05:00
Charlie Marsh
376ef929b1
Upgrade RustPython ( #3341 )
2023-03-04 14:01:03 -05:00
Jonathan Plasse
8828e12283
Bump dependencies and move more shared dependencies into workspace ( #3340 )
2023-03-04 12:36:26 -05:00
Charlie Marsh
f13633cc9f
Avoid panicking in invalid_escape_sequence ( #3338 )
2023-03-04 12:14:33 -05:00
Evan Rittenhouse
889c05c87e
Explicitly put Path(...) in Pathlib violations ( #3333 )
2023-03-04 04:33:12 +00:00
Charlie Marsh
bbbc44336e
Bump version to 0.0.254 ( #3331 )
2023-03-03 19:11:07 -05:00
Charlie Marsh
d216b2aaa8
Treat callables within type definitions as default-non-types ( #3329 )
2023-03-03 23:07:30 +00:00
Charlie Marsh
367cc43c42
Un-gate PEP 604 isinstance rewrites from keep_runtime_typing checks ( #3328 )
2023-03-03 17:29:41 -05:00
Charlie Marsh
b5b26d5a3e
Gate PEP604 isinstance rewrites behind Python 3.10+ ( #3327 )
2023-03-03 22:22:14 +00:00
Charlie Marsh
dedf8aa5cc
Use presence of convention-specific sections during docstring inference ( #3325 )
2023-03-03 17:13:11 -05:00
Charlie Marsh
eb42ce9319
Extend RET503 autofixes to "end of statement", including comments ( #3324 )
2023-03-03 19:15:55 +00:00
Micha Reiser
cdbe2ee496
refactor: Introduce CacheKey trait ( #3323 )
...
This PR introduces a new `CacheKey` trait for types that can be used as a cache key.
I'm not entirely sure if this is worth the "overhead", but I was surprised to find `HashableHashSet` and got scared when I looked at the time complexity of the `hash` function. These implementations must be extremely slow in hashed collections.
I then searched for usages and quickly realized that only the cache uses these `Hash` implementations, where performance is less sensitive.
This PR introduces a new `CacheKey` trait to communicate the difference between a hash and computing a key for the cache. The new trait can be implemented for types that don't implement `Hash` for performance reasons, and we can define additional constraints on the implementation: For example, we'll want to enforce portability when we add remote caching support. Using a different trait further allows us not to implement it for types without stable identities (e.g. pointers) or use other implementations than the standard hash function.
2023-03-03 18:29:49 +00:00
konstin
d1288dc2b1
Remove maturin build from CI ( #3322 )
...
maturin build generally works when cargo build works, so imho it's not worth running it with every CI run.
2023-03-03 16:50:26 +01:00
konstin
3bcffb5bdd
Add flake-pyi PYI033 "Do not use type comments in stubs" ( #3302 )
2023-03-03 10:45:34 -05:00
Martin Packman
98209be8aa
Detect quote style ignoring docstrings ( #3306 )
...
Currently the quote style of the first string in a file is used for autodetecting what to use when rewriting code for fixes. This is an okay heuristic, but often the first line in a file is a docstring, rather than a string constant, and it's not uncommon for pre-Black code to have different quoting styles for those.
For example, in the Google style guide:
https://google.github.io/styleguide/pyguide.html
> Be consistent with your choice of string quote character within a file. Pick ' or " and stick with it. ... Docstrings must use """ regardless.
This branch adjusts the logic to instead skip over any `"""` triple doublequote string tokens. The default, if there are no single quoted strings, is still to use double quote as the style.
2023-03-02 23:59:33 -05:00
Charlie Marsh
a03fa93c3a
Abort when unable to fix relative imports past module root ( #3319 )
2023-03-03 04:38:51 +00:00
Charlie Marsh
4de3882088
Upgrade RustPython ( #3316 )
2023-03-02 22:59:29 -05:00
Charlie Marsh
3a98b68dc0
Always include @classmethod and @staticmethod in decorator lists ( #3314 )
2023-03-03 03:49:04 +00:00
Carlos Gonçalves
7e291e542d
feat(e225,226,227,228): add rules ( #3300 )
2023-03-02 22:54:45 +00:00
Carlos Gonçalves
6f649d6579
feat(E211): add rule + autofix ( #3313 )
2023-03-02 22:48:04 +00:00
Yaroslav Chvanov
508bc605a5
Implement property-decorators configuration option for pydocstyle ( #3311 )
2023-03-02 16:59:56 -05:00
Charlie Marsh
ffdf6e35e6
Treat function type annotations within classes as runtime-required ( #3312 )
2023-03-02 16:45:26 -05:00
Martin Lehoux
886992c6c2
Replace tuples with type union in isinstance or issubclass calls ( #3280 )
2023-03-02 15:59:15 -05:00
Charlie Marsh
187104e396
Flag out-of-date docs on CI ( #3309 )
2023-03-02 15:55:39 -05:00
Charlie Marsh
3ed539d50e
Add a CLI flag to force-ignore noqa directives ( #3296 )
2023-03-01 22:28:13 -05:00
Charlie Marsh
4a70a4c323
Ignore unused imports in ModuleNotFoundError blocks ( #3288 )
2023-03-01 18:08:37 -05:00
Charlie Marsh
310f13c7db
Redirect RUF004 to B026 ( #3293 )
2023-03-01 13:00:02 -05:00
konstin
2168404fc2
flake8-pyi PYI006 bad version info comparison ( #3291 )
...
Implement PYI006 "bad version info comparison"
## What it does
Ensures that you only `<` and `>=` for version info comparisons with
`sys.version_info` in `.pyi` files. All other comparisons such as
`<`, `<=` and `==` are banned.
## Why is this bad?
```python
>>> import sys
>>> print(sys.version_info)
sys.version_info(major=3, minor=8, micro=10, releaselevel='final', serial=0)
>>> print(sys.version_info > (3, 8))
True
>>> print(sys.version_info == (3, 8))
False
>>> print(sys.version_info <= (3, 8))
False
>>> print(sys.version_info in (3, 8))
False
```
Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com >
2023-03-01 18:58:57 +01:00
Charlie Marsh
a032b66c2e
Avoid PEP 585 rewrites when builtins are shadowed ( #3286 )
2023-02-28 23:25:42 +00:00
Charlie Marsh
af5f7dbd83
Avoid pluralization for single --add-noqa result ( #3282 )
2023-02-28 15:41:18 -05:00
Charlie Marsh
8066607ea3
Add a preliminary tutorial ( #3281 )
2023-02-28 20:31:27 +00:00
Andy Freeland
0ed9fccce9
Upgrade RustPython ( #3277 )
...
Fixes #3207 .
2023-02-28 12:21:28 -05:00
Carlos Gonçalves
074a343a63
feat(E251,E252): add rules ( #3274 )
2023-02-28 12:02:36 -05:00
Charlie Marsh
c7e09b54b0
Use expression span for yoda-conditions fixes ( #3276 )
2023-02-28 16:59:02 +00:00
Charlie Marsh
67d1f74587
Avoid raising TRY200 violations within new scopes ( #3275 )
2023-02-28 11:56:29 -05:00
Matthew Lloyd
1c79dff3bd
Improve the message for PLW2901: use "outer" and "inner" judiciously ( #3263 )
2023-02-28 16:33:01 +00:00
Charlie Marsh
f5f09b489b
Introduce dedicated CST tokens for other operator kinds ( #3267 )
2023-02-27 23:54:57 -05:00
Charlie Marsh
061495a9eb
Make BoolOp its own located token ( #3265 )
2023-02-28 03:43:28 +00:00
Charlie Marsh
470e1c1754
Preserve comments on non-defaulted arguments ( #3264 )
2023-02-27 23:41:40 +00:00
Charlie Marsh
16be691712
Enable more non-panicking formatter tests ( #3262 )
2023-02-27 18:21:53 -05:00
Charlie Marsh
270015865b
Don't flag keyword-based logging format strings ( #3261 )
2023-02-27 23:11:13 +00:00
Charlie Marsh
ccfa9d5b20
Deduplicate SIM116 errors ( #3260 )
2023-02-27 18:08:45 -05:00
Charlie Marsh
2261e194a0
Create dedicated Body nodes in the formatter CST ( #3223 )
2023-02-27 22:55:05 +00:00
Ville Skyttä
cd6413ca09
Match non-lowercase with S105 again ( #3258 )
2023-02-27 16:38:23 -05:00
Charlie Marsh
c65585e14a
Use identifier_range for a few more rules ( #3254 )
2023-02-27 18:23:33 +00:00
Charlie Marsh
d2a6ed7be6
Upgrade RustPython ( #3252 )
2023-02-27 18:21:06 +00:00
Charlie Marsh
16e2dae0c2
Handle empty NamedTuple and TypedDict conversions ( #3251 )
2023-02-27 11:18:34 -05:00
Carlos Gonçalves
e8ba9c9e21
feat(W191): add indentation_contains_tabs ( #3249 )
2023-02-27 10:36:03 -05:00
Jonathan Plasse
d285f5c90a
Run automatically format code blocks with Black ( #3191 )
2023-02-27 10:14:05 -05:00
Charlie Marsh
386ca7c9a1
Bump version to 0.0.253 ( #3245 )
2023-02-26 23:10:04 -05:00
Charlie Marsh
40c5abf16e
Avoid flagging Pylint logging rules with starred arguments ( #3244 )
2023-02-26 22:58:24 -05:00
Matthew Lloyd
7e7aec7d74
Expand the range of the COM812 autofix to include the preceding token ( #3241 )
...
This prevents the UP034 autofix simultaneously stripping the
parentheses from generators in the same linter pass, which causes
a SyntaxError.
Closes #3234 .
With this fix:
```python
$ cat test.py
the_first_one = next(
(i for i in range(10) if i // 2 == 0)
)
$ cargo run --bin ruff check test.py --no-cache --select UP034,COM812 --fix
Finished dev [unoptimized + debuginfo] target(s) in 0.08s
Running `target/debug/ruff check test.py --no-cache --select UP034,COM812 --fix`
Found 1 error (1 fixed, 0 remaining).
$ cat test.py
the_first_one = next(
i for i in range(10) if i // 2 == 0
)
```
* Use format
---------
Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com >
2023-02-27 03:47:07 +00:00
Ivan Gozali
4b5538f74e
[pylint] W0603: global-statement ( #3227 )
...
Implements pylint rule [W0603: global-statement](https://pylint.readthedocs.io/en/latest/user_guide/messages/warning/global-statement.html ).
Currently checks for global statement usage in a few StmtKinds (as tested in the `pylint` `global-statement` test case [here](b70d2abd7f/tests/functional/g/globals.py )):
* Assign
* AugAssign
* ClassDef
* FunctionDef | AsyncFunctionDef
* Import
* ImportFrom
* Delete
2023-02-26 23:40:24 +00:00
Charlie Marsh
36d134fd41
Bump lint rule count to 500+ ( #3240 )
2023-02-26 18:10:09 -05:00
Chris Chan
0b7d6b9097
Implement pylint's else-if-used rule (PLR5501) ( #3231 )
...
Attempt to implement else-if-used
https://pylint.pycqa.org/en/latest/user_guide/messages/refactor/else-if-used.html
Issue #970
2023-02-26 22:42:33 +00:00
Nick Pope
994e2e0903
Rename some flake8-simplify rules ( #2915 )
...
Renames the following rules that stood out to me at a glance as needing better names:
- `or-true` to `expr-or-true`
- `and-false` to `expr-and-false`
- `a-or-not-a` to `expr-or-not-expr`
- `a-and-not-a` to `expr-and-not-expr`
Related to #2902 .
2023-02-26 22:35:15 +00:00
Luc Khai Hai
bc79f540e4
[flake8-django] DJ003, DJ006, DJ007 ( #3236 )
...
Implements [flake8-django](https://github.com/rocioar/flake8-django ) rules:
- DJ03
- DJ06
- DJ07
2023-02-26 22:29:42 +00:00
Steve Dignam
3a78b59314
[flake8-pyi]: PYI011, PYI014 ( #3238 )
...
Implement PYI011 and PYI014 with the latest changes:
https://github.com/PyCQA/flake8-pyi/pull/326
https://github.com/PyCQA/flake8-pyi/issues/316
rel: https://github.com/charliermarsh/ruff/issues/848
rel: 4212bec43d/pyi.py (L718)
2023-02-26 22:11:58 +00:00
Edgar R. M
5f83851329
[pydocstyle]: Implement ignore-decorators ( #3229 )
2023-02-26 21:40:01 +00:00
Carlos Gonçalves
484ce7b8fc
feat(E275): add Missing whitespace after keyword ( #3225 )
2023-02-26 21:36:05 +00:00
Charlie Marsh
1c75071136
Implement basic rendering of remaining AST nodes ( #3233 )
2023-02-26 05:05:56 +00:00
Charlie Marsh
51bca19c1d
Add builders for common comment rendering ( #3232 )
2023-02-26 04:16:24 +00:00
Steve Dignam
a8a312e862
[flake8-pyi]: PYI009, PYI010, PYI021 ( #3230 )
...
PYI009 and PYI010 are very similar, always use `...` in function and class bodies in stubs.
PYI021 bans doc strings in stubs.
I think all of these rules should be relatively straightforward to implement auto fixes for but can do that later once we get all the other rules added.
rel: https://github.com/charliermarsh/ruff/issues/848
2023-02-25 22:29:04 -05:00
Ran Benita
33c31cda27
Add noqa_row to diagnostics JSON format ( #3228 )
...
In ruff-lsp (https://github.com/charliermarsh/ruff-lsp/pull/76 ) we want to add a "Disable \<rule\> for this line" quickfix. However, finding the correct line into which the `noqa` comment should be inserted is non-trivial (multi-line strings for example).
Ruff already has this info, so expose it in the JSON output for use by ruff-lsp.
2023-02-25 18:13:16 -05:00
Edgar R. M
cd9fbeb560
[bandit]: Do not treat "passed" as "password" for S105/S106/S107 ( #3222 )
2023-02-25 15:32:53 -05:00
Jeong YunWon
84e96cdcd9
More enum work ( #3212 )
2023-02-25 11:40:16 -05:00
Charlie Marsh
248590224a
Avoid flagging logging-too-few-args with no arguments ( #3220 )
2023-02-24 21:57:49 -05:00
Charlie Marsh
bbc55cdb04
Allow ruff.toml file to be dot-prefixed (as .ruff.toml) ( #3221 )
2023-02-24 23:14:26 +00:00
Charlie Marsh
2792439eac
Add TextMate to editor-integrations.md ( #3219 )
2023-02-24 22:57:33 +00:00
Charlie Marsh
0694aee1b6
Avoid EXE001 and EXE002 errors from stdin input ( #3218 )
2023-02-24 22:55:32 +00:00
Charlie Marsh
a17b5c134a
Avoid rewriting any PEP 604 runtime annotations ( #3217 )
...
Following `pyupgrade`, we'll just _never_ touch these.
Closes #2981 .
Closes #3215 .
2023-02-24 22:39:58 +00:00
Charlie Marsh
42f61535b5
Normalize treatment of aliased and unaliased imports ( #3216 )
2023-02-24 22:11:03 +00:00
Carlos Gonçalves
1c01b3c934
fix(docs): broken links inside Configuration.md ( #3205 )
2023-02-24 18:55:33 +00:00
Jonathan Plasse
39b9a1637f
Fix Markdown errors in docs ( #3187 )
2023-02-24 13:06:48 -05:00
Jonathan Plasse
2c692e3acf
Remove --all from cargo fmt|test ( #3208 )
2023-02-24 12:52:59 -05:00
monosans
24add5f56c
Avoid boolean-trap rules for ConfigParser get() methods ( #3209 )
2023-02-24 12:52:33 -05:00
Samuel Cormier-Iijima
0b7736ad79
[flake8-tidy-imports] fix autofix for relative imports ( #3197 )
2023-02-23 23:40:28 -05:00
Charlie Marsh
eef85067c8
Exclude globsets for --show-settings ( #3201 )
2023-02-24 04:23:00 +00:00
Jeong YunWon
da98fab4ae
Adapt is-macro for a few enums ( #3182 )
2023-02-24 04:06:56 +00:00
Charlie Marsh
0f37a98d91
Use then-some pattern for sometimes-fixable rules ( #3199 )
2023-02-24 03:57:14 +00:00
Charlie Marsh
f38624824d
Avoid autofixing some PT violations when comments are present ( #3198 )
2023-02-24 03:48:41 +00:00
Charlie Marsh
159422071e
Handle end-of-line comments on excepthandler and alias ( #3196 )
2023-02-23 22:35:39 -05:00
Charlie Marsh
6eaacf96be
Introduce a new CST element for slice segments ( #3195 )
2023-02-24 00:49:41 +00:00
Charlie Marsh
eb15371453
Make Locator available in AST-to-CST conversion pass ( #3194 )
2023-02-23 19:43:03 -05:00
Matt Nawara
198b301baf
[pycodestyle] trailing-whitespace, blank-line-contains-whitespace (W291, W293) ( #3122 )
2023-02-23 19:04:45 -05:00
Jeong YunWon
c8c575dd43
Adapt BoolLike to flags ( #3175 )
2023-02-23 16:31:46 -05:00
Jonathan Plasse
6e54cd8233
Normalize relative markdown links ( #3190 )
2023-02-23 16:24:31 -05:00
Jonathan Plasse
a688a237d7
Add black to pre-commit ( #3192 )
2023-02-23 16:24:23 -05:00
Charlie Marsh
bda2a0007a
Parenthesize numbers during attribute accesses ( #3189 )
2023-02-23 14:57:23 -05:00
Charlie Marsh
32d165b7ad
Implement complex literal formatting ( #3186 )
2023-02-23 19:09:33 +00:00
Charlie Marsh
ac79bf4ee9
Implement float literal formatting ( #3184 )
2023-02-23 14:02:23 -05:00
Charlie Marsh
376eab3a53
Implement integer literal formatting ( #3183 )
2023-02-23 18:31:56 +00:00
Charlie Marsh
08be7bd285
Add a TODO to string_literal ( #3181 )
2023-02-23 12:46:20 -05:00
Charlie Marsh
f5241451d8
Use writeln with --show-settings ( #3180 )
2023-02-23 17:23:31 +00:00
Charlie Marsh
c9fe0708cb
Run cargo update ( #3179 )
2023-02-23 12:09:36 -05:00
Charlie Marsh
09f8c487ea
Update RustPython to support *tuple annotations ( #3178 )
2023-02-23 16:58:38 +00:00
Charlie Marsh
1e7233a8eb
Add support for reformatting byte strings ( #3176 )
2023-02-23 16:50:24 +00:00
Charlie Marsh
f967f344fc
Add support for basic Constant::Str formatting ( #3173 )
...
This PR enables us to apply the proper quotation marks, including support for escapes. There are some significant TODOs, especially around implicit concatenations like:
```py
(
"abc"
"def"
)
```
Which are represented as a single AST node, which requires us to tokenize _within_ the formatter to identify all the individual string parts.
2023-02-23 16:23:10 +00:00
Charlie Marsh
095f005bf4
Move RustPython vendored and helper code into its own crate ( #3171 )
2023-02-23 14:14:16 +00:00
Charlie Marsh
0f04aa2a5f
Bind star patterns in match statements ( #3169 )
2023-02-23 12:39:03 +00:00
Jonathan Plasse
ad7ba77fff
Fix ExceptionGroup F821 false positive ( #3167 )
2023-02-23 12:36:11 +00:00
Jeong YunWon
77d43795f8
Replace Autofix::is_enabled to result_like::BoolLike ( #3165 )
2023-02-23 07:29:13 -05:00
Jeong YunWon
4357f2be0f
Add Autofix::is_enabled() to remove repeative patterns ( #3159 )
2023-02-22 23:52:07 -05:00
Charlie Marsh
e5c1f95545
Check-in updated snapshot ( #3161 )
2023-02-23 03:42:27 +00:00
Charlie Marsh
227ff62a4e
Don't touch tuple brackets after in ( #3160 )
2023-02-23 03:10:24 +00:00
Charlie Marsh
d8e4902516
Un-modify tupleassign and function2 tests ( #3158 )
...
I manually changed these in #3080 and #3083 to get the tests passing (with notes around the deviations) -- but that's no longer necessary, now that we have proper testing that takes deviations into account.
2023-02-23 02:37:25 +00:00
Matthew Lloyd
e66739884f
Add note about prioritizing naming convention over preservation ( #3157 )
2023-02-23 02:32:46 +00:00
Charlie Marsh
5fd827545b
Add a trailing newline to all .py.expect files ( #3156 )
...
This just re-formats all the `.py.expect` files with Black, both to add a trailing newline and be doubly-certain that they're correctly formatted.
I also ensured that we add a hard line break after each statement, and that we avoid including an extra newline in the generated Markdown (since the code should contain the exact expected newlines).
2023-02-23 02:29:27 +00:00
Matthew Lloyd
c1ddcb8a60
[flake8-pie] Unnecessary list comprehension, with autofix (PIE802) ( #3149 )
2023-02-22 20:58:45 -05:00
Charlie Marsh
48a317d5f6
Change via to using ( #3155 )
2023-02-23 01:47:15 +00:00
Charlie Marsh
74e18b6cff
Split up some docs sections ( #3154 )
2023-02-22 20:18:10 -05:00
Charlie Marsh
21d02cd51f
Omit non-.py[i] files from module naming rules ( #3153 )
2023-02-23 00:38:46 +00:00
Charlie Marsh
049e77b939
Follow-up with some small doc changes ( #3152 )
2023-02-23 00:35:22 +00:00
Charlie Marsh
b9bfb81e36
Move configuration out of README and into permanent docs ( #3150 )
2023-02-22 19:25:53 -05:00
Charlie Marsh
2d4fae45d9
Avoid flagging unfixable TypedDict and NamedTuple definitions ( #3148 )
2023-02-22 23:23:25 +00:00
Charlie Marsh
726adb7efc
Avoid suggesting 'is' for constant literals ( #3146 )
2023-02-22 22:37:22 +00:00
Charlie Marsh
dbdfdeb0e1
Add pre-commit note to docs ( #3145 )
2023-02-22 17:22:47 -05:00
Charlie Marsh
1c41789c2a
Bump version to 0.0.252 ( #3142 )
2023-02-22 14:50:14 -05:00
Charlie Marsh
2f9de335db
Upgrade RustPython to match new flattened exports ( #3141 )
2023-02-22 19:36:13 +00:00
Ran Benita
ba61bb6a6c
Fix isort no-lines-before preceded by an empty section ( #3139 )
...
Fix isort no-lines-before preceded by an empty section
Fix #3138 .
2023-02-22 14:35:53 -05:00
Charlie Marsh
17ab71ff75
Include match in nested block check ( #3137 )
2023-02-22 14:32:08 -05:00
Charlie Marsh
4ad4e3e091
Avoid useless-else-on-loop for break within match ( #3136 )
2023-02-22 19:12:44 +00:00
Florian Best
6ced5122e4
refactor(use-from-import): build fixed variant via AST ( #3132 )
2023-02-22 13:17:37 -05:00
Marijn Valk
7d55b417f7
add delta-rs to list of users ( #3133 )
2023-02-22 13:07:58 -05:00
Charlie Marsh
f0e0efc46f
Upgrade RustPython to handle trailing commas in map patterns ( #3130 )
2023-02-22 11:17:13 -05:00
Charlie Marsh
1efa2e07ad
Avoid match statement misidentification in token rules ( #3129 )
2023-02-22 15:44:45 +00:00
Charlie Marsh
df3932f750
Use file-specific quote for C408 ( #3128 )
2023-02-22 15:26:46 +00:00
Rupert Tombs
817d0b4902
Fix =/== error in ManualDictLookup ( #3117 )
2023-02-22 15:14:30 +00:00
Micha Reiser
ffd8e958fc
chore: Upgrade Rust to 1.67.0 ( #3125 )
2023-02-22 10:03:17 -05:00
Micha Reiser
ed33b75bad
test(ruff_python_formatter): Run all Black tests ( #2993 )
...
This PR changes the testing infrastructure to run all black tests and:
* Pass if Ruff and Black generate the same formatting
* Fail and write a markdown snapshot that shows the input code, the differences between Black and Ruff, Ruffs output, and Blacks output
This is achieved by introducing a new `fixture` macro (open to better name suggestions) that "duplicates" the attributed test for every file that matches the specified glob pattern. Creating a new test for each file over having a test that iterates over all files has the advantage that you can run a single test, and that test failures indicate which case is failing.
The `fixture` macro also makes it straightforward to e.g. setup our own spec tests that test very specific formatting by creating a new folder and use insta to assert the formatted output.
2023-02-22 09:25:06 -05:00
Micha Reiser
262e768fd3
refactor(ruff): Implement doc_lines_from_tokens as iterator ( #3124 )
...
This is a nit refactor... It implements the extraction of document lines as an iterator instead of a Vector to avoid the extra allocation.
2023-02-22 09:22:06 -05:00
Ran Benita
bc3a9ce003
Mark typing.assert_never as no return ( #3121 )
...
This function always raises, so RET503 shouldn't trigger for it.
2023-02-22 09:15:39 -05:00
Charlie Marsh
48005d87f8
Add missing backticks from rustdoc ( #3112 )
2023-02-22 05:03:06 +00:00
Charlie Marsh
e37e9c2ca3
Skip EXE001 and EXE002 rules on Windows ( #3111 )
2023-02-21 23:39:56 -05:00
Matthieu Devlin
8fde63b323
[pylint] Implement E1205 and E106 ( #3084 )
2023-02-21 22:53:11 -05:00
Matthew Lloyd
97338e4cd6
[pylint] redefined-loop-name (W2901) ( #3022 )
...
Slightly broadens W2901 to cover `with` statements too.
Closes #2972 .
2023-02-22 03:23:47 +00:00
Charlie Marsh
9645790a8b
Support shell expansion for --config argument ( #3107 )
2023-02-21 23:33:41 +00:00
Charlie Marsh
18800c6884
Include file permissions in cache key ( #3104 )
2023-02-21 18:20:06 -05:00
Charlie Marsh
fd638a2e54
Bump version to 0.0.251 ( #3105 )
2023-02-21 18:13:59 -05:00
Charlie Marsh
fa1459d56e
Avoid prefer-list-builtin for lambdas with *args or **kwargs ( #3102 )
2023-02-21 17:44:37 -05:00
Charlie Marsh
d93c5811ea
Create bindings for MatchAs patterns ( #3098 )
2023-02-21 22:04:09 +00:00
Charlie Marsh
06e426f509
Bump version to 0.0.250 ( #3095 )
2023-02-21 15:20:46 -05:00
Carlos Gonçalves
6eb014b3b2
feat(B032): add b032 flake8_bugbear ( #3085 )
2023-02-21 19:53:29 +00:00
Charlie Marsh
d9fd78d907
Ignore setters in flake8-boolean-trap ( #3092 )
2023-02-21 19:31:00 +00:00
Charlie Marsh
37df07d2e0
Re-add compatibility to README ( #3091 )
2023-02-21 18:57:47 +00:00
Charlie Marsh
d5c65b5f1b
Add support for structural pattern matching ( #3047 )
2023-02-21 18:52:10 +00:00
Charlie Marsh
cdc4e86158
Add support for TryStar ( #3089 )
2023-02-21 13:42:20 -05:00
Charlie Marsh
50ec6d3b0f
Use LibCST to fix chained assertions ( #3087 )
2023-02-21 13:10:31 -05:00
Charlie Marsh
a6eb60cdd5
Enable function2 test ( #3083 )
2023-02-21 04:37:50 +00:00
Charlie Marsh
90c04b9cff
Enable tupleassign test ( #3080 )
2023-02-21 00:42:23 +00:00
Charlie Marsh
b701cca779
Enable some already-passing Black tests ( #3079 )
2023-02-21 00:10:35 +00:00
Charlie Marsh
ce8953442d
Add support for trailing colons in slice expressions ( #3077 )
2023-02-20 23:24:32 +00:00
Charlie Marsh
7d4e513a82
Omit while-True loops from implicit return enforcement ( #3076 )
2023-02-20 18:22:28 -05:00
Charlie Marsh
35f7f7b66d
Avoid boolean-trap rules for positional-only builtin calls ( #3075 )
2023-02-20 23:08:18 +00:00
Charlie Marsh
6e02405bd6
Add StmtKind::Try; fix trailing newlines ( #3074 )
2023-02-20 22:55:32 +00:00
Carlos Gonçalves
b657468346
feat(B029): Add B029 from flake8-bugbear ( #3068 )
2023-02-20 15:57:13 -05:00
Micha Reiser
f72ed255e5
chore: Use LF on all platforms ( #3005 )
...
I worked on #2993 and ran into issues that the formatter tests are failing on Windows because `writeln!` emits `\n` as line terminator on all platforms, but `git` on Windows converted the line endings in the snapshots to `\r\n`.
I then tried to replicate the issue on my Windows machine and was surprised that all linter snapshot tests are failing on my machine. I figured out after some time that it is due to my global git config keeping the input line endings rather than converting to `\r\n`.
Luckily, I've been made aware of #2033 which introduced an "override" for the `assert_yaml_snapshot` macro that normalizes new lines, by splitting the formatted string using the platform-specific newline character. This is a clever approach and gives nice diffs for multiline fixes but makes assumptions about the setup contributors use and requires special care whenever we use line endings inside of tests.
I recommend that we remove the special new line handling and use `.gitattributes` to enforce the use of `LF` on all platforms [guide](https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings ). This gives us platform agnostic tests without having to worry about line endings in our tests or different git configurations.
## Note
It may be necessary for Windows contributors to run the following command to update the line endings of their files
```bash
git rm --cached -r .
git reset --hard
```
2023-02-20 20:13:37 +00:00
Charlie Marsh
7e9dea0027
Change contributing suggestion ( #3067 )
2023-02-20 20:05:38 +00:00
Colin Delahunty
9545958ad8
[flake8-simplify]: Implement manual-dict-lookup ( #2767 )
2023-02-20 20:00:59 +00:00
Colin Delahunty
41faa335d1
[tryceratops]: Verbose Log Messages ( #3036 )
2023-02-20 18:21:04 +00:00
Charlie Marsh
4cfa350112
Bump version to 0.0.249 ( #3063 )
2023-02-20 13:11:29 -05:00
Charlie Marsh
41f163fc8d
Avoid assert() to assert statement conversion in expressions ( #3062 )
2023-02-20 17:49:22 +00:00
Charlie Marsh
d21dd994e6
Increase expected size of FormatElement ( #3049 )
2023-02-20 12:47:35 -05:00
Josh Karpel
6f5a6b8c8b
Do not autofix E731 in class bodies ( #3050 )
2023-02-20 12:38:42 -05:00
Jeong YunWon
35606d7b05
clean up to fix nightly clippy warnings and dedents ( #3057 )
2023-02-20 09:33:47 -05:00
Matthew Lloyd
3ad257cfea
Add PDM to "Who's Using Ruff?" ( #3048 )
2023-02-20 03:58:22 +00:00
Charlie Marsh
b39f960cd1
Relax constraints on pep8-naming module validation ( #3043 )
2023-02-19 17:34:23 -05:00
Charlie Marsh
c297d46899
Remove unused AsFormat trait for Option<T> ( #3041 )
...
We should re-add this, but it's currently unused and doesn't compile under 1.66.0.
See: #3039 .
2023-02-19 20:19:35 +00:00
Jonathan Plasse
d6a100028c
Update docs and pre-commit after #3006 ( #3038 )
2023-02-19 14:23:01 -05:00
Jonathan Plasse
35d4e03f2a
Fix ruff_dev regex workspace dependency ( #3037 )
2023-02-19 18:02:08 +00:00
Charlie Marsh
41e77bb01d
Add some additional users to "Who's Using Ruff?" ( #3035 )
2023-02-19 16:30:01 +00:00
Charlie Marsh
2ff3dd5fbe
Bump version to 0.0.248 ( #3034 )
2023-02-19 16:21:30 +00:00
Charlie Marsh
0f0e7a521a
Avoid false-positives for break in with ( #3032 )
2023-02-19 11:17:04 -05:00
Jonathan Plasse
b75663be6d
Add missing rust-version in crates ( #3009 )
2023-02-19 15:07:17 +00:00
Tomer Chachamu
4d3d04ee61
[PLE0101] error when __init__ returns a value ( #3007 )
2023-02-19 14:54:43 +00:00
Manuel Jacob
87422ba362
Add configuration option for C408 to allow dict calls with keyword arguments. ( #2977 )
...
When creating a dict with string keys, some prefer to call dict instead of writing a dict literal.
For example: `dict(a=1, b=2, c=3)` instead of `{"a": 1, "b": 2, "c": 3}`.
2023-02-19 14:47:03 +00:00
Jeremy Goh
c1d2976fff
[docs] Add docs for flake8-implicit-str-concat rules ( #3028 )
2023-02-19 14:38:59 +00:00
Jeremy Goh
13281cd9ca
[docs] Add some docs for flake8-simplify ( #3027 )
2023-02-19 14:26:56 +00:00
Jonathan Plasse
e53652779d
Avoid raising B027 violations in .pyi files ( #3016 )
2023-02-19 14:21:33 +00:00
Jonathan Plasse
db4c611c6f
Fix broken links and markdown style ( #3017 )
2023-02-19 08:46:49 -05:00
Charlie Marsh
c25be31eb1
Fix documentation-link detection in generate_mkdocs.py ( #3030 )
2023-02-19 12:20:44 +00:00
Micha Reiser
a7c533634d
chore: Remove default_members from Cargo.toml ( #3006 )
...
This PR removes the `default_members` from the workspace configuration.
## Why
I'm not familiar with the motivation for why the `default_members` setting was added initially, and I do not object to keeping it. I'll explain my motivation for removing it below.
My main reason for removing the `default_members` override is that new contributors may not know that `cargo test`, `cargo build`, and other commands only run on a subset of crates. They may then be surprised that their PRs are failing in CI, but everything works locally.
My guess why `default_members` was added is to speed up the development workflow. That's fair, but I question the value because `ruff` is the heaviest crate to build.
2023-02-19 07:18:47 -05:00
Simon Brugman
cfa6883431
docs(readme): add Diffusers ( #3029 )
2023-02-19 07:10:02 -05:00
Nyakku Shigure
216aa929af
Remove duplicate underline in B007 autofix message ( #3021 )
2023-02-18 19:38:20 -05:00
Simon Brugman
9e45424ed6
[pycodestyle] autofix useless semicolons ( #3001 )
2023-02-17 18:52:42 -05:00
Charlie Marsh
db7f16e276
Support positional messages in assertion rewrites ( #3002 )
2023-02-17 23:44:13 +00:00
Charlie Marsh
a10a500a26
Ignore namedtuple methods in flake8-self ( #2998 )
2023-02-17 17:16:25 -05:00
Charlie Marsh
b9fef7cef7
Unlink flake8-bugbear in summary ( #2997 )
2023-02-17 15:58:33 -05:00
Charlie Marsh
34294ccc00
Deduplicate user list ( #2996 )
2023-02-17 20:07:42 +00:00
Simon Brugman
a934d01bdb
[flake8-tidy-imports] extend autofix of relative imports ( #2990 )
...
This extends the autofix for TID252 to work with for relative imports without `module` (i.e. `from .. import`). Tested with `matplotlib` and `bokeh`.
(Previously it would panic on unwrap of the module)
Note that pandas has [replaced](6057d7a93e ) `absolufy-imports` with `ruff` now!
2023-02-17 19:35:28 +00:00
Simon Brugman
0dd590f137
Fix for F541 unescape f-string ( #2971 )
2023-02-17 14:27:01 -05:00
Charlie Marsh
909a5c3253
Avoid zero-indexed column for IOError ( #2995 )
2023-02-17 14:14:28 -05:00
Charlie Marsh
5c987874c4
Enforce D403 on methods ( #2992 )
2023-02-17 18:05:48 +00:00
Nyakku Shigure
0cfe4f9c69
Remove a whitespace in B004 message ( #2991 )
2023-02-17 12:37:08 -05:00
Charlie Marsh
6a369e4a30
Remove via from sentence in README ( #2987 )
2023-02-17 13:49:09 +00:00
Charlie Marsh
6f97e2c457
Split list of users into top-level and dedicated section ( #2986 )
2023-02-17 13:36:32 +00:00
Charlie Marsh
bebd412469
Adjust header depth in docs ( #2985 )
2023-02-17 13:19:55 +00:00
Charlie Marsh
cd1f57b713
Move FAQ into MkDocs ( #2984 )
2023-02-17 13:15:53 +00:00
Charlie Marsh
a0912deb2b
Move editor integrations into MkDocs ( #2983 )
2023-02-17 13:12:20 +00:00
Charlie Marsh
50ee14a418
Fix references to specific settings in README.md ( #2982 )
2023-02-17 13:07:37 +00:00
Martin Fischer
f5adbbebc5
Fix table of contents enumeration
2023-02-17 07:55:50 -05:00
Martin Fischer
c88e05dc1b
Merge Reference README section into Configuration section
2023-02-17 07:55:50 -05:00
Martin Fischer
d658bfc024
Remove options from README
2023-02-17 07:55:50 -05:00
Martin Fischer
b0d72c47b4
refactor: Move Top-level heading into ruff_dev
2023-02-17 07:55:50 -05:00
Martin Fischer
8195873cdf
Remove rule tables from README
2023-02-17 07:55:50 -05:00
Martin Fischer
bf8108469f
Remove auto-generated table of contents
2023-02-17 07:55:50 -05:00
Martin Fischer
a2277cfeba
refactor: Move fix symbol legend into ruff_dev
2023-02-17 07:55:50 -05:00
Charlie Marsh
180541a924
Unify comment terminology with that of rome_formatter ( #2979 )
2023-02-17 03:02:25 +00:00
Simon Brugman
34664a0ca0
[numpy] numpy-legacy-random ( #2960 )
...
The new `Generator` in NumPy uses bits provided by [PCG64](https://numpy.org/doc/stable/reference/random/bit_generators/pcg64.html#numpy.random.PCG64 ) which has better statistical properties than the legacy [MT19937](https://numpy.org/doc/stable/reference/random/bit_generators/mt19937.html#numpy.random.MT19937 ) used in [RandomState](https://numpy.org/doc/stable/reference/random/legacy.html#numpy.random.RandomState ). Global random functions can also be problematic with parallel processing.
This rule is probably quite useful for data scientists (perhaps in combination with `nbqa`)
References:
- [Legacy Random Generation](https://numpy.org/doc/stable/reference/random/legacy.html#legacy )
- [Random Sampling](https://numpy.org/doc/stable/reference/random/index.html#random-quick-start )
- [Using PyTorch + NumPy? You're making a mistake.](https://tanelp.github.io/posts/a-bug-that-plagues-thousands-of-open-source-ml-projects/ )
2023-02-17 02:06:30 +00:00
Charlie Marsh
e081455b06
Add support for file-scoped noqa directives ( #2978 )
...
# Summary
This allows users to do things like:
```py
# ruff: noqa: F401
```
...to ignore all `F401` directives in a file. It's equivalent to `per-file-ignores`, but allows users to specify the behavior inline.
Note that Flake8 does _not_ support this, so we _don't_ respect `# flake8: noqa: F401`. (Flake8 treats that as equivalent to `# flake8: noqa`, so ignores _all_ errors in the file. I think all of [these usages](https://cs.github.com/?scopeName=All+repos&scope=&q=%22%23+flake8%3A+noqa%3A+%22 ) are probably mistakes!)
A couple notes on the details:
- If a user has `# ruff: noqa: F401` in the file, but also `# noqa: F401` on a line that would legitimately trigger an `F401` violation, we _do_ mark that as "unused" for `RUF100` purposes. This may be the wrong choice. The `noqa` is legitimately unused, but it's also not "wrong". It's just redundant.
- If a user has `# ruff: noqa: F401`, and runs `--add-noqa`, we _won't_ add `# noqa: F401` to any lines (which seems like the obvious right choice to me).
Closes #1054 (which has some extra pieces that I'll carve out into a separate issue).
Closes #2446 .
2023-02-17 01:59:01 +00:00
Artem Mukhin
4f18fa6733
Add test case for '\u' prefix in B005 ( #2976 )
...
Based on #2958 .
2023-02-16 19:45:29 -05:00
Charlie Marsh
6088a36cd3
Use line_suffix for end-of-line comments ( #2975 )
2023-02-16 18:37:40 -05:00
Charlie Marsh
66a162fa40
Handle non-from __future__ imports ( #2974 )
...
These are uncommon, but currently panic.
Closes #2967 .
2023-02-16 22:56:03 +00:00
Mike Taves
e6722f92ed
Add Rust Trove classifier ( #2973 )
2023-02-16 17:38:36 -05:00
Charlie Marsh
750c28868f
Enable jemalloc on FreeBSD and NetBSD ( #2965 )
2023-02-16 15:21:34 -05:00
Charlie Marsh
5157f584ab
Improve pow operator spacing ( #2970 )
...
Ensure that we add spaces to expressions like `foo.bar() ** 2`.
2023-02-16 15:17:32 -05:00
Charlie Marsh
1c01ec21cb
Regenerate expected Black snapshots ( #2968 )
2023-02-16 19:39:17 +00:00
Manuel Jacob
879512742f
Skip .pytype directory by default. ( #2966 )
...
Pytype stores .pyi files in .pytype that ruff shouldn’t check or touch.
2023-02-16 14:38:08 -05:00
Florian Best
a919041dda
feat(isort): Implement isort.force_to_top ( #2877 )
2023-02-16 19:01:59 +00:00
Charlie Marsh
059601d968
Avoid trying to fix implicit returns with control flow ( #2962 )
2023-02-16 13:42:46 -05:00
Charlie Marsh
2ec1701543
Remove link in asyncio.create_task ( #2963 )
2023-02-16 17:50:56 +00:00
Charlie Marsh
370c3a5daf
Remove mdcat dependency ( #2959 )
2023-02-16 12:09:37 -05:00
Charlie Marsh
fdcb78fd8c
Avoid jemallocator on BSD ( #2957 )
2023-02-16 11:48:51 -05:00
Simon Brugman
2a744d24e5
docs: flake8-self remove unnecessary backticks ( #2951 )
2023-02-16 08:25:34 -05:00
Simon Brugman
cc30738148
Implement flake8-module-naming ( #2855 )
...
- Implement N999 (following flake8-module-naming) in pep8_naming
- Refactor pep8_naming: split rules.rs into file per rule
- Documentation for majority of the violations
Closes https://github.com/charliermarsh/ruff/issues/2734
2023-02-16 04:20:33 +00:00
Edgar R. M
147c6ff1db
Exclude crates/ruff_python_formatter/resources from pre-commit check ( #2947 )
2023-02-15 22:56:42 -05:00
Charlie Marsh
036380e6a8
Fix add-required-import with multi-line offsets ( #2946 )
2023-02-16 03:24:55 +00:00
Charlie Marsh
b6587e51ee
Use an enum to represent composition kind ( #2945 )
2023-02-15 22:14:00 -05:00
Simon Brugman
1bc37110d4
[flake8-pytest-style] autofix for composite-assertion (PT018) ( #2732 )
2023-02-16 00:36:07 +00:00
Lunarmagpie
28acdb76cf
Add support for ensure_future for RUF006 ( #2943 )
2023-02-15 23:18:11 +00:00
Martin Fischer
7b09972c97
Merge convert-loop-to-any & convert-loop-to-all to reimplemented-builtin
2023-02-15 16:24:31 -05:00
Charlie Marsh
f8d46d09ef
Implement asyncio-dangling-task to track asyncio.create_task calls ( #2935 )
...
This rule guards against `asyncio.create_task` usages of the form:
```py
asyncio.create_task(coordinator.ws_connect()) # Error
```
...which can lead to unexpected bugs due to the lack of a strong reference to the created task. See Will McGugan's blog post for reference: https://textual.textualize.io/blog/2023/02/11/the-heisenbug-lurking-in-your-async-code/ .
Note that we can't detect issues like:
```py
def f():
# Stored as `task`, but never used...
task = asyncio.create_task(coordinator.ws_connect())
```
So that would be a false negative. But this catches the common case of failing to assign the task in any way.
Closes #2809 .
2023-02-15 15:19:03 -05:00
Martin Fischer
294cd95c54
Update clap to fix ruff check --help description
...
My two clap bug fixes[1][2] have been merged and released
(see the change in README.md).
[1]: https://github.com/clap-rs/clap/pull/4710
[2]: https://github.com/clap-rs/clap/pull/4712
2023-02-15 13:30:06 -05:00
Charlie Marsh
d8e709648d
Add Transformers to README ( #2933 )
2023-02-15 17:09:50 +00:00
Charlie Marsh
52cc4d6537
Deduplicate files provided on the command-line ( #2931 )
2023-02-15 12:08:34 -05:00
messense
08e9d12137
Upload ruff binaries to GitHub release ( #2930 )
2023-02-15 12:07:47 -05:00
Charlie Marsh
39fdc71b49
Bump version to 0.0.247 ( #2932 )
2023-02-15 12:06:58 -05:00
Charlie Marsh
6b0736cf4b
Allow private accesses on current class ( #2929 )
2023-02-15 16:52:05 +00:00
Charlie Marsh
58269a918a
Apply nullable-model-string-field to all classes ( #2928 )
2023-02-15 15:54:14 +00:00
Sawbez
9168a12679
[docs] flake8-self Private member access docs ( #2912 )
2023-02-15 15:42:38 +00:00
Charlie Marsh
cb971d3a48
Respect self as positional-only argument in annotation rules ( #2927 )
2023-02-15 15:25:17 +00:00
Charlie Marsh
57a5071b4e
Rename some methods on Locator ( #2926 )
2023-02-15 10:21:49 -05:00
Charlie Marsh
976fe364d4
Remove setup.py ( #2922 )
2023-02-15 14:35:11 +00:00
messense
028c7855b2
Simplify release workflows ( #2913 )
...
* No need to build for PyPy since it only contains a binary so the platform tag is the same as CPython
* Update `maturin-action` location
2023-02-15 08:15:19 -05:00
Nick Pope
e5179f67fd
Remove autogenerated docs/rules/*.md files ( #2917 )
2023-02-15 08:11:11 -05:00
Simon Brugman
c9c199dbca
Remove testing resource introduced in #2891 ( #2916 )
2023-02-15 08:10:58 -05:00
Martin Fischer
70e378b736
Implement shell autocompletion for rule codes
...
For example:
$ ruff check --select=EM<Tab>
EM -- flake8-errmsg
EM10 EM1 --
EM101 -- raw-string-in-exception
EM102 -- f-string-in-exception
EM103 -- dot-format-in-exception
(You will need to enable autocompletion as described
in the Autocompletion section in the README.)
Fixes #2808 .
(The --help help change in the README is due to a clap bug,
for which I already submitted a fix:
https://github.com/clap-rs/clap/pull/4710 .)
2023-02-15 08:09:34 -05:00
Charlie Marsh
ca49b00e55
Add initial formatter implementation ( #2883 )
...
# Summary
This PR contains the code for the autoformatter proof-of-concept.
## Crate structure
The primary formatting hook is the `fmt` function in `crates/ruff_python_formatter/src/lib.rs`.
The current formatter approach is outlined in `crates/ruff_python_formatter/src/lib.rs`, and is structured as follows:
- Tokenize the code using the RustPython lexer.
- In `crates/ruff_python_formatter/src/trivia.rs`, extract a variety of trivia tokens from the token stream. These include comments, trailing commas, and empty lines.
- Generate the AST via the RustPython parser.
- In `crates/ruff_python_formatter/src/cst.rs`, convert the AST to a CST structure. As of now, the CST is nearly identical to the AST, except that every node gets a `trivia` vector. But we might want to modify it further.
- In `crates/ruff_python_formatter/src/attachment.rs`, attach each trivia token to the corresponding CST node. The logic for this is mostly in `decorate_trivia` and is ported almost directly from Prettier (given each token, find its preceding, following, and enclosing nodes, then attach the token to the appropriate node in a second pass).
- In `crates/ruff_python_formatter/src/newlines.rs`, normalize newlines to match Black’s preferences. This involves traversing the CST and inserting or removing `TriviaToken` values as we go.
- Call `format!` on the CST, which delegates to type-specific formatter implementations (e.g., `crates/ruff_python_formatter/src/format/stmt.rs` for `Stmt` nodes, and similar for `Expr` nodes; the others are trivial). Those type-specific implementations delegate to kind-specific functions (e.g., `format_func_def`).
## Testing and iteration
The formatter is being developed against the Black test suite, which was copied over in-full to `crates/ruff_python_formatter/resources/test/fixtures/black`.
The Black fixtures had to be modified to create `[insta](https://github.com/mitsuhiko/insta )`-compatible snapshots, which now exist in the repo.
My approach thus far has been to try and improve coverage by tackling fixtures one-by-one.
## What works, and what doesn’t
- *Most* nodes are supported at a basic level (though there are a few stragglers at time of writing, like `StmtKind::Try`).
- Newlines are properly preserved in most cases.
- Magic trailing commas are properly preserved in some (but not all) cases.
- Trivial leading and trailing standalone comments mostly work (although maybe not at the end of a file).
- Inline comments, and comments within expressions, often don’t work -- they work in a few cases, but it’s one-off right now. (We’re probably associating them with the “right” nodes more often than we are actually rendering them in the right place.)
- We don’t properly normalize string quotes. (At present, we just repeat any constants verbatim.)
- We’re mishandling a bunch of wrapping cases (if we treat Black as the reference implementation). Here are a few examples (demonstrating Black's stable behavior):
```py
# In some cases, if the end expression is "self-closing" (functions,
# lists, dictionaries, sets, subscript accesses, and any length-two
# boolean operations that end in these elments), Black
# will wrap like this...
if some_expression and f(
b,
c,
d,
):
pass
# ...whereas we do this:
if (
some_expression
and f(
b,
c,
d,
)
):
pass
# If function arguments can fit on a single line, then Black will
# format them like this, rather than exploding them vertically.
if f(
a, b, c, d, e, f, g, ...
):
pass
```
- We don’t properly preserve parentheses in all cases. Black preserves parentheses in some but not all cases.
2023-02-15 04:06:35 +00:00
Charlie Marsh
f661c90bd7
Remove dependency on ruff_rowan ( #2875 )
...
This PR removes the dependency on `ruff_rowan` (i.e., Rome's fork of rust-analyzer's `rowan`), and in turn, trims out a lot of code in `ruff_formatter` that isn't necessary (or isn't _yet_ necessary) to power the autoformatter.
We may end up pulling some of this back in -- TBD. For example, the autoformatter has its own comment representation right now, but we may eventually want to use the `comments.rs` data structures defined in `rome_formatter`.
2023-02-15 03:54:08 +00:00
Charlie Marsh
5a84df293f
Allow printing of consecutive empty lines ( #2874 )
2023-02-14 22:35:02 -05:00
Charlie Marsh
23d9309111
Remove JetBrains webinar badge ( #2910 )
2023-02-15 03:28:12 +00:00
Charlie Marsh
98ea94fdb7
Add StaticTextSlice kind to FormatElement enum ( #2873 )
...
Given our current parser abstractions, we need the ability to tell `ruff_formatter` to print a pre-defined slice from a fixed string of source code, which we've introduced here as `FormatElement::StaticTextSlice`.
2023-02-14 22:27:52 -05:00
Charlie Marsh
746e1d3436
Add contributors to acknowledgements ( #2909 )
2023-02-15 03:15:38 +00:00
Charlie Marsh
016ff01a04
Add an FAQ question around Python version support ( #2908 )
2023-02-15 03:11:44 +00:00
Charlie Marsh
298498e934
Add an Acknowledgements section to the README ( #2907 )
2023-02-15 00:25:07 +00:00
Charlie Marsh
3ef1c2e303
Add rome_formatter fork as ruff_formatter ( #2872 )
...
The Ruff autoformatter is going to be based on an intermediate representation (IR) formatted via [Wadler's algorithm](https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf ). This is architecturally similar to [Rome](https://github.com/rome/tools ), Prettier, [Skip](https://github.com/skiplang/skip/blob/master/src/tools/printer/printer.sk ), and others.
This PR adds a fork of the `rome_formatter` crate from [Rome](https://github.com/rome/tools ), renamed here to `ruff_formatter`, which provides generic definitions for a formatter IR as well as a generic IR printer. (We've also pulled in `rome_rowan`, `rome_text_size`, and `rome_text_edit`, though some of these will be removed in future PRs.)
Why fork? `rome_formatter` contains code that's specific to Rome's AST representation (e.g., it relies on a fork of rust-analyzer's `rowan`), and we'll likely want to support different abstractions and formatting capabilities (there are already a few changes coming in future PRs). Once we've dropped `ruff_rowan` and trimmed down `ruff_formatter` to the code we currently need, it's also not a huge surface area to maintain and update.
2023-02-14 19:22:55 -05:00
Simon Brugman
ac028cd9f8
[numpy] deprecated type aliases ( #2810 )
...
Closes https://github.com/charliermarsh/ruff/issues/2455
Used `NPY` as prefix code as agreed in the issue.
2023-02-14 23:45:12 +00:00
Edgar R. M
c0eb5c28d1
[docs] Add docs for flake8-errmsg ( #2888 )
2023-02-14 23:21:34 +00:00
Martin Fischer
a77b4566e4
Fix option links in mkdocs rule pages
...
In 28c9263722 I introduced automatic
linkification of option references in rule documentation,
which automatically converted the following:
## Options
* `namespace-packages`
to:
## Options
* [`namespace-packages`]
[`namespace-packages`]: ../../settings#namespace-packages
While the above is a correct CommonMark[1] link definition,
what I was missing was that we used mkdocs for our documentation
generation, which as it turns out uses a non-CommonMark-compliant
Markdown parser, namely Python-Markdown, which contrary to CommonMark
doesn't support link definitions containing code tags.
This commit fixes the broken links via a regex hack.
[1]: https://commonmark.org/
2023-02-14 17:56:21 -05:00
Martin Fischer
860993187e
Fix link relativization in generate_mkdocs.py
2023-02-14 17:56:21 -05:00
Charlie Marsh
58d4e00604
Add publish = false to unpublished crates ( #2905 )
2023-02-14 22:41:14 +00:00
Simon Legner
2d95912699
docs: fix ruff generate-shell-completion ( #2904 )
2023-02-14 22:38:29 +00:00
Simon Brugman
4f927fbacc
[flake8-tidy-imports] autofix relative imports ( #2891 )
...
Previous fix was bugged. This one is only fixing when the `module_path` is present, making it far more robust.
Closes #2764 and closes #2869
2023-02-14 22:24:59 +00:00
Anders Kaseorg
2e41301520
Switch some quotes to backticks in errors ( #2889 )
...
Improves consistency with the style decision in #723 , I think.
2023-02-14 22:24:41 +00:00
Martin Fischer
3179fc110d
Disable many-to-one mapping for now
2023-02-14 16:16:12 -05:00
Martin Fischer
03ae0118b7
many-to-one 9/9: Update table generation
2023-02-14 16:16:12 -05:00
Martin Fischer
05176890ee
many-to-one 8/9: Drop codes from registry
...
This commit was generated by running:
fastmod --accept-all '[A-Z]+[0-9]+ => ' '' crates/ruff/src/registry.rs
2023-02-14 16:16:12 -05:00
Martin Fischer
849b947b3e
many-to-one 7/9: Update JSON schema
2023-02-14 16:16:12 -05:00
Martin Fischer
c314e10e54
many-to-one 6/9: Implement ruff_macros::map_codes
2023-02-14 16:16:12 -05:00
Martin Fischer
9eda286dcd
many-to-one 5/9: Generate codes.rs from registry.rs
...
# This commit was generated by running the following Python code:
# (followed by `sed -Ei 's/(mod registry;)/\1mod codes;/' crates/ruff/src/lib.rs`
# and `cargo fmt`).
import json
import re
import subprocess
def parse_registry():
file = open('crates/ruff/src/registry.rs')
rules = []
while next(file) != 'ruff_macros::register_rules!(\n':
continue
while (line := next(file)) != ');\n':
line = line.strip().rstrip(',')
if line.startswith('//') or line.startswith('#['):
rules.append(line)
continue
code, path = line.split(' => ')
name = path.rsplit('::')[-1]
rules.append((code, name))
while (line := next(file)) != 'pub enum Linter {\n':
continue
prefixes = []
prefix2linter = []
while (line := next(file).strip()) != '}':
if line.startswith('//'):
continue
if line.startswith('#[prefix = '):
prefixes.append(line.split()[-1].strip('"]'))
else:
for prefix in prefixes:
prefix2linter.append((prefix, line.rstrip(',')))
prefixes.clear()
prefix2linter.sort(key = lambda t: len(t[0]), reverse=True)
return rules, prefix2linter
rules, prefix2linter = parse_registry()
def parse_code(code):
prefix = re.match('[A-Z]+', code).group()
if prefix in ('E', 'W'):
return 'Pycodestyle', code
for prefix, linter in prefix2linter:
if code.startswith(prefix):
return linter, code[len(prefix) :]
assert False
text = '''
use crate::registry::{Linter, Rule};
pub fn code_to_rule(linter: Linter, code: &str) -> Option<Rule> {
#[allow(clippy::enum_glob_use)]
use Linter::*;
Some(match (linter, code) {
'''
for entry in rules:
if isinstance(entry, str):
if entry.startswith('//'):
text += '\n' + entry
else:
text += entry
else:
namespace, code = parse_code(entry[0])
text += f'({namespace}, "{code}") => Rule::{entry[1]},'
text += '\n'
text += '''
_ => return None,
})
}
'''
with open('crates/ruff/src/codes.rs', 'w') as f:
f.write(text)
2023-02-14 16:16:12 -05:00
Martin Fischer
65a3461519
many-to-one 4/9: Rename define_rule_mapping! to register_rules!
...
Currently the define_rule_mapping! macro generates both the Rule enum as
well as the RuleCodePrefix enum and the mapping between the two. After
this commit series the macro will only generate the Rule enum and the
RuleCodePrefix enum and the mapping will be generated by a new map_codes
proc macro, so we rename the macro now to fit its new purpose.
2023-02-14 16:16:12 -05:00
Martin Fischer
1b8d2df3bf
many-to-one 3/9: Update RuleSelector::short_code
...
Same reasoning as for the previous commit ... one &'static str
becomes two &'static str because we split the RuleCodePrefix enum.
Note that the .unwrap() we have to add now, will actually
be removed in the 6th commit.
2023-02-14 16:16:12 -05:00
Martin Fischer
179ead0157
many-to-one 2/9: Newtype Rule::noqa_code return type
...
Rule::noqa_code previously return a single &'static str,
which was possible because we had one enum listing all
rule code prefixes. This commit series will however split up
the RuleCodePrefix enum into several enums ... so we'll end up
with two &'static str ... this commit wraps the return type
of Rule::noqa_code into a newtype so that we can easily change
it to return two &'static str in the 6th commit of this series.
2023-02-14 16:16:12 -05:00
Martin Fischer
d451c7a506
many-to-one 1/9: Rename Rule::code to Rule::noqa_code
...
Post this commit series several codes can be mapped to a single rule,
this commit therefore renames Rule::code to Rule::noqa_code,
which is the code that --add-noqa will add to ignore a rule.
2023-02-14 16:16:12 -05:00
Martin Fischer
502ce80c91
many-to-one 0/9: Introduce RuleSelector::Linter variant
...
We want to remove the variants denoting whole Linters
from the RuleCodePrefix enum, so we have to introduce
a new RuleSelector::Linter variant.
2023-02-14 16:16:12 -05:00
Charlie Marsh
49d22d8fe2
Ignore non-imperative-mood in Google docstring convention ( #2900 )
2023-02-14 20:42:20 +00:00
Chris May
08e0b76587
Add headers to configutation options ( #2896 )
...
This completes the word from the discussion in #2643 , adding headers to clarify the `pyproject.toml` and `ruff.toml` sections.
2023-02-14 13:45:59 -05:00
Charlie Marsh
f7515739ac
Improve consistency of some rule docs ( #2887 )
2023-02-14 04:36:37 +00:00
Sawbez
53e810ed3e
[docs] Add docs for the entirety of flake8-builtins ( #2840 )
2023-02-14 04:30:30 +00:00
Charlie Marsh
66a195f805
Extend B904 to else branches ( #2886 )
2023-02-14 03:58:15 +00:00
Jeremiah England
b8483975a4
docs(SIM114): fix typo in example Python code ( #2884 )
2023-02-14 03:23:19 +00:00
Charlie Marsh
4dd2032687
Unversion unpublished crates ( #2882 )
2023-02-14 03:03:49 +00:00
Charlie Marsh
c6c15d5cf9
Avoid unnecessary-else violations in elif branches ( #2881 )
...
Long-time source of confusion -- two reports over 1800 issues apart.
Closes #1035 .
Closes #2879 .
2023-02-14 02:51:12 +00:00
Charlie Marsh
2bf7b35268
Re-enable custom allocators ( #2876 )
2023-02-14 02:37:22 +00:00
Charlie Marsh
6d1adc85fc
Remove autofix for prefer-type-error ( #2880 )
2023-02-14 02:26:22 +00:00
Martin Fischer
02285c18d1
Remove autogenerated docs/rules/*.md files
2023-02-13 19:34:06 -05:00
Martin Fischer
8120d7c974
Change rule page links in README from GitHub to beta.ruff.rs
2023-02-13 19:34:06 -05:00
Martin Fischer
c858804ed4
refactor: Move docs/ gitignores to docs/.gitignore
2023-02-13 19:34:06 -05:00
Anders Kaseorg
b9d075c252
Alphabetize flake8-raise and flake8-self in documentation ( #2871 )
2023-02-13 18:03:09 -05:00
Charlie Marsh
7627e840c9
Avoid noqa removal upon unhandled syntax errors ( #2864 )
2023-02-13 10:37:55 -05:00
Charlie Marsh
3c03e2cb2e
Rename flake8-django rules to match convention ( #2861 )
2023-02-13 15:30:04 +00:00
Charlie Marsh
aeae63b7ea
Avoid false-positives for runtime-types in type checking blocks ( #2863 )
2023-02-13 10:26:34 -05:00
Charlie Marsh
7be17c5f1e
Avoid false-positives with multi-byte characters in B005 ( #2862 )
2023-02-13 15:07:55 +00:00
Charlie Marsh
6128346b08
Re-show --target-version on CLI interface ( #2859 )
2023-02-13 15:04:11 +00:00
Charlie Marsh
1705574e75
Handle multiple receiver decorators in receiver-decorator ( #2858 )
2023-02-13 14:57:11 +00:00
Charlie Marsh
15f65fa8d6
Run cargo dev generate-all ( #2860 )
2023-02-13 14:55:44 +00:00
Ville Skyttä
d1cf0ee52b
Remove "blanket" from RUF100 README message ( #2844 )
2023-02-13 14:43:35 +00:00
Florian Best
32520ff07f
ci(gitignore): ignore VIM files ( #2856 )
2023-02-13 09:29:53 -05:00
Ville Skyttä
3659236580
Remove no longer needed setup.py INP001 ignore ( #2846 )
2023-02-13 09:00:35 -05:00
Charlie Marsh
dde69d50b5
Move more dependencies into workspace dependencies ( #2842 )
2023-02-13 04:19:26 +00:00
Charlie Marsh
67198ce7b3
Revert "Run release on tag creation"
...
This reverts commit c21a5912b9 .
2023-02-12 23:11:31 -05:00
Charlie Marsh
c21a5912b9
Run release on tag creation
2023-02-12 22:33:01 -05:00
Charlie Marsh
48a5cd1dd9
Revert "perf: Use custom allocator ( #2768 )" ( #2841 )
...
This is causing wheel creation to fail on some of our more exotic build targets: https://github.com/charliermarsh/ruff/actions/runs/4159524132 .
Let's figure out how to gate appropriately, but for now, reverting to get the release out.
2023-02-12 22:31:34 -05:00
Charlie Marsh
63f3d5e610
Update pre-commit instructions ( #2838 )
2023-02-13 00:06:40 +00:00
Charlie Marsh
7dab4807d0
Allow compound statements of single ellipsis ( #2837 )
...
This allows `class C: ...`-style compound statements in stub files.
Closes #2835 .
2023-02-12 18:56:43 -05:00
Charlie Marsh
83f6e52c92
Bump version to 0.0.246 ( #2834 )
2023-02-12 23:39:51 +00:00
Charlie Marsh
5ce7ce5bc3
Check-in updated snapshot for SIM111 ( #2836 )
2023-02-12 23:37:52 +00:00
Florian Best
749d197119
docs(SIM114): fix typo in python code ( #2833 )
2023-02-12 18:35:29 -05:00
Charlie Marsh
46c184600f
Include package inference during --add-noqa command ( #2832 )
2023-02-12 22:45:39 +00:00
Charlie Marsh
e2051ef72f
Use smarter inversion for comparison checks ( #2831 )
2023-02-12 22:39:29 +00:00
Charlie Marsh
1abaece9ed
Fix unused multi-assignments in a single pass ( #2829 )
2023-02-12 22:28:03 +00:00
Charlie Marsh
8b35b052b8
Avoid duplicates in if-with-same-arms ( #2827 )
2023-02-12 22:22:19 +00:00
Charlie Marsh
5a34504149
Implement ComparableStmt ( #2826 )
2023-02-12 22:00:01 +00:00
trag1c
0e53ddc2b3
Added Tables of Contents for CONTRIBUTING.md and CODE_OF_CONDUCT.md ( #2824 )
2023-02-12 16:38:18 -05:00
Colin Delahunty
1f07ad6e61
[flake8-simplify]: combine-if-conditions ( #2823 )
2023-02-12 21:00:32 +00:00
Charlie Marsh
1666e8ba1e
Add a --show-fixes flag to include applied fixes in output ( #2707 )
2023-02-12 20:48:01 +00:00
Charlie Marsh
c399b3e6c1
Run cargo dev generate-all ( #2822 )
2023-02-12 19:11:49 +00:00
Charlie Marsh
9089ef74bc
Upgrade RustPython ( #2821 )
2023-02-12 18:45:59 +00:00
Martin Fischer
28c9263722
Automatically linkify option references in rule documentation
...
Previously the rule documentation referenced configuration options
via full https:// URLs, which was bad for several reasons:
* changing the website would mean you'd have to change all URLs
* the links didn't work when building mkdocs locally
* the URLs showed up in the `ruff rule` output
* broken references weren't detected by our CI
This commit solves all of these problems by post-processing the
Markdown, recognizing sections such as:
## Options
* `flake8-tidy-imports.ban-relative-imports`
`cargo dev generate-all` will automatically linkify such references
and panic if the referenced option doesn't exist.
Note that the option can also be linked in the other Markdown sections
via e.g. [`flake8-tidy-imports.ban-relative-imports`] since
the post-processing code generates a CommonMark link definition.
Resolves #2766 .
2023-02-12 13:19:11 -05:00
Martin Fischer
fc4c927788
refactor: Introduce ConfigurationOptions::get method
2023-02-12 13:19:11 -05:00
Zeddicus414
26f39cac2f
Add PD002 use-of-inplace-argument documentation ( #2799 )
2023-02-12 18:10:34 +00:00
Simon Brugman
02897a141b
[flake8-tidy-imports] add documentation for banned-api ( #2819 )
2023-02-12 18:09:39 +00:00
Nyakku Shigure
fc465cc2af
[flake8-pyi]: add rules for unrecognized platform check (PYI007, PYI008) ( #2805 )
...
Add two [flake8-pyi](https://github.com/PyCQA/flake8-pyi ) rules (Y007, Y008). ref: #848
The specifications are described in [PEP 484 - Version and platform checking](https://peps.python.org/pep-0484/#version-and-platform-checking )
The original implementation in flake8-pyi is shown below.
- Implemention: 66f28a4407/pyi.py (L1429-L1443)
- Tests: 66f28a4407/tests/sysplatform.pyi
2023-02-12 18:02:38 +00:00
Charlie Marsh
ca8a122889
Add flake8-django to LICENSE ( #2820 )
2023-02-12 17:51:40 +00:00
Karol Onyśko
6769a5bce7
Implement flake8-django plugin rules ( #2586 )
2023-02-12 17:47:59 +00:00
Zeddicus414
fda93c6245
Add E722 bare-except documentation ( #2796 )
2023-02-12 16:51:32 +00:00
Charlie Marsh
099d5414f2
Allow non-verbose raise when cause is present ( #2816 )
...
The motivating issue here is of the following form:
```py
try:
raise Exception("We want to hide this error message")
except Exception:
try:
raise Exception("We want to show this")
except Exception as exc:
raise exc from None
```
However, I think we should avoid this if _any_ cause is present, since causes require a named exception.
Closes #2814 .
2023-02-12 16:48:13 +00:00
Charlie Marsh
9ddd5e4cfe
Allow private accesses on super calls ( #2815 )
2023-02-12 16:11:25 +00:00
trag1c
b8835c2e35
Added MkDocs section to CONTRIBUTING.md ( #2803 )
2023-02-12 16:07:24 +00:00
Simon Brugman
1d4422f004
[flake8-comprehensions] improve autofix for C401, C402 and C417 ( #2806 )
2023-02-12 16:03:37 +00:00
Simon Brugman
2dccb7611a
[flake8-comprehensions] bugfix for C413 autofix ( #2804 )
2023-02-12 15:56:07 +00:00
Simon Brugman
f8ac6d7bf0
fix: script add_plugin.py test import ( #2807 )
2023-02-12 09:58:23 -05:00
Simon Brugman
0123425be1
[flake8-comprehensions] autofix C414 and C417 + bugfix ( #2693 )
...
Closes https://github.com/charliermarsh/ruff/issues/2262 and closes https://github.com/charliermarsh/ruff/issues/2423
Fixes bug where some cases generated duplicated violations (see https://github.com/charliermarsh/ruff/pull/2732#issuecomment-1426397842 )
2023-02-12 05:20:42 +00:00
Charlie Marsh
c53f91d943
Remove public re-export of commands ( #2801 )
2023-02-12 04:59:35 +00:00
Charlie Marsh
4a12ebb9b1
Improve f-string-missing-placeholders documentation ( #2800 )
2023-02-12 04:58:24 +00:00
Martin Fischer
0e4d5eeea7
Implement config subcommand
...
The synopsis is as follows.
List all top-level config keys:
$ ruff config
allowed-confusables
builtins
cache-dir
... etc.
List all config keys in a specific section:
$ ruff config mccabe
max-complexity
Describe a specific config option:
$ ruff config mccabe.max-complexity
The maximum McCabe complexity to allow before triggering `C901` errors.
Default value: 10
Type: int
Example usage:
```toml
# Flag errors (`C901`) whenever the complexity level exceeds 5.
max-complexity = 5
```
2023-02-11 23:43:09 -05:00
Martin Fischer
bbe44360e8
refactor: Move name out of OptionField & OptionGroup
2023-02-11 23:43:09 -05:00
Martin Fischer
37e80d98ab
refactor: Reorder members in ruff::settings::options_base
2023-02-11 23:43:09 -05:00
Charlie Marsh
306393063d
Refactor generator to use Astor-derived precedence levels ( #2798 )
2023-02-12 04:30:16 +00:00
Martin Fischer
f5a3c90288
Rename new ruff rule output format to "pretty"
...
The new `ruff rule` output format introduced in
551b810aeb doesn't print Markdown but
rather some rich text with escape sequences for colors and links,
it's actually the "text" format that prints Markdown, so naming the new
format "markdown" is very confusing. This commit therefore renames it to
"pretty".
This isn't a breaking change since there hasn't been a release yet.
2023-02-11 23:23:37 -05:00
Charlie Marsh
8289ede00f
Use output-stdout pattern for linter command ( #2794 )
2023-02-12 03:09:03 +00:00
Charlie Marsh
77e65c9ff5
Split commands.rs into separate files ( #2792 )
2023-02-12 02:58:13 +00:00
Charlie Marsh
d827a9156e
Add documentation on enabling autocompletion ( #2791 )
2023-02-12 02:51:50 +00:00
Charlie Marsh
418808895e
Add docs for f-string-missing-placeholders and unused-variable ( #2790 )
2023-02-12 02:48:36 +00:00
Charlie Marsh
ac4e212ed2
Move Wasm clippy to its own job ( #2789 )
2023-02-12 02:41:28 +00:00
Nick Pope
551b810aeb
Add rendering of rule markdown for terminal output ( #2747 )
...
Add rendering of rule markdown for terminal output
This is achieved by making use of the `mdcat` crate.
See the following links for details:
- https://crates.io/crates/mdcat
- https://github.com/swsnr/mdcat
- https://docs.rs/mdcat/latest/mdcat/
2023-02-12 02:32:45 +00:00
Charlie Marsh
1b61d4e18b
Support unused variable removal in multi-assignment statements ( #2786 )
2023-02-12 00:53:11 +00:00
Charlie Marsh
752c0150e1
Improve unused-variable autofixes for with statements ( #2785 )
2023-02-12 00:38:14 +00:00
Charlie Marsh
81651a8479
Respect continuations in noqa enforcement ( #2783 )
2023-02-11 23:29:37 +00:00
Charlie Marsh
86d0749ed7
Use consistent formatting for lint-failure messages ( #2782 )
2023-02-11 22:52:18 +00:00
Charlie Marsh
19fc410683
Remove raw string from hardcoded-sql-expression ( #2780 )
2023-02-11 20:05:57 +00:00
Charlie Marsh
5a70a573cd
Avoid treating deferred string annotations as required-at-runtime ( #2779 )
2023-02-11 15:00:08 -05:00
Charlie Marsh
74731a3456
Fix reference to ban-relative-imports setting ( #2776 )
2023-02-11 18:34:25 +00:00
Micha Reiser
863e39fe5f
perf: Use custom allocator ( #2768 )
...
This PR replaces the system allocator with a custom allocator to improve performance:
* Windows: mimalloc
* Unix: tikv-jemallocator
## Performance:
* Linux
* `cpython --no-cache`: 208.8ms -> 190.5ms
* `cpython`: 32.8ms -> 31ms
* Mac:
* `cpython --no-cache`: 436.3ms -> 380ms
* `cpython`: 40.9ms -> 39.6ms
* Windows:
* `cpython --no-cache`: 367ms -> 268ms
* `cpython`: 92.5ms -> 92.3ms
## Size
* Linux: +5MB from 13MB -> 18MB (I need to double check this)
* Mac: +0.7MB from 8.3MB-> 9MB
* Windows: -0.16MB from 8.29MB -> 8.13MB (that's unexpected)
2023-02-11 13:26:07 -05:00
Charlie Marsh
d0f9ee33ec
Remove erroneous print statements
2023-02-11 12:45:40 -05:00
Charlie Marsh
1cf3d880a7
Don't treat all future import accesses as non-runtime ( #2774 )
...
This was just an oversight and misunderstanding on my part. We had some helpful tests, but I misunderstood the "right" behavior so thought they were passing.
Closes #2761 .
2023-02-11 12:44:15 -05:00
Charlie Marsh
97dcb738fa
Run cargo dev generate-all
2023-02-11 12:43:48 -05:00
Charlie Marsh
ffb4e89a98
Remove multiple-statements-on-one-line-def (E704) ( #2773 )
2023-02-11 12:34:21 -05:00
Charlie Marsh
43b7ee215c
Ignore colon-after-lambda in compound statement rules ( #2771 )
2023-02-11 12:22:53 -05:00
Michał Mrówka
77099dcd4d
implemented option lines-between-types for isort ( #2762 )
...
Fixes #2585
Add support for the isort option [lines_between_types](https://pycqa.github.io/isort/docs/configuration/options.html#lines-between-types )
2023-02-11 12:17:37 -05:00
Martin Fischer
70ff65154d
Rename function-is-too-complex to complex-structure
2023-02-11 12:05:17 -05:00
Martin Fischer
7db6a2d6d4
Rename rules containing PEP reference in name
2023-02-11 12:05:17 -05:00
Martin Fischer
42924c0d9a
Rename a bunch of pydocstyle rules
2023-02-11 12:05:17 -05:00
Martin Fischer
31d00936ee
Drop no- from no-unnecessary-* rule names
2023-02-11 12:05:17 -05:00
Martin Fischer
c3c5d9a852
Rename nested-if-statements to collapsible-if
2023-02-11 12:05:17 -05:00
Martin Fischer
7e5c19385c
Rename return-bool-condition-directly to needless-bool
2023-02-11 12:05:17 -05:00
Simon Brugman
5b54325c81
enable navigation in footer in docs ( #2760 )
2023-02-11 05:08:33 -05:00
trag1c
e6538a7969
Added logo and favicon for mkdocs ( #2757 )
2023-02-10 23:34:47 -05:00
Charlie Marsh
24faabf1f4
Bump version to 0.0.245
2023-02-10 22:15:27 -05:00
Charlie Marsh
9b0a160239
Only update docs on release ( #2755 )
2023-02-10 22:14:50 -05:00
Charlie Marsh
9fd29e2c54
Mention default in relative-imports doc
2023-02-10 22:12:22 -05:00
Simon Brugman
e83ed0ecba
Implement autofix for relative imports (TID252) ( #2739 )
2023-02-10 22:05:47 -05:00
Charlie Marsh
dadbfea497
Flag private member accesses on calls et al ( #2753 )
2023-02-10 19:23:22 -05:00
Nick Pope
9f84c497f9
Adjust heading level in rule documentation ( #2749 )
2023-02-10 19:10:42 -05:00
Martin Fischer
0ec25d1514
Rename dynamically-typed-expression to any-type ( #2751 )
2023-02-10 19:02:31 -05:00
Charlie Marsh
6a87c99004
Use explicit fields for implicit-namespace-package
2023-02-10 18:09:30 -05:00
Charlie Marsh
c8f60c9588
Improve implicit-namespace-package documentation
2023-02-10 18:06:48 -05:00
Charlie Marsh
113610a8d4
Improve hardcoded-sql-expression documentation
2023-02-10 18:03:01 -05:00
Charlie Marsh
6376e5915e
Improve dynamically-typed-expression documentation
2023-02-10 17:55:26 -05:00
Charlie Marsh
3d8fb5be20
Rewrite documentation for yield-in-init ( #2748 )
2023-02-10 17:49:55 -05:00
Charlie Marsh
0040991778
Respect NO_COLOR flags in --show-source ( #2750 )
2023-02-10 17:27:40 -05:00
Charlie Marsh
acb70520f8
Add colored environment variables to README ( #2746 )
2023-02-10 17:06:02 -05:00
Charlie Marsh
6eb9268675
Allow named unicodes in bidirectional escape check ( #2710 )
2023-02-10 16:59:28 -05:00
Charlie Marsh
e5f5142e3e
Improve yield-in-init documentation
2023-02-10 16:47:44 -05:00
Charlie Marsh
98d5ffb817
Fix __init__.py-to-__init__ in documentation
2023-02-10 16:30:36 -05:00
Charlie Marsh
3f20f73413
Use function_type::classify for yield-in-init ( #2742 )
2023-02-10 16:19:45 -05:00
tomecki
a5e42d2f7c
pylint: E0100 yield-in-init ( #2716 )
2023-02-10 16:15:15 -05:00
Charlie Marsh
0bc1f68111
Only trigger compound statements after select keywords ( #2737 )
2023-02-10 15:21:06 -05:00
Charlie Marsh
d2b09d77c5
Only validate __all__ bindings for global scope ( #2738 )
2023-02-10 15:16:21 -05:00
Charlie Marsh
0377834f9f
Mark __all__ members as used at end-of-scope ( #2733 )
2023-02-10 14:32:05 -05:00
Charlie Marsh
3d650f9dd6
Relax conditions in bad-string-format-type ( #2731 )
2023-02-10 14:25:59 -05:00
Charlie Marsh
a72590ecde
Expand S110 and S112 ranges to include entire exception handler ( #2729 )
2023-02-10 13:27:18 -05:00
Charlie Marsh
812b227334
Avoid flagging typed exceptions in tuples ( #2728 )
2023-02-10 13:24:45 -05:00
Martin Fischer
6f58717ba4
refactor: Stop including Rule::code() in pycodestyle .snap filenames
2023-02-10 13:15:47 -05:00
Florian Best
8aab96fb9e
feat(isort): Implement known-local-folder ( #2657 )
2023-02-10 13:15:34 -05:00
Nick Pope
9e6f7153a9
Handle more functions that never return in RET503 ( #2719 )
2023-02-10 12:09:05 -05:00
Peter Pentchev
cda2ff0b18
Handle functions that never return in RET503 ( #2701 )
2023-02-10 09:28:34 -05:00
Martin Fischer
ec63658250
Disallow rule names starting with avoid-*
2023-02-10 09:25:29 -05:00
Martin Fischer
1a97de0b01
Disallow rule names starting with uses-*
2023-02-10 09:25:29 -05:00
Martin Fischer
1cbe48522e
Disallow rule names ending in *-used
2023-02-10 09:25:29 -05:00
Martin Fischer
bfbde537af
Disallow rule names starting with do-not-*
2023-02-10 09:25:29 -05:00
Martin Fischer
cba91b758b
Add test for rule names
2023-02-10 09:25:29 -05:00
Martin Fischer
0bab642f5a
Describe rule naming convention in CONTRIBUTING.md
2023-02-10 09:25:29 -05:00
Martin Fischer
bd09a1819f
Drop unused once_cell dependency from ruff_macros
2023-02-10 09:25:29 -05:00
Martin Fischer
682d206992
refactor: Reduce code duplication
2023-02-10 08:24:22 -05:00
Martin Fischer
c32441e4ab
refactor: Use format! keyword arguments
2023-02-10 08:24:22 -05:00
Martin Fischer
6f16f1c39b
refactor: Reduce code duplication
2023-02-10 08:24:22 -05:00
Martin Fischer
9011456aa1
refactor: Simplify attribute handling in rule_code_prefix
...
if_all_same(codes.values().cloned()).unwrap_or_default()
was quite unreadable because it wasn't obvious that codes.values() are
the prefixes. It's better to introduce another Map rather than having
Maps within Maps.
2023-02-10 08:24:22 -05:00
Martin Fischer
fa191cceeb
refactor: Avoid implicit precondition
2023-02-10 08:24:22 -05:00
Charlie Marsh
ac6c3affdd
Remove public Rust API ( #2709 )
2023-02-09 23:16:49 -05:00
Charlie Marsh
9a018c1650
Import AutofixKind from violation
2023-02-09 23:06:02 -05:00
Charlie Marsh
0aef5c67a3
Remove src/registry.rs
2023-02-09 23:04:28 -05:00
Charlie Marsh
a048594416
Gate Path.readlink() behind Python 3.9+ guard ( #2708 )
2023-02-09 22:57:31 -05:00
Charlie Marsh
5437f1299b
Remove lifetimes from Printer ( #2704 )
2023-02-09 21:44:15 -05:00
Charlie Marsh
41c0608a69
Add test module a test-only module ( #2703 )
2023-02-09 21:28:10 -05:00
messense
eb0d42187f
Manage LibCST and RustPython with cargo workspace dependencies ( #2700 )
2023-02-09 20:49:50 -05:00
Colin Delahunty
48daa0f0ca
[pylint]: bad-string-format-type ( #2572 )
2023-02-09 20:08:56 -05:00
Charlie Marsh
417fe4355f
Add colors to statistics output ( #2699 )
2023-02-09 19:40:29 -05:00
Florian Best
a129181407
feat(cli): let --statistics show fixable codes ( #2659 )
2023-02-09 19:36:31 -05:00
Matt Oberle
fc628de667
Implement bandit's 'hardcoded-sql-expressions' S608 ( #2698 )
...
This is an attempt to implement `bandit` rule `B608` (renamed here `S608`).
- https://bandit.readthedocs.io/en/latest/plugins/b608_hardcoded_sql_expressions.html
The rule inspects strings constructed via `+`, `%`, `.format`, and `f""`.
- `+` and `%` via `BinOp`
- `.format` via `Call`
- `f""` via `JoinedString`
Any SQL-ish strings that use Python string formatting are flagged.
The expressions and targeted expression types for the rule come from here:
- 7104b336d3/bandit/plugins/injection_sql.py
> Related Issue: https://github.com/charliermarsh/ruff/issues/1646
2023-02-09 19:28:17 -05:00
Charlie Marsh
9e2418097c
Run cargo dev generate-all
2023-02-09 19:14:02 -05:00
Charlie Marsh
d4e5639aaf
Add flake8-pyi to CONTRIBUTING.md
2023-02-09 19:04:55 -05:00
Steve Dignam
67e58a024a
Add flake8-pyi with one rule ( #2682 )
...
Add basic scaffold for [flake8-pyi](https://github.com/PyCQA/flake8-pyi ) and the first rule, Y001
rel: https://github.com/charliermarsh/ruff/issues/848
2023-02-09 19:03:11 -05:00
Charlie Marsh
233be0e074
Suppress parse errors with explicit # noqa: E999 directives ( #2697 )
2023-02-09 18:24:19 -05:00
Nick Pope
7750087f56
Remove duplicate documentation for TRY002 ( #2692 )
2023-02-09 12:08:00 -05:00
Charlie Marsh
7d5fb0de8a
Add documentation for mccabe, isort, and flake8-annotations ( #2691 )
2023-02-09 11:56:18 -05:00
Charlie Marsh
8a98cfc4b8
Treat re-exported annotations as used-at-runtime ( #2689 )
2023-02-09 11:22:15 -05:00
Charlie Marsh
54d1719424
Hide rule configuration settings on CLI ( #2687 )
2023-02-09 11:13:04 -05:00
Charlie Marsh
0f622f0126
Upgrade RustPython to pull in newline-handling optimizations ( #2688 )
2023-02-09 11:12:43 -05:00
Charlie Marsh
739a92e99d
Implement compound-statements (E701, E702, E703, E704) ( #2680 )
2023-02-08 22:57:39 -05:00
Charlie Marsh
5a07c9f57c
Only include rule links once in README ( #2678 )
2023-02-08 21:48:05 -05:00
Colin Delahunty
31027497c6
[flake8-bandit]: try-except-continue ( #2674 )
2023-02-08 21:44:01 -05:00
Charlie Marsh
dabfdf718e
Mark flake8-simplify rules as unfixable in non-fixable cases ( #2676 )
2023-02-08 21:28:28 -05:00
Charlie Marsh
5829bae976
Support callable decorators in classmethod_decorators et al ( #2675 )
2023-02-08 21:11:36 -05:00
Charlie Marsh
ff3665a24b
Mark RUF005 as fixable
2023-02-08 18:02:33 -05:00
Charlie Marsh
125615af12
Bump version to 0.0.244
2023-02-08 17:28:59 -05:00
Charlie Marsh
6339f8e009
Use separate exit codes for fatal errors vs. lint errors ( #2670 )
2023-02-08 15:21:15 -05:00
Charlie Marsh
81abc5d7d8
Move error and warning messages into log macro ( #2669 )
2023-02-08 14:39:09 -05:00
Charlie Marsh
75fad989f4
Add --exit-non-zero-on-fix ( #2668 )
2023-02-08 14:27:54 -05:00
Charlie Marsh
cb4a221905
Treat annotated assignments in class and module scopes as runtime ( #2667 )
2023-02-08 13:59:25 -05:00
Charlie Marsh
286d8c18dd
Remove ExprKind::Call from call path collection ( #2666 )
2023-02-08 13:35:18 -05:00
Florian Best
124461bddf
test(UP003): let type reference be the builtin ( #2664 )
2023-02-08 12:44:37 -05:00
Charlie Marsh
7482a4a5b8
Avoid false-positive in chained type calls ( #2663 )
2023-02-08 12:18:36 -05:00
Charlie Marsh
9f9f25ff7c
Accommodate multiple @pytest.mark.parametrize decorators ( #2662 )
2023-02-08 11:13:24 -05:00
Nuno Mendes
9cd1bf9c03
doc: add documentation for TRY002 ( #2655 )
2023-02-08 11:04:31 -05:00
Florian Best
3862dc2626
docs: use new command line arguments ( #2658 )
2023-02-08 10:36:53 -05:00
Charlie Marsh
2a0927a5ef
Update Discord link
2023-02-08 04:36:59 -05:00
Charlie Marsh
824c0d2680
Implement whitespace-before-comment (E261, E262, E265, E266) ( #2654 )
2023-02-07 23:41:32 -05:00
Charlie Marsh
f5efdd058e
Implement whitespace-around-keywords (E271, E272, E273, E274) ( #2653 )
2023-02-07 22:31:13 -05:00
Charlie Marsh
4c35feaa18
Add documentation for eradicate, flake8-import-conventions, and flake8-no-pep420 ( #2652 )
2023-02-07 22:19:21 -05:00
Charlie Marsh
8261d0656e
Disable autofix for flake8-print rules ( #2651 )
2023-02-07 21:38:57 -05:00
Charlie Marsh
a9aa96b24f
Add documentation for flake8-quotes rules ( #2650 )
2023-02-07 21:20:24 -05:00
Charlie Marsh
367f115d83
Add color to fixable error asterisk ( #2647 )
2023-02-07 19:12:18 -05:00
Charlie Marsh
56398e0002
Tweak format for rule explanations ( #2645 )
2023-02-07 19:02:41 -05:00
Ville Skyttä
4b49fd9494
Ignore all non-.py wrt. implicit namespace package ( #2640 )
...
It's not only `.pyi` that should be exempt for this, but also for example scripts which don't have an extension, explicitly passed in command line args.
2023-02-07 18:21:59 -05:00
Charlie Marsh
271e4fda8c
Create per-rule pages and link from README ( #2644 )
2023-02-07 18:15:05 -05:00
Charlie Marsh
f1cdd108e6
Derive explanation method on Rule struct via rustdoc ( #2642 )
...
```console
❯ cargo run rule B017
Finished dev [unoptimized + debuginfo] target(s) in 0.13s
Running `target/debug/ruff rule B017`
no-assert-raises-exception
Code: B017 (flake8-bugbear)
### What it does
Checks for `self.assertRaises(Exception)`.
## Why is this bad?
`assertRaises(Exception)` can lead to your test passing even if the
code being tested is never executed due to a typo.
Either assert for a more specific exception (builtin or custom), use
`assertRaisesRegex` or the context manager form of `assertRaises`.
```
2023-02-07 17:23:29 -05:00
Charlie Marsh
8fd29b3b60
Remove dependency on "unparse" feature ( #2641 )
2023-02-07 17:23:09 -05:00
Charlie Marsh
e427171323
Unify imports from rustpython_parser::ast ( #2639 )
2023-02-07 16:54:50 -05:00
Charlie Marsh
be08384fb0
Run cargo dev generate-all
2023-02-07 16:48:06 -05:00
Charlie Marsh
2f7f4943e3
Rename some local variables
2023-02-07 16:24:53 -05:00
Charlie Marsh
67e9ff7cc8
Reorder imports ( #2638 )
2023-02-07 16:22:47 -05:00
Charlie Marsh
0355ba571e
Skip ternary fixes for yields and awaits ( #2637 )
2023-02-07 15:18:52 -05:00
Charlie Marsh
38db7fd114
Avoid boolean-trap errors in __setitem__ ( #2636 )
2023-02-07 15:04:33 -05:00
Charlie Marsh
8ee51eb5c6
Treat @staticmethod as higher-precedence than ABC ( #2635 )
2023-02-07 14:57:03 -05:00
Aarni Koskela
2bc16eb4e3
flake8-annotations: add ignore-fully-untyped ( #2128 )
...
This PR adds a configuration option to inhibit ANN* violations for functions that have no other annotations either, for easier gradual typing of a large codebase.
2023-02-07 11:35:57 -05:00
Charlie Marsh
4e36225145
Avoid no-unnecessary-dict-kwargs errors with reserved keywords ( #2628 )
2023-02-07 11:25:09 -05:00
Charlie Marsh
850069d0aa
Avoid non-recursion in nested typing function calls ( #2627 )
2023-02-07 11:21:49 -05:00
Charlie Marsh
9fa98ed90b
Accommodate pos-only arguments when checking self name ( #2626 )
2023-02-07 10:50:50 -05:00
Charlie Marsh
2b4ce78830
Delete unreferenced snapshots ( #2619 )
2023-02-06 23:22:41 -05:00
Colin Delahunty
7647cafe12
[pylint]: bidirectional-unicode ( #2589 )
2023-02-06 22:49:18 -05:00
Charlie Marsh
7686179318
Remove unused src/registry.rs
2023-02-06 22:43:25 -05:00
Charlie Marsh
bf718fdf26
Bump Ruff version to 0.0.243
2023-02-06 21:22:54 -05:00
Steve Dignam
3b3466f6da
Add flake8-pie single_starts_ends_with ( #2616 )
2023-02-06 21:22:32 -05:00
Charlie Marsh
f981f491aa
Support ignore-names for all relevant pep8-naming rules ( #2617 )
2023-02-06 21:14:55 -05:00
Charlie Marsh
95fef43c4d
Add some additional tests for relative imports
2023-02-06 21:13:23 -05:00
Charlie Marsh
097c679cf3
Support relative paths for typing-modules ( #2615 )
2023-02-06 19:51:37 -05:00
Charlie Marsh
3bca987665
Avoid removing quotes from runtime annotations ( #2614 )
2023-02-06 18:15:19 -05:00
Ville Skyttä
60ee1d2c17
fix(pep8-naming): typing.NamedTuple and typing.TypedDict treatment ( #2611 )
2023-02-06 17:11:37 -05:00
Charlie Marsh
2dd04dd6a3
Check in updated snapshot
2023-02-06 16:34:47 -05:00
Charlie Marsh
e59b75d31b
Bump version to 0.0.242
2023-02-06 16:25:29 -05:00
Charlie Marsh
610f150dd1
Remove autofix from bad-str-strip-call; add suggestions instead ( #2610 )
2023-02-06 16:25:20 -05:00
Charlie Marsh
cee0d0abaa
Check in updated snapshot
2023-02-06 15:48:23 -05:00
Charlie Marsh
12ed1837ee
Ignore typos in snapshots ( #2609 )
2023-02-06 15:43:03 -05:00
Colin Delahunty
6272293180
[pylint]: bad-str-strip-call (With Autofix) ( #2570 )
2023-02-06 15:34:37 -05:00
Charlie Marsh
f8b8b05b80
Visit deferred assignments after deferred type annotations ( #2607 )
2023-02-06 14:40:41 -05:00
Charlie Marsh
79776c12e2
Allow blank line before sticky-comment functions in docstrings ( #2597 )
2023-02-05 18:48:29 -05:00
Charlie Marsh
7fa5ce8b63
Automatically remove empty type-checking blocks ( #2598 )
2023-02-05 18:46:07 -05:00
Charlie Marsh
f6864a96f6
Enable autofix for unnecessary-paren-on-raise-exception ( #2596 )
2023-02-05 18:19:27 -05:00
Charlie Marsh
291ef9856a
Remove unnecessary super_args.rs ( #2594 )
2023-02-05 18:02:09 -05:00
Charlie Marsh
87d0aa5561
Move python into its own ruff_python crate ( #2593 )
2023-02-05 17:53:58 -05:00
Charlie Marsh
ecc9f5de99
Fix accidental setup.py changes
2023-02-05 17:18:11 -05:00
Charlie Marsh
f40b974206
Add a description of project structure ( #2590 )
2023-02-05 17:01:09 -05:00
Micha Reiser
cd8be8c0be
refactor: Introduce crates folder ( #2088 )
...
This PR introduces a new `crates` directory and moves all "product" crates into that folder.
Part of #2059 .
2023-02-05 16:47:48 -05:00
Charlie Marsh
e3dfa2e04e
Implement pycodestyle's logical line detection ( #1130 )
...
Along with the logical line detection, this adds 14 of the missing `pycodestyle` rules.
For now, this is all gated behind a `logical_lines` feature that's off-by-default, which will let us implement all rules prior to shipping, since we want to couple the release of these rules with new defaults and instructions.
2023-02-05 15:06:02 -05:00
Ville Skyttä
f03c8fff14
fix(commented-out-code): mypy and SPDX-License-Identifier false positives ( #2587 )
...
https://mypy.readthedocs.io/en/stable/inline_config.html#configuration-comment-format
https://spdx.github.io/spdx-spec/v2.3/using-SPDX-short-identifiers-in-source-files/#e2-format-for-spdx-license-identifier
2023-02-05 15:04:36 -05:00
Charlie Marsh
452b5a4b79
Propagate attribute-like macros in define_rule_mapping ( #2583 )
...
This enables us to feature-flag rules, like:
```rust
ruff_macros::define_rule_mapping!(
#[cfg(feature = "logical_lines")]
E111 => rules::pycodestyle::rules::IndentationWithInvalidMultiple,
...
)
```
2023-02-05 12:26:23 -05:00
Colin Delahunty
1e1dc3a7ed
[pyupgrade]: Removes quotes from annotations ( #2431 )
2023-02-05 09:43:09 -05:00
Charlie Marsh
84be1df9d5
Avoid infinite renames for unused-loop-control-variable ( #2581 )
2023-02-05 08:01:07 -05:00
Florian Best
6b3ae1a8e1
fix: fix syntax error in Python test COM81 ( #2575 )
2023-02-05 07:11:46 -05:00
Colin Delahunty
5275f6c90e
Allows UP030 to work better with *args and **kwargs ( #2568 )
2023-02-04 17:34:48 -05:00
Anders Kaseorg
6683ed49bc
Portably find ruff binary path from Python ( #2574 )
...
Prefer the version from a currently active virtualenv over a version
from `pip install --user`. Add the .exe extension on Windows, and
find the path for `pip install --user` correctly on Windows.
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
2023-02-04 17:19:27 -05:00
Chris Chan
ced55084db
Implement pylint's too-many-return-statements rule (PLR0911) ( #2564 )
2023-02-04 16:56:36 -05:00
Chris Chan
f8f36a7ee0
Implement pylint's too-many-branches rule (PLR0912) ( #2550 )
2023-02-04 16:38:03 -05:00
Charlie Marsh
4190031618
Run cargo fmt
2023-02-04 08:36:57 -05:00
Matteo Vitali
5a9258327b
Fix python module invocation ( #2563 )
2023-02-04 08:23:13 -05:00
Charlie Marsh
dd0145624b
Ignore direct root-children in implicit-namespace-package ( #2565 )
2023-02-04 08:21:24 -05:00
Charlie Marsh
7d4f0a8320
Bump Ruff version to 0.0.241
2023-02-03 19:25:12 -05:00
Charlie Marsh
4149bc7be8
Ignore direct source-children in implicit-namespace-package ( #2560 )
2023-02-03 19:20:27 -05:00
Pierre Sassoulas
e6316b185e
[pylint] Rename 'too-many-args' to 'too-many-arguments'
...
The actual name
2023-02-03 18:58:32 -05:00
Pierre Sassoulas
a2183be96e
[pylint] Rename constant-comparison to comparison-of-constant
...
The actual name
2023-02-03 18:58:32 -05:00
Pierre Sassoulas
df39a95925
[pylint] Rename use-sys-exit to consider-using-sys-exit
...
The actual name
2023-02-03 18:58:32 -05:00
Charlie Marsh
ff859ead85
Remove unused misplaced_comparison_constant.rs file
2023-02-03 17:10:48 -05:00
Charlie Marsh
b2be30cb07
Mark fixable issues in printer output ( #2500 )
2023-02-03 16:26:06 -05:00
Charlie Marsh
b9c1a3c5c1
Move benchmarking instructions to CONTRIBUTING.md ( #2554 )
2023-02-03 14:53:53 -05:00
Charlie Marsh
9751951d10
Allow F811 noqa declarations on containing import lines ( #2553 )
2023-02-03 14:51:06 -05:00
Charlie Marsh
64c79bde83
Mark sometimes-fixable rules as Availability::Sometimes ( #2552 )
2023-02-03 14:42:10 -05:00
Charlie Marsh
da0374f360
Update RustPython to pull in lexer optimizations ( #2551 )
2023-02-03 14:31:53 -05:00
Charlie Marsh
c26b58ba28
Hide globset logging even with --verbose
2023-02-03 13:31:04 -05:00
Charlie Marsh
56f935640a
Avoid hang when detecting trailing comments ( #2549 )
2023-02-03 13:05:55 -05:00
Charlie Marsh
85ca6cde49
Fix a few nursery rule violations ( #2548 )
2023-02-03 11:59:29 -05:00
Aarni Koskela
38addbe50d
Soft-deprecate update_check ( #2530 )
2023-02-03 11:33:38 -05:00
Charlie Marsh
924e35b1c3
Add print_stdout and print_stderr to Clippy enforcement ( #2542 )
2023-02-03 11:13:44 -05:00
Charlie Marsh
d05ea4dbac
Exit upon showing files with --show-files ( #2543 )
2023-02-03 09:41:09 -05:00
Charlie Marsh
b5ac93d2ee
Move Clippy configuration to config.toml ( #2541 )
2023-02-03 09:26:36 -05:00
Aarni Koskela
924e264156
Move flake8-{errmsg,print} violations ( #2536 )
2023-02-03 09:03:49 -05:00
Aarni Koskela
14c5000ad5
Move McCabe violations ( #2534 )
2023-02-03 08:41:11 -05:00
Aarni Koskela
d985473f4f
Move pygrep-hooks violations ( #2539 )
2023-02-03 08:41:05 -05:00
Aarni Koskela
47e0b2521a
Move flake8-2020 violations ( #2537 )
2023-02-03 08:40:56 -05:00
Aarni Koskela
a319980a7c
Move pep8-naming violations ( #2538 )
2023-02-03 08:40:48 -05:00
Aarni Koskela
3336dd63f4
Move flake8-implicit-str-concat violations ( #2535 )
2023-02-03 08:24:06 -05:00
Aarni Koskela
ae20a721a1
Don't walk past project root when figuring out exclusion ( #2471 )
2023-02-03 08:23:51 -05:00
Aarni Koskela
a26b1f43e9
Move flake8-unused-arguments violations ( #2533 )
2023-02-03 08:19:18 -05:00
Chris Chan
139a6d8331
Minor fixes to PLR0915 logic ( #2518 )
2023-02-03 08:10:59 -05:00
Jacob Coffee
04ef674195
Add Jetbrains Webinar Event (Temporary) ( #2516 )
2023-02-03 08:08:27 -05:00
Aarni Koskela
db852a0b11
Move ruff violations ( #2526 )
2023-02-03 07:43:39 -05:00
Aarni Koskela
87c3b0e4e2
Move pydocstyle violations ( #2524 )
2023-02-03 07:42:52 -05:00
Aarni Koskela
82784a7607
Move flake8-debugger violation ( #2522 )
2023-02-03 07:40:53 -05:00
Aarni Koskela
f2da855048
Move flake8-datetimez violations ( #2528 )
2023-02-03 07:40:00 -05:00
Aarni Koskela
81b60cf9fe
Move flake8-bandit violations ( #2525 )
2023-02-03 07:39:49 -05:00
Maksudul Haque
c96ba6dec4
[flake8-self] Fix False Negative Issue on Rule SLF001 ( #2527 )
2023-02-03 07:39:24 -05:00
Martin Fischer
0f8f250bea
refactor: Simplify UpstreamCategory
...
There's no need to hardcode the prefix string since
it can be derived from the RuleCodePrefix.
2023-02-02 23:46:32 -05:00
Martin Fischer
a3ffaa5d9b
refactor: Rename LinterCategory to UpstreamCategory
...
LinterCategory was somewhat misnamed since it's not actually
a category for linters but rather a category for upstream lints.
Since we want to introduce our own categories, naming the type
UpstreamCategory is more clear.
2023-02-02 23:46:32 -05:00
Martin Fischer
187ed874e9
refactor: Make Rule::from_code return Rule instead of &'static Rule
2023-02-02 23:46:32 -05:00
Charlie Marsh
a30c77e752
Mark --add-noqa as incompatible with --fix ( #2513 )
2023-02-02 23:43:05 -05:00
Florian Best
7e9b9cc7b3
feat: add autofix for PLR0402 ( #2504 )
2023-02-02 23:25:16 -05:00
Charlie Marsh
d4cef9305a
Track overridden bindings within each scope ( #2511 )
2023-02-02 22:31:46 -05:00
Charlie Marsh
a074625121
Avoid renaming unused loop variables with deferred usages ( #2509 )
2023-02-02 20:59:47 -05:00
Charlie Marsh
9c55ab35df
Change LogLevel comments to docs
2023-02-02 20:23:10 -05:00
Charlie Marsh
a95474f2b1
Use a copy-on-write to avoid extra contents clone ( #2508 )
2023-02-02 20:19:16 -05:00
Víctor
3e6fe46bc4
Add number of files processed in debug info (-v) ( #2506 )
2023-02-02 20:19:00 -05:00
Charlie Marsh
bc81cea4f4
Notify user if autofix introduces syntax error ( #2507 )
2023-02-02 20:02:09 -05:00
Charlie Marsh
cb0f226962
Always report parse errors back to the user ( #2505 )
2023-02-02 19:12:17 -05:00
Charlie Marsh
fa56fabed9
Remove a result wrapper from linter.rs ( #2503 )
2023-02-02 18:47:45 -05:00
Jonathan Plasse
bdcab87d2f
Add markdownlint and dev Ruff to pre-commit ( #2303 )
2023-02-02 16:29:07 -05:00
Jonathan Plasse
ec8b827d26
Add known-standard-library for each Python version ( #2491 )
2023-02-02 16:22:47 -05:00
Jonathan Plasse
b232c43824
Fix an error in scripts/add_rule.py ( #2497 )
2023-02-02 15:58:11 -05:00
Charlie Marsh
ee01e666c5
Allow list() and tuple() calls in __all__ assignments ( #2499 )
2023-02-02 15:45:14 -05:00
Jonathan Plasse
2b0de8ccd9
Fix clippy error ( #2498 )
2023-02-02 15:38:18 -05:00
Aarni Koskela
739c57b31b
Move flake8-annotations violations to rules file ( #2496 )
2023-02-02 15:17:54 -05:00
Aarni Koskela
c3e0137f22
Move flake8-return violations to rules module ( #2492 )
2023-02-02 15:13:49 -05:00
Aarni Koskela
77716108af
Move flake8-simplify violations to rule modules ( #2495 )
2023-02-02 15:13:16 -05:00
Jonathan Plasse
335395adec
Mirror CI clippy command for pre-commit hook ( #2494 )
2023-02-02 14:59:19 -05:00
Aarni Koskela
65f8f1a6f7
Move pylint violations to rule modules ( #2489 )
2023-02-02 14:47:58 -05:00
Aarni Koskela
858af8debb
Move pyupgrade violations to rule modules ( #2490 )
2023-02-02 14:47:43 -05:00
Aarni Koskela
5f1bbf0b6b
Move pycodestyle violations to rule modules ( #2483 )
2023-02-02 14:29:23 -05:00
Aarni Koskela
40cb905ae5
Move pyflakes violations to rule modules ( #2488 )
2023-02-02 14:00:59 -05:00
Jonathan Plasse
e89b4a5de5
Fix hardcoded url in transform_readme.py ( #2487 )
2023-02-02 13:59:22 -05:00
Charlie Marsh
651f6b6bce
Bump Ruff version to 0.0.240
2023-02-02 12:45:23 -05:00
Charlie Marsh
d3c3198b24
Fix versions in BREAKING_CHANGES.md
2023-02-02 12:45:20 -05:00
Charlie Marsh
ec6054edce
Treat if 0: and if False: as type-checking blocks ( #2485 )
2023-02-02 12:35:59 -05:00
Charlie Marsh
a0df78cb7d
Visit NamedExpr values before targets ( #2484 )
2023-02-02 12:21:58 -05:00
Aarni Koskela
ac41c33d1f
Move flake8-blind-except violation to rule module ( #2479 )
2023-02-02 12:21:25 -05:00
Aarni Koskela
b4b8782243
Move remaining flake8-pytest-style violations to rule modules ( #2482 )
2023-02-02 12:10:49 -05:00
Florian Best
8e53a4d1d3
fix: assertTrue()/assertFalse() fixer should not test for identity ( #2476 )
2023-02-02 11:24:35 -05:00
Charlie Marsh
668860cba3
Add more information to Pylint FAQ section
2023-02-02 11:08:17 -05:00
Aarni Koskela
038e8cfba0
Move flake8-quotes violations to rules module ( #2475 )
2023-02-02 10:08:12 -05:00
Aarni Koskela
ebfa55cea3
Move flake8-builtins violations to rules file ( #2478 )
2023-02-02 10:03:09 -05:00
Aarni Koskela
aa0fc0f9c2
Move flake8-bugbear violations to rule modules ( #2474 )
2023-02-02 09:34:26 -05:00
Aarni Koskela
aa85c81280
Move flake8-comprehensions violations to rule files ( #2477 )
2023-02-02 09:26:50 -05:00
Charlie Marsh
f5fd6f59ea
Remove extraneous test file
2023-02-02 08:46:03 -05:00
Martin Fischer
540e31f5f4
Carry-over ignore to next config layer if select = [] ( #2467 )
...
Resolves #2461 .
2023-02-02 08:45:07 -05:00
Chris Chan
8136cc9238
Implement pylint's too-many-statements rule (PLR0915) ( #2445 )
2023-02-02 08:18:37 -05:00
Charlie Marsh
2c71535016
Update snapshots
2023-02-02 08:15:33 -05:00
Aarni Koskela
cce8fb9882
isort: support forced_separate ( #2268 )
2023-02-02 08:08:02 -05:00
Maksudul Haque
9e59c99133
[flake8-self] Add Plugin and Rule SLF001 ( #2470 )
2023-02-02 07:58:14 -05:00
Colin Delahunty
b032f50775
[pyupgrade]: Remove outdated sys.version_info blocks ( #2099 )
2023-02-02 07:49:24 -05:00
Charlie Marsh
1c2fc38853
Use LibCST to reverse Yoda conditions ( #2468 )
...
Our existing solution was having trouble with parenthesized expressions. This actually may affect more than `SIM300`, but let's address them as they come up.
Closes #2466 .
2023-02-02 00:07:43 -05:00
Charlie Marsh
f16f3a4a03
Avoid removing un-selected codes when applying --add-noqa edits ( #2465 )
...
The downside here is that we have to leave blank `# noqa` directives intact. Otherwise, we risk removing necessary `# noqa` coverage for rules that aren't selected.
Closes #2254 .
2023-02-01 22:22:31 -05:00
Charlie Marsh
30a09ec211
Respect parent noqa in --add-noqa ( #2464 )
2023-02-01 21:58:01 -05:00
Reid Swan
ec7b25290b
feat: Add isort option lines-after-imports ( #2440 )
...
Fixes https://github.com/charliermarsh/ruff/issues/2243
Adds support for the isort option [lines_after_imports](https://pycqa.github.io/isort/docs/configuration/options.html#lines-after-imports ) to insert blank lines between imports and the follow up code.
2023-02-01 21:39:45 -05:00
Charlie Marsh
68422d4ff2
Allow non-ruff.toml-named files for --config ( #2463 )
...
Previously, if you passed in a file on the command-line via `--config`, it had to be named either `pyproject.toml` or `ruff.toml` -- otherwise, we errored. I think this is too strict. `pyproject.toml` is a special name in the ecosystem, so we should require _that_; but otherwise, let's just assume it's in `ruff.toml` format.
As an alternative, we could add a `--pyproject` argument for `pyproject.toml`, and assume anything passed to `--config` is in `ruff.toml` format. But that _would_ be a breaking change and is arguably more confusing. (This isn't a breaking change, since it only loosens the CLI.)
Closes #2462 .
2023-02-01 21:35:42 -05:00
Charlie Marsh
2abaffd65b
Improve consistency of backticks for plugin names ( #2460 )
2023-02-01 19:17:32 -05:00
Charlie Marsh
06cbf5a2ae
Add some top-level links to the README ( #2458 )
2023-02-01 19:10:41 -05:00
Charlie Marsh
f432ce291a
Add Fathom to docs
2023-02-01 18:41:24 -05:00
Charlie Marsh
1eb331143d
Add Fathom to playground
2023-02-01 18:30:40 -05:00
Henry Schreiner
db1b1672b8
fix: minor spacing typo in message for PTH123 ( #2453 )
2023-02-01 14:39:50 -05:00
Charlie Marsh
6861e59103
Only avoid PEP604 rewrites for pre-Python 3.10 code ( #2449 )
...
I moved the `self.in_annotation` guard out of the version check in #1563 . But, I think that was a mistake. It was done to resolve #1560 , but the fix in that case _should've_ been to set a different Python version.
Closes #2447 .
2023-02-01 13:03:51 -05:00
Charlie Marsh
778c644ee3
Trigger, but don't fix, SIM rules if comments are present ( #2450 )
2023-02-01 12:56:02 -05:00
Martin Fischer
e66a6b6d05
refactor: Define ruff_dev::ROOT_DIR
2023-02-01 09:17:53 -05:00
Martin Fischer
faea478ca5
fix: failing snapshot test on Windows
2023-02-01 09:17:53 -05:00
Martin Fischer
39b5fa0e24
refactor: Make test_path prefix the fixture path
2023-02-01 09:17:53 -05:00
Martin Fischer
df413d1ece
refactor: Introduce test_resource_path helper
2023-02-01 09:17:53 -05:00
Martin Fischer
cfd0693ae5
refactor: Document internal test_path function
2023-02-01 09:17:53 -05:00
Martin Fischer
56ad160c05
refactor: Move test_path helper to new test module
2023-02-01 09:17:53 -05:00
Florian Best
9d8c6ba671
more builtin name checks when autofixing ( #2430 )
2023-02-01 08:16:47 -05:00
Charlie Marsh
1ea88ea56b
Avoid iterating over body twice ( #2439 )
2023-02-01 08:12:36 -05:00
Florian Best
7f44ffb55c
docs(CONTRIBUTING): add instructions how to update the test snapshots ( #2412 )
2023-02-01 07:44:20 -05:00
Charlie Marsh
dbd640d90f
Remove unused Cargo.lock file ( #2437 )
2023-02-01 07:33:59 -05:00
Aarni Koskela
e5082c7d6c
isort: split up package ( #2434 )
2023-02-01 07:17:31 -05:00
Charlie Marsh
841d176289
Move super-args and unnecessary-coding-comment into their own modules ( #2432 )
2023-01-31 22:26:56 -05:00
Charlie Marsh
c15595325c
Bump version to 0.0.239
2023-01-31 19:06:22 -05:00
Florian Best
e97b1a4280
fix: ignore fix if "bool" is not builtin ( #2429 )
2023-01-31 19:03:46 -05:00
Florian Best
82ec884a61
feat: let SIM210 return expressions without bool() wrapping ( #2410 ) ( #2426 )
2023-01-31 18:25:22 -05:00
Maksudul Haque
7c1a6bce7b
[flake8-raise] Add Plugin and RSE102 Rule ( #2354 )
2023-01-31 18:09:40 -05:00
Charlie Marsh
84a8b628b8
Avoid implicit-namespace-package checks for .pyi files ( #2420 )
2023-01-31 17:35:30 -05:00
Charlie Marsh
142b627bb8
Avoid Bandit false-positives for empty-string-as-password ( #2421 )
2023-01-31 16:56:03 -05:00
Charlie Marsh
fbf231e1b8
Allow implicit multiline strings with internal quotes to use non-preferred quote ( #2416 )
...
As an example, if you have `single` as your preferred style, we'll now allow this:
```py
assert s.to_python(123) == (
"123 info=SerializationInfo(include=None, exclude=None, mode='python', by_alias=True, exclude_unset=False, "
"exclude_defaults=False, exclude_none=False, round_trip=False)"
)
```
Previously, the second line of the implicit string concatenation would be flagged as invalid, despite the _first_ line requiring double quotes. (Note that we'll accept either single or double quotes for that second line.)
Mechanically, this required that we process sequences of `Tok::String` rather than a single `Tok::String` at a time. Prior to iterating over the strings in the sequence, we check if any of them require the non-preferred quote style; if so, we let _any_ of them use it.
Closes #2400 .
2023-01-31 16:27:15 -05:00
Florian Best
1dd9ccf7f6
feat: let SIM103 return expressions without bool() wrapping ( #2410 )
2023-01-31 16:11:44 -05:00
Charlie Marsh
d601abe01b
Rename flake8-quotes snapshots and tests ( #2415 )
2023-01-31 16:08:00 -05:00
Charlie Marsh
15d4774b6b
Avoid flagging same-condition cases in SIM103 ( #2404 )
2023-01-31 12:45:51 -05:00
Charlie Marsh
293c7e00d5
Include method name in B027 message ( #2403 )
2023-01-31 12:41:22 -05:00
Thomas M Kehrenberg
c3a3195922
Fix option name "max-args" in the documentation ( #2401 )
2023-01-31 12:30:05 -05:00
Martin Fischer
39d98d3488
Disable panic hook about reporting issues for debug builds
...
In order to avoid confusing new developers. When a debug build panics
chances are that the panic is caused by local changes and should in
fact not be reported on GitHub.
2023-01-31 12:24:26 -05:00
Charlie Marsh
cd3d82213a
Handle multi-byte lines in RUF100 ( #2392 )
2023-01-31 07:59:16 -05:00
Charlie Marsh
a9a0026f2f
Don't panic for --statistics with no errors ( #2391 )
2023-01-31 07:53:29 -05:00
Hassan Kibirige
da4618d77b
For neovim:null_ls use ruff builtin for formatting ( #2386 )
...
null_ls picked up the recommended snippet in README.md and ruff formatting now a builtin.
Ref:
1. 482990e391
2. 7b2b28e207/doc/BUILTINS.md (ruff-1)
2023-01-31 07:22:14 -05:00
Martin Fischer
1b0748d19d
refactor: Simplify Linter::categories
2023-01-31 07:21:12 -05:00
Martin Fischer
0b7fa64481
refactor: Drop PartialOrd & Ord impls for RuleSelector
...
RuleSelector implemented PartialOrd & Ord because ruff::flake8_to_ruff
was using RuleSelector within a BTreeSet (which requires contained
elements to implement Ord). There however is no inherent order to
rule selectors, so PartialOrd & Ord should not be implemented.
This commit changes BTreeSet<RuleSelector> to HashSet<RuleSelector>
and adds an explicit sort calls based on the serialized strings,
letting us drop the PartialOrd & Ord impls in favor of a Hash impl.
2023-01-31 07:21:12 -05:00
Samuel Cormier-Iijima
09d593b124
[I001] fix isort check for files with tabs and no indented blocks ( #2374 )
...
This is a followup to #2361 . The isort check still had an issue in a rather specific case: files with a multiline import, indented with tabs, and not containing any indented blocks.
The root cause is this: [`Stylist`'s indentation detection](ad8693e3de/src/source_code/stylist.rs (L163-L172) ) works by finding `Indent` tokens to determine the type of indentation used by a file. This works for indented code blocks (loops/classes/functions/etc) but does not work for multiline values, so falls back to 4 spaces if the file doesn't contain code blocks.
I considered a few possible solutions:
1. Fix `detect_indentation` to avoid tokenizing and instead use some other heuristic to determine indentation. This would have the benefit of working in other places where this is potentially an issue, but would still fail if the file doesn't contain any indentation at all, and would need to fall back to option 2 anyways.
2. Add an option for specifying the default indentation in Ruff's config. I think this would confusing, since it wouldn't affect the detection behavior and only operate as a fallback, has no other current application and would probably end up being overloaded for other things.
3. Relax the isort check by comparing the expected and actual code's lexed tokens. This would require an additional lexing step.
4. Relax the isort check by comparing the expected and actual code modulo whitespace at the start of lines.
This PR does approach 4, which in addition to being the simplest option, has the (expected, although I didn't benchmark) added benefit of improved performance, since the check no longer needs to do two allocations for the two `dedent` calls. I also believe that the check is still correct enough for all practical purposes.
2023-01-31 07:18:54 -05:00
Erik Welch
adc134ced0
Fix typos: s/scripy/scipy/g ( #2380 )
2023-01-31 07:17:18 -05:00
Charlie Marsh
6051a0c1c8
Include per-file ignore matches in debug logging ( #2376 )
2023-01-30 23:11:56 -05:00
Charlie Marsh
00495e8620
Use human-readable types for documentation values ( #2375 )
2023-01-30 23:05:28 -05:00
Colin Delahunty
ad8693e3de
[pyupgrade] Implement import-replacement rule (UP035) ( #2049 )
2023-01-30 19:58:28 -05:00
Charlie Marsh
69e20c4554
Minor improvements to the docs ( #2371 )
2023-01-30 19:06:05 -05:00
Charlie Marsh
b5816634b3
Add a link to MkDocs ( #2370 )
2023-01-30 19:00:57 -05:00
Charlie Marsh
e8810eae64
Fix version number in BREAKING_CHANGES.md
2023-01-30 18:49:11 -05:00
Charlie Marsh
ba26a60e2a
Disable incompatible rules rather than merely warning ( #2369 )
...
This is another temporary fix for the problem described in #2289 and #2292 . Rather than merely warning, we now disable the incompatible rules (in addition to the warning). I actually think this is quite a reasonable solution, but we can revisit later. I just can't bring myself to ship another release with autofix broken-by-default 😂
2023-01-30 18:47:05 -05:00
Charlie Marsh
42459c35b0
Update BREAKING_CHANGES.md
2023-01-30 17:50:26 -05:00
Charlie Marsh
1cbd929a0a
Bump version to 0.0.238
2023-01-30 16:44:19 -05:00
Charlie Marsh
5f07e70762
Recommend disabling explicit-string-concatenation ( #2366 )
...
If `allow-multiline = false` is set, then if the user enables `explicit-string-concatenation` (`ISC003`), there's no way for them to create valid multiline strings. This PR notes that they should turn off `ISC003`.
Closes #2362 .
2023-01-30 16:42:30 -05:00
Charlie Marsh
8963a62ec0
Refine criteria for exc_info logger rules ( #2364 )
...
We now only trigger `logging-exc-info` and `logging-redundant-exc-info` when in an exception handler, with an `exc_info` that isn't `true` or `sys.exc_info()`.
Closes #2356 .
2023-01-30 16:32:00 -05:00
Charlie Marsh
4589daa0bd
Ignore magic comparisons to bytes by default ( #2365 )
2023-01-30 16:31:48 -05:00
Charlie Marsh
ea0274d22c
Use bold for deprecated
2023-01-30 16:28:21 -05:00
Charlie Marsh
ca1129ad27
Document new rule config resolution
2023-01-30 16:26:59 -05:00
Martin Fischer
104c63afc6
Exclude deprecated extend-ignore from the JSON schema
...
Now that the option is deprecated we no longer
want IDEs to suggest it in their autocompletion.
2023-01-30 16:26:59 -05:00
Martin Fischer
ba457c21b5
Improve rule config resolution
...
Ruff allows rules to be enabled with `select` and disabled with
`ignore`, where the more specific rule selector takes precedence,
for example:
`--select ALL --ignore E501` selects all rules except E501
`--ignore ALL --select E501` selects only E501
(If both selectors have the same specificity ignore selectors
take precedence.)
Ruff always had two quirks:
* If `pyproject.toml` specified `ignore = ["E501"]` then you could
previously not override that with `--select E501` on the command-line
(since the resolution didn't take into account that the select was
specified after the ignore).
* If `pyproject.toml` specified `select = ["E501"]` then you could
previously not override that with `--ignore E` on the command-line
(since the resolution didn't take into account that the ignore was
specified after the select).
Since d067efe265 (#1245 )
`extend-select` and `extend-ignore` always override
`select` and `ignore` and are applied iteratively in pairs,
which introduced another quirk:
* If some `pyproject.toml` file specified `extend-select`
or `extend-ignore`, `select` and `ignore` became pretty much
unreliable after that with no way of resetting that.
This commit fixes all of these quirks by making later configuration
sources take precedence over earlier configuration sources.
While this is a breaking change, we expect most ruff configuration
files to not rely on the previous unintutive behavior.
2023-01-30 16:26:59 -05:00
Martin Fischer
a92958f941
Test that more specific select wins over less specific ignore
2023-01-30 16:26:59 -05:00
Martin Fischer
1cd206285e
refactor: test impl From<&Configuration> for RuleTable
...
Previously we tested the resolve_codes helper function directly.
Since we want to rewrite our resolution logic in the next commit,
this commit changes the tests to test the more high-level From impl.
2023-01-30 16:26:59 -05:00
Samuel Cormier-Iijima
5ac5b69e9f
[I001] fix isort for files with tab-based indentation ( #2361 )
...
This PR fixes two related issues with using isort on files using tabs for indentation:
- Multiline imports are never considered correctly formatted, since the comparison with the generated code will always fail.
- Using autofix generates code that can have mixed indentation in the same line, for imports that are within nested blocks.
2023-01-30 15:36:19 -05:00
Charlie Marsh
01fedec1e7
Add SciPy and meson-python ( #2363 )
2023-01-30 15:34:19 -05:00
Martin Fischer
ef20692149
fix: clap usage for CLI help generation in the README ( #2358 )
2023-01-30 13:14:40 -05:00
Simon Brugman
50046fbed3
Extend conventional imports defaults to include TensorFlow et al ( #2353 )
...
extend conventional imports
Based on configuration from Visual Studio for Python
(https://code.visualstudio.com/docs/python/editing#_quick-fixes )
2023-01-30 11:04:19 -05:00
Charlie Marsh
6798675db1
Avoid removing trailing comments when autofixing ( #2352 )
2023-01-30 07:44:20 -05:00
Akhil
8e5a944ce1
Implement Pylint's too-many-arguments rule (PLR0913) ( #2308 )
2023-01-30 07:34:37 -05:00
messense
1e325edfb1
Configure automatically generated release notes ( #2341 )
2023-01-30 07:21:29 -05:00
Simon Brugman
502574797f
include tomllib in standard lib ( #2345 )
2023-01-30 06:59:59 -05:00
Charlie Marsh
7a83b65fbe
Pre-allocate output contents during autofix application ( #2340 )
2023-01-29 22:40:27 -05:00
Charlie Marsh
74e3cdfd7c
Add a dedicated single-fix helper ( #2339 )
2023-01-29 22:38:29 -05:00
Simon Brugman
2ef28f217c
pandas vet autofix for PD002 and general refactor
2023-01-29 22:30:37 -05:00
Simon Brugman
63fc912ed8
refactor: use remove_argument helper in pyupgrade
2023-01-29 22:30:37 -05:00
Martin Fischer
d76a47d366
Implement ruff linter subcommand
...
The subcommand lists all supported upstream linters and their prefixes:
$ ruff linter
F Pyflakes
E/W pycodestyle
C90 mccabe
I isort
N pep8-naming
D pydocstyle
UP pyupgrade
YTT flake8-2020
# etc...
Just like with the `rule` subcommand `--format json` is supported:
$ ruff linter --format json
[
{
"prefix": "F",
"name": "Pyflakes"
},
{
"prefix": "",
"name": "pycodestyle",
"categories": [
{
"prefix": "E",
"name": "Error"
},
{
"prefix": "W",
"name": "Warning"
}
]
},
# etc...
2023-01-29 21:32:37 -05:00
Martin Fischer
b532fce792
refactor: Change RuleNamespace::prefixes to common_prefix
...
Previously Linter::parse_code("E401") returned
(Linter::Pycodestyle, "401") ... after this commit it returns
(Linter::Pycodestyle, "E401") instead, which is important
for the future implementation of the many-to-many mapping.
(The second value of the tuple isn't used currently.)
2023-01-29 21:32:37 -05:00
Charlie Marsh
3ee6a90905
Remove remove-six-compat (UP016) ( #2332 )
2023-01-29 21:19:59 -05:00
Samuel Cormier-Iijima
0a6d2294a7
[TRY201] don't check raise statements in nested exception handlers ( #2337 )
2023-01-29 21:16:18 -05:00
Simon Brugman
e66fb42d0b
refactor: use patch(diagnostic.kind.rule()) ( #2336 )
2023-01-29 21:15:09 -05:00
Simon Brugman
5165b703d9
Add VS Code to gitignore; fix typos ( #2333 )
2023-01-29 21:14:38 -05:00
Simon Brugman
b40cd1fabc
debug assert for fix usage ( #2335 )
2023-01-29 21:13:42 -05:00
Charlie Marsh
64fb0bd2cc
Include both ruff help and ruff help check in README ( #2325 )
2023-01-29 17:01:15 -05:00
Charlie Marsh
2ad29089af
Allow list comprehensions for __all__ assignment ( #2326 )
2023-01-29 14:26:54 -05:00
Florian Best
f41796d559
feat: add ruff --statistics ( #2284 )
...
Closes #2284 .
2023-01-29 13:44:56 -05:00
Samuel Cormier-Iijima
945a9e187c
Migrate violations to named fields ( #2317 )
...
Fairly mechanical. Did a few of the simple cases manually to make sure things were working, and I think the rest will be easily achievable via a quick `fastmod` command.
ref #1871
2023-01-29 13:29:53 -05:00
Charlie Marsh
546413defb
Fix remaining RelativeImportsOrder typo
2023-01-29 11:33:12 -05:00
Charlie Marsh
e371ef9b1a
Place star before other member imports ( #2320 )
...
I think we've never run into this case, since it's rare to import `*` from a module _and_ import some other member explicitly. But we were deviating from `isort` by placing the `*` after other members, rather than up-top.
Closes #2318 .
2023-01-28 22:17:43 -05:00
Charlie Marsh
c9585fe304
Run generate-all
2023-01-28 22:13:07 -05:00
Charlie Marsh
535868f939
Update fixable list ( #2316 )
2023-01-28 20:18:55 -05:00
Chirag
cec993aaa9
Add ruff . to documentation ( #2307 )
2023-01-28 14:53:11 -05:00
Samuel Cormier-Iijima
1a32d873f0
Fix regression with line-based rules not being ignored per-file ( #2311 )
2023-01-28 14:48:32 -05:00
Samuel Cormier-Iijima
f308f9f27e
Respect per-file-ignores when checking noqa ( #2309 )
...
`RUF100` does not take into account a rule ignored for a file via a `per-file-ignores` configuration. To see this, try the following pyproject.toml:
```toml
[tool.ruff.per-file-ignores]
"test.py" = ["F401"]
```
and this test.py file:
```python
import itertools # noqa: F401
```
Running `ruff --extend-select RUF100 test.py`, we should expect to get this error:
```
test.py:1:19: RUF100 Unused `noqa` directive (unused: `F401`)
```
The issue is that the per-file-ignores diagnostics are filtered out after the noqa checks, rather than before.
2023-01-28 14:16:30 -05:00
Jonathan Plasse
73dccce5f5
Isolate integration tests ( #2306 )
2023-01-28 13:32:50 -05:00
Charlie Marsh
fc9fae6579
Remove picture tag from PyPI and MkDocs
2023-01-28 11:49:52 -05:00
Charlie Marsh
add7fefeb5
Bump version to 0.0.237
2023-01-28 10:52:14 -05:00
Charlie Marsh
ec24947865
Fix version shorthand detection to use -V instead of -v ( #2301 )
...
Fixes a regression introduced in eda2be6350 (but not yet released to users). (`-v` is a real flag, but it's an alias for `--verbose`, not `--version`.)
Closes #2299 .
2023-01-28 10:47:47 -05:00
Charlie Marsh
8038d32649
Deploy under docs subdirectory
2023-01-28 10:28:40 -05:00
Charlie Marsh
0362cc1098
Allow manual trigger for docs
2023-01-28 10:24:52 -05:00
Charlie Marsh
860e3110c0
Serve docs under /docs subdirectory
2023-01-28 10:22:35 -05:00
Jonxslays
0fa8c578cb
Fix typo in typing_extensions ( #2298 )
2023-01-28 10:03:54 -05:00
Charlie Marsh
861df12269
Preserve global binding kind during reassignments ( #2297 )
2023-01-28 08:40:09 -05:00
Charlie Marsh
071e3fd196
Split MkDocs site into multiple pages ( #2296 )
2023-01-28 08:31:16 -05:00
Martin Fischer
dd79ec293a
Rename new explain subcommand to rule
...
We probably want to introduce multiple explain subcommands and
overloading `explain` to explain it all seems like a bad idea.
We may want to introduce a subcommand to explain config options and
config options may end up having the same name as their rules, e.g. the
current `banned-api` is both a rule name (although not yet exposed to
the user) and a config option.
The idea is:
* `ruff rule` lists all rules supported by ruff
* `ruff rule <code>` explains a specific rule
* `ruff linter` lists all linters supported by ruff
* `ruff linter <name>` lists all rules/options supported by a specific linter
(After this commit only the 2nd case is implemented.)
2023-01-28 07:26:20 -05:00
Martin Fischer
5d331e43bf
fix: help text and env for --format option of explain subcommand
...
The doc comment and the env attribute were copied by mistake.
2023-01-28 07:26:20 -05:00
Martin Fischer
ff3563b8ce
Remove --check alias introduced in eda2be63
...
We do not want to support the --{subcommand} legacy format for new
subcommands ... only for subcommands that used this format previously.
2023-01-28 07:26:20 -05:00
Matt Morris
caada2f8bb
add missing backticks to flake8 plugin urls in README ( #2291 )
2023-01-28 07:16:23 -05:00
messense
0b4cc5ac12
Add readme field to pyproject.toml ( #2293 )
2023-01-28 07:14:58 -05:00
Charlie Marsh
8c70247188
Switch to red MkDocs theme
2023-01-27 23:15:49 -05:00
Charlie Marsh
eaac3cae5e
Add MkDocs version of README ( #2287 )
...
Co-authored-by: Justin Flannery <juftin@juftin.com >
2023-01-27 22:57:42 -05:00
Charlie Marsh
fd56414b2f
Re-add ALL disclaimer
2023-01-27 22:18:20 -05:00
Martin Fischer
9731f96fb4
fix: typo in BREAKING_CHANGES.md & improve wrapping
2023-01-27 21:35:41 -05:00
Charlie Marsh
1a0191f1ac
Add release to breaking changes
2023-01-27 20:34:24 -05:00
Charlie Marsh
249cf73d4e
Tweak some wording in CLI help ( #2285 )
2023-01-27 20:25:58 -05:00
Martin Fischer
eda2be6350
Use subcommands for CLI instead of incompatible boolean flags
...
This commit greatly simplifies the implementation of the CLI,
as well as the user expierence (since --help no longer lists all
options even though many of them are in fact incompatible).
To preserve backwards-compatability as much as possible aliases have
been added for the new subcommands, so for example the following two
commands are equivalent:
ruff explain E402 --format json
ruff --explain E402 --format json
However for this to work the legacy-format double-dash command has to
come first, i.e. the following no longer works:
ruff --format json --explain E402
Since ruff previously had an implicitly default subcommand,
this is preserved for backwards compatibility, i.e. the following two
commands are equivalent:
ruff .
ruff check .
Previously ruff didn't complain about several argument combinations that
should have never been allowed, e.g:
ruff --explain RUF001 --line-length 33
previously worked but now rightfully fails since the explain command
doesn't support a `--line-length` option.
2023-01-27 19:38:17 -05:00
Charlie Marsh
57a68f7c7d
Document the location of the personal config file ( #2283 )
2023-01-27 19:25:55 -05:00
Charlie Marsh
a19dd9237b
Add comparison to type checkers ( #2282 )
2023-01-27 19:18:40 -05:00
Simon Brugman
4f067d806e
add clippy and rust_dev to pre-commit ( #2256 )
...
I presume the reasoning for not including clippy in `pre-commit` was that it passes all files. This can be turned off with `pass_filenames`, in which case it only runs once.
`cargo +nightly dev generate-all` is also added (when excluding `target` is does not give false positives).
(The overhead of these commands is not much when the build is there. People can always choose to run only certain hooks with `pre-commit run [hook] --all-files`)
2023-01-27 18:53:44 -05:00
Samuel Cormier-Iijima
dd15c69181
[flake8-bandit] Add Rule S110 (try/except/pass) ( #2197 )
2023-01-27 18:52:55 -05:00
Charlie Marsh
b692921160
Use rustup show in lieu of actions-rs/toolchain ( #2280 )
2023-01-27 18:51:41 -05:00
Charlie Marsh
b3e8b1b787
Expand heuristic for detecting logging calls ( #2279 )
2023-01-27 18:41:16 -05:00
Charlie Marsh
0b34ca7107
Move off nightly Rust for dev workflows ( #2278 )
2023-01-27 18:35:19 -05:00
Charlie Marsh
df44c5124e
Add missing autofix levels to sometimes-fixable rules
2023-01-27 18:25:23 -05:00
Simon Brugman
0e27f78b3f
feat: include os.getcwdb (bytes) into flake8-use-pathlib ( #2276 )
2023-01-27 18:25:02 -05:00
Florian Best
cd8ad1df08
mark some fixers as sometimes-fixable ( #2271 )
2023-01-27 18:23:32 -05:00
Charlie Marsh
d1aaf16e40
Omit typing module from flake8-type-checking by default ( #2277 )
2023-01-27 18:19:45 -05:00
Ville Skyttä
7320058ce2
Incompatiblity warning updates ( #2272 )
2023-01-27 18:17:23 -05:00
Aarni Koskela
3a8b367b1c
flake8-annotations: Move has_any_typed_arg into correct nested if ( #2269 )
2023-01-27 18:15:46 -05:00
Ville Skyttä
221b87332c
feat: add more DTZ fix suggestions in messages ( #2274 )
2023-01-27 18:14:17 -05:00
Franck Nijhof
8149c8cbc4
Treat attribute constants as constant for yoda-conditions ( #2266 )
...
Accessed attributes that are Python constants should be considered for yoda-conditions
```py
## Error
JediOrder.YODA == age # SIM300
## OK
age == JediOrder.YODA
```
~~PS: This PR will fail CI, as the `main` branch currently failing.~~
2023-01-27 12:55:12 -05:00
Charlie Marsh
2c415016a6
Update F401 snapshots
2023-01-27 12:43:42 -05:00
Sladyn
bb85119ba8
Convert UnusedImport violation to struct fields ( #2141 )
2023-01-27 11:31:39 -05:00
Simon Brugman
94551a203e
feat: pylint PLE0604 and PLE0605 ( #2241 )
2023-01-27 11:26:33 -05:00
Charlie Marsh
64c4e4c6c7
Treat constant tuples as constants for yoda-conditions ( #2265 )
2023-01-27 11:25:57 -05:00
Charlie Marsh
84e4b7c96f
Treat builtins as synthetically used ( #2251 )
2023-01-27 11:25:45 -05:00
Franck Nijhof
ca26f664ec
Fix SIM300 to take Python constants into account ( #2255 )
...
SIM300 currently doesn't take Python constants into account when looking for Yoda conditions, this PR fixes that behavior.
```python
# Errors
YODA == age # SIM300
YODA > age # SIM300
YODA >= age # SIM300
# OK
age == YODA
age < YODA
age <= YODA
```
Ref: <https://github.com/home-assistant/core/pull/86793 >
2023-01-27 11:20:21 -05:00
Aarni Koskela
779b232db9
Fix typo: RelatveImportsOrder ( #2264 )
2023-01-27 11:15:43 -05:00
Charlie Marsh
a316b26b49
Rewrite some string-format violation messages ( #2242 )
2023-01-26 19:42:16 -05:00
Charlie Marsh
685d9ab848
Bump version to 0.0.236
2023-01-26 18:47:00 -05:00
Charlie Marsh
093f9156e1
Wrap return-bool-condition-directly fixes in bool() ( #2240 )
2023-01-26 18:22:34 -05:00
Charlie Marsh
615e62ae24
Clarify E-category rule support ( #2239 )
2023-01-26 18:12:28 -05:00
Charlie Marsh
76a0c45773
Track type-checking blocks during tree traversal ( #2238 )
2023-01-26 18:09:28 -05:00
Charlie Marsh
3ec46f0936
Allow pytest in shebang ( #2237 )
2023-01-26 17:32:23 -05:00
Charlie Marsh
a6ec2eb044
Avoid removing trailing comments on pass statements ( #2235 )
...
This isn't super consistent with some other rules, but... if you have a lone body, with a `pass`, followed by a comment, it's probably surprising if it gets removed. Let's retain the comment.
Closes #2231 .
2023-01-26 17:29:13 -05:00
Simon Brugman
9d3a5530af
refactor: move violations to linters ( #2234 )
2023-01-26 17:28:14 -05:00
Simon Brugman
8766e6a666
docs(readme): add featuretools ( #2236 )
2023-01-26 17:24:45 -05:00
Charlie Marsh
b08367b5a8
Avoid flagging blind exceptions with valid logging ( #2232 )
2023-01-26 17:05:01 -05:00
Charlie Marsh
98a8330124
Add stylist settings to all LibCST invocations ( #2225 )
2023-01-26 16:59:33 -05:00
Charlie Marsh
4d52ea87ef
Implement exempt-modules setting from flake8-type-checking ( #2230 )
2023-01-26 16:55:32 -05:00
Charlie Marsh
291239b9f1
Fix range for try-consider-else ( #2228 )
2023-01-26 16:36:18 -05:00
Charlie Marsh
224334b6d1
Avoid erroneous class autofixes in indented blocks ( #2226 )
2023-01-26 16:24:21 -05:00
Charlie Marsh
0cab3f8437
Preserve indentation when fixing via LibCST ( #2223 )
2023-01-26 16:09:35 -05:00
Charlie Marsh
5f8810e987
Add strictness setting for flake8-typing-imports ( #2221 )
2023-01-26 16:04:21 -05:00
Charlie Marsh
f15c562a1c
Remove unused overridden property ( #2217 )
2023-01-26 14:46:46 -05:00
Martin Fischer
4f3b63edd4
fix: --explain reporting the wrong linter
...
Fixes a regression introduced in 4e4643aa5d .
We want the longest prefixes to be checked first so we of course
have to reverse the sorting when sorting by prefix length.
Fixes #2210 .
2023-01-26 13:53:35 -05:00
Simon Brugman
bab8691132
chore: fix script indent ( #2213 )
2023-01-26 13:53:22 -05:00
Charlie Marsh
50c85fd192
Add a fixable and unfixable example to the docs ( #2211 )
2023-01-26 13:23:21 -05:00
Martin Fischer
23819ae338
Group options in --help output and sort them by importance
...
`ruff --help` previously listed 37 options in no particular order
(with niche options like --isolated being listed before before essential
options such as --select). This commit remedies that and additionally
groups the options by making use of the Clap help_heading feature.
Note that while the source code has previously also referred to
--add-noqa, --show-settings, and --show-files as "subcommands"
this commit intentionally does not list them under the new
Subcommands section since contrary to --explain and --clean
combining them with most of the other options makes sense.
2023-01-26 13:06:29 -05:00
Martin Fischer
4bf2879067
refactor: Move add_noqa if branch up
2023-01-26 13:06:29 -05:00
Martin Fischer
b359f3a9ff
refactor: Get rid of ruff::resolver::FileDiscovery
2023-01-26 13:06:29 -05:00
Martin Fischer
73d0461d55
refactor: Check required_version in Settings::from_configuration
...
The idiomatic way in Rust is to make invalid types unrepresentable
instead of paranoidly calling a validate method everywhere.
2023-01-26 13:06:29 -05:00
Martin Fischer
55bb36fb8b
refactor: Introduce LogLevelArgs
2023-01-26 13:06:29 -05:00
Martin Fischer
cebea16fe4
refactor: Move Args::partition call after panic::set_hook
2023-01-26 13:06:29 -05:00
Charlie Marsh
f7be192f8b
Alphabetize Flake8 plugins in the README ( #2209 )
2023-01-26 13:05:30 -05:00
Edgar R. M
e88275280b
Implement some rules from flake8-logging-format ( #2150 )
2023-01-26 12:58:10 -05:00
Samuel Cormier-Iijima
7370a27c09
Don't flag B009/B010 if identifiers would be mangled ( #2204 )
2023-01-26 12:56:18 -05:00
jvstme
0ad6b8224d
Fix typo in src option docs ( #2201 )
2023-01-26 12:23:09 -05:00
Henry Schreiner
f3aa409d9a
docs(readme): add pypa's build ( #2200 )
2023-01-26 12:18:04 -05:00
Charlie Marsh
adb5c5b150
Fix respect_gitignore reference ( #2196 )
2023-01-26 09:53:17 -05:00
Martin Fischer
b69b6a7ec8
refactor: Move comments before if conditions
2023-01-25 22:08:35 -05:00
Martin Fischer
a7d2def9cd
refactor: Move ruff_cli::resolve to own module
2023-01-25 22:08:35 -05:00
Martin Fischer
d9ead4e6df
refactor: Rename CLI arg structs from Cli to Args
...
Technically the command-line interface (CLI) encompasses both input and
output, so naming the input structs 'Args' is more accurate than 'Cli'.
2023-01-25 22:08:35 -05:00
Charlie Marsh
b346f74915
Run cargo update ( #2185 )
2023-01-25 21:32:44 -05:00
Eric Roberts
708295f4c9
Move violations for pycodestyle rules to rules files ( #2138 )
2023-01-25 20:11:36 -05:00
Charlie Marsh
4190f1045e
Remove manual newline from autofix helpers ( #2184 )
2023-01-25 19:53:26 -05:00
Florian Stasse
353857e2a5
Implement TRY400 ( #2115 )
2023-01-25 19:42:19 -05:00
Denis Gavrilyuk
55b43c8ea7
feat: implement TRY002 and TRY003 ( #2135 )
2023-01-25 19:22:43 -05:00
Anders Kaseorg
6036d1bbe2
flake8_executable: Only match shebang at beginning of line ( #2183 )
...
The Python implementation uses `re.match` for this, which only matches
at the beginning of a line.
https://github.com/xuhdev/flake8-executable/blob/v2.1.3/flake8_executable/__init__.py#L124
We could use `Regex::captures_read_at`, but that’s a more complicated
API; it’s easier to anchor the regex with `^`.
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
2023-01-25 18:57:09 -05:00
Charlie Marsh
edd0e16a02
Bump version to 0.0.235
2023-01-25 18:28:27 -05:00
Charlie Marsh
fdccb6ec1c
Fix conflicting error message warning ( #2182 )
2023-01-25 18:26:43 -05:00
Anders Kaseorg
c00b8b6d2d
Remove stray parenthesis from fixed errors message ( #2181 )
...
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
2023-01-25 18:15:12 -05:00
Simon Brugman
52201422ae
fix: platform-independent newlines
2023-01-25 18:00:39 -05:00
Simon Brugman
d7fe1eeba0
fix: platform-independent paths
2023-01-25 18:00:39 -05:00
Simon Brugman
5835d719c4
ci: enable windows testing in Github Actions
2023-01-25 18:00:39 -05:00
Simon Brugman
c859ac4933
refactor: test ground truth update for new macro
2023-01-25 18:00:39 -05:00
Simon Brugman
e9c1089ddc
refactor: tests use new marco
2023-01-25 18:00:39 -05:00
Simon Brugman
413acdf83c
feat: introduce macro for testing snap files across platforms
2023-01-25 18:00:39 -05:00
Charlie Marsh
16d2ece87d
Restore single-file license ( #2180 )
...
These were split into per-project licenses in #1648 , but I don't like that they're no longer included in the distribution (due to current limitations in the `pyproject.toml` spec).
2023-01-25 17:59:12 -05:00
Anders Kaseorg
823f1c5b6a
Avoid duplicate CI runs triggered by pushes to pull requests ( #2178 )
...
https://github.com/charliermarsh/ruff/pull/2157#discussion_r1087179996
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
Signed-off-by: Anders Kaseorg <andersk@mit.edu >
2023-01-25 17:45:07 -05:00
Charlie Marsh
9b07d0bd92
Bump version to 0.0.234
2023-01-25 16:55:57 -05:00
Charlie Marsh
23525a8ea0
Actually, rename TYP rules to TCH ( #2176 )
2023-01-25 16:52:49 -05:00
Charlie Marsh
6ede030700
Allow manual releases for pre-release testing
2023-01-25 16:37:04 -05:00
Charlie Marsh
44f3e5013d
Add flake8-type-checking license
2023-01-25 16:27:18 -05:00
Charlie Marsh
35cf9e242e
Rename TYP rules to TYC ( #2175 )
2023-01-25 16:26:22 -05:00
Charlie Marsh
d5dff11d4b
Avoid reraise-no-cause for explicit reraises ( #2174 )
2023-01-25 15:51:24 -05:00
Charlie Marsh
8e1fac620e
Add flake8-builtins options to README ( #2173 )
2023-01-25 15:43:26 -05:00
Aarni Koskela
0da691c0d5
Add Babel to readme ( #2170 )
2023-01-25 15:21:26 -05:00
Hugo van Kemenade
233415921b
Add colour to CI for readability
2023-01-25 15:21:10 -05:00
Hugo van Kemenade
81141e2a73
Bump GitHub Actions
2023-01-25 15:21:10 -05:00
Hugo van Kemenade
6e255ad53c
Allow testing feature branches
2023-01-25 15:21:10 -05:00
Hugo van Kemenade
6d87adbcc0
Fix singular and plural for error(s)
2023-01-25 15:21:10 -05:00
Florian Best
43a8ce6c89
fix: avoid flagging unused loop variable (B007) with globals(), vars() or eval() ( #2166 )
2023-01-25 15:18:58 -05:00
Charlie Marsh
a978706dce
Re-add error wrapper in main.rs ( #2168 )
2023-01-25 15:11:24 -05:00
Florian Best
dc1aa8dd1d
Suggest input format in error case ( #2167 )
2023-01-25 14:55:04 -05:00
Charlie Marsh
662e29b1ce
Avoid re-resolving settings for repeated paths ( #2165 )
...
After this change:
```shell
> time cargo run -- -n $(find ../django -type f -name '*.py')`
8.85s user 0.20s system 498% cpu 1.814 total
> time cargo run -- -n ../django
8.95s user 0.23s system 507% cpu 1.811 total
```
I also verified that we only hit the creation path once via some manual logging.
Closes #2154 .
2023-01-25 13:38:33 -05:00
Charlie Marsh
6978dcf035
Add an FAQ on autofix ( #2163 )
2023-01-25 13:09:16 -05:00
Charlie Marsh
0e6f513607
Avoid prefer-type-error (TRY004) with intermediary control flow ( #2162 )
2023-01-25 13:00:59 -05:00
Charlie Marsh
02421d02f5
Avoid flagging unused loop variable (B007) with locals() ( #2161 )
2023-01-25 12:53:35 -05:00
Charlie Marsh
38de46ae3c
Treat Python 3.7 as minimum supported version ( #2159 )
2023-01-25 12:36:50 -05:00
Martin Fischer
f6fd702d41
Add #![warn(clippy::pedantic)] to lib.rs and main.rs files
...
We already enforced pedantic clippy lints via the
following command in .github/workflows/ci.yaml:
cargo clippy --workspace --all-targets --all-features -- -D warnings -W clippy::pedantic
Additionally adding #![warn(clippy::pedantic)] to all main.rs and lib.rs
has the benefit that violations of pedantic clippy lints are also
reported when just running `cargo clippy` without any arguments and
are thereby also picked up by LSP[1] servers such as rust-analyzer[2].
However for rust-analyzer to run clippy you'll have to configure:
"rust-analyzer.check.command": "clippy",
in your editor.[3]
[1]: https://microsoft.github.io/language-server-protocol/
[2]: https://rust-analyzer.github.io/
[3]: https://rust-analyzer.github.io/manual.html#configuration
2023-01-25 00:40:29 -05:00
Martin Fischer
2125d0bb54
refactor: Move #![forbid(unsafe_code)] attributes up
...
What's forbidden is more important than which clippy lints are
ignored and more important directives should come first.
2023-01-25 00:40:29 -05:00
Charlie Marsh
63b4f60ba4
Implement typing-only import detection (TYP001, TYP002, TYP003) ( #2147 )
2023-01-24 23:48:11 -05:00
Charlie Marsh
9eb13bc9da
Downgrade recommended pre-commit version to v0.0.231
2023-01-24 23:47:13 -05:00
Charlie Marsh
0758049e49
Implement runtime-import-in-type-checking-block (TYP004) ( #2146 )
2023-01-24 23:33:26 -05:00
Charlie Marsh
deff503932
Avoid generating dirty call paths ( #2144 )
2023-01-24 20:40:38 -05:00
Jonathan Plasse
82d7814101
Update .pre-commit-config.yml ( #2139 )
2023-01-24 19:45:34 -05:00
Eric Roberts
0cac1a0d21
Move is_overlong to helpers ( #2137 )
2023-01-24 12:45:35 -05:00
Charlie Marsh
605416922d
Bump version to 0.0.233
2023-01-24 10:46:49 -05:00
Charlie Marsh
7b81f36e54
Enable executable checks on Windows ( #2133 )
2023-01-24 10:46:27 -05:00
Eric Roberts
ff63da9f52
Move compare to helpers file ( #2131 )
...
From discussion on https://github.com/charliermarsh/ruff/pull/2123
I didn't originally have a helpers file so I put the function in both
places but now that a helpers file exists it seems logical for it to be
there.
2023-01-24 10:30:56 -05:00
Charlie Marsh
d645a19e0a
Bump version to 0.0.232
2023-01-24 09:49:07 -05:00
Charlie Marsh
30ae0d3723
Add Dagger and Great Expectations ( #2130 )
2023-01-24 09:48:00 -05:00
Charlie Marsh
3fb9e76012
Remove unnecessary manual Generator invocations ( #2129 )
2023-01-24 09:38:12 -05:00
Eric Roberts
0f283ae98c
Move pycodestyle rules into individual files ( #2123 )
2023-01-24 09:27:26 -05:00
Martin Fischer
269926cec4
refactor: Move redirects out of RuleCodePrefix
...
This commit removes rule redirects such as ("U" -> "UP") from the
RuleCodePrefix enum because they complicated the generation of that enum
(which we want to change to be prefix-agnostic in the future).
To preserve backwards compatibility redirects are now resolved
before the strum-generated RuleCodePrefix::from_str is invoked.
This change also brings two other advantages:
* Redirects are now only defined once
(previously they had to be defined twice:
once in ruff_macros/src/rule_code_prefix.rs
and a second time in src/registry.rs).
* The deprecated redirects will no longer be suggested in IDE
autocompletion within pyproject.toml since they are now no
longer part of the ruff.schema.json.
2023-01-24 09:26:19 -05:00
Martin Fischer
28018442f6
refactor: Move ALL from RuleCodePrefix to RuleSelector
2023-01-24 09:26:19 -05:00
Martin Fischer
abc9810e2b
refactor: Turn RuleSelector into a newtype around RuleCodePrefix
...
Yet another refactor to let us implement the many-to-many mapping
between codes and rules in a prefix-agnostic way.
We want to break up the RuleCodePrefix[1] enum into smaller enums.
To facilitate that this commit introduces a new wrapping type around
RuleCodePrefix so that we can start breaking it apart.
[1]: Actually `RuleCodePrefix` is the previous name of the autogenerated
enum ... I renamed it in b19258a243 to
RuleSelector since `ALL` isn't a prefix. This commit now renames it back
but only because the new `RuleSelector` wrapper type, introduced in this
commit, will let us move the `ALL` variant from `RuleCodePrefix` to
`RuleSelector` in the next commit.
2023-01-24 09:26:19 -05:00
Charlie Marsh
a20482961b
Add tryceratops to flake8-to-ruff
2023-01-24 08:41:18 -05:00
Charlie Marsh
d97c07818e
Update flake8-to-ruff to include latest plugins ( #2127 )
...
Closes #2124 (along with a release).
2023-01-24 08:39:58 -05:00
Ville Skyttä
7e92485f43
feat: autofix multi-line-summary-*-line ( #2093 )
2023-01-24 08:17:13 -05:00
Charlie Marsh
930c3be69d
Ignore generators in flake8-return rules ( #2126 )
...
We could do a better job of handling them, but they cause too many false-positives right now.
Closes #2119 .
2023-01-24 08:15:26 -05:00
Aarni Koskela
24d0a980c5
flake8-annotations: deduplicate code between functions and methods ( #2125 )
2023-01-24 08:03:33 -05:00
Edgar R. M
f5f0ed280a
Implement EXE001 and EXE002 from flake8-executable ( #2118 )
2023-01-24 08:02:47 -05:00
Martin Fischer
ca58c72fc9
refactor: Convention::codes to rules_to_be_ignored
2023-01-24 07:37:34 -05:00
Martin Fischer
c40f14620a
refactor: Get rid of registry::CATEGORIES
2023-01-24 07:37:34 -05:00
Martin Fischer
04300ce258
refactor: Rename SuffixLength enum to Specificity
2023-01-24 07:37:34 -05:00
Martin Fischer
ead5f948d3
refactor: Move Colorize imports where they're used
2023-01-24 07:37:34 -05:00
Martin Fischer
e93e9fae82
refactor: Make flake8_to_ruff tests even more DRY
2023-01-24 07:37:34 -05:00
Martin Fischer
f5ddec0fb3
refactor: Move resolve_select to converter module
...
The function is only used there and is not plugin-specific
since it also specifies the default rule selectors (F, E, W).
2023-01-24 07:37:34 -05:00
Martin Fischer
3de2a57416
refactor: Use ..Options::default() for tests
2023-01-24 07:37:34 -05:00
Hugo
b29b4084ff
Add apk instructions to README ( #2121 )
2023-01-24 07:29:03 -05:00
Aarni Koskela
c61ca4a953
Add Home Assistant to Readme ( #2120 )
2023-01-24 07:27:45 -05:00
Denis Gavrilyuk
58d5ac08a8
feat: implement TRY301 ( #2113 )
2023-01-24 07:25:26 -05:00
Charlie Marsh
cc63a4be6a
Allow flagging of multiline implicit string concatenations ( #2117 )
...
At present, `ISC001` and `ISC002` flag concatenations like the following:
```py
"a" "b" # ISC001
"a" \
"b" # ISC002
```
However, multiline concatenations are allowed.
This PR adds a setting:
```toml
[tool.ruff.flake8-implicit-str-concat]
allow-multiline = false
```
Which extends `ISC002` to _also_ flag multiline concatenations, like:
```py
(
"a" # ISC002
"b"
)
```
Note that this is backwards compatible, as `allow-multiline` defaults to `true`.
2023-01-24 00:01:01 -05:00
Charlie Marsh
549a5d44bc
Upgrade to toml v0.6.0 ( #2116 )
...
Closes #1894 .
2023-01-23 19:22:42 -05:00
Denis Gavrilyuk
d65ce6308b
feat: implement TRY200 ( #2087 )
...
#2056
2023-01-23 14:12:42 -05:00
Charlie Marsh
b988a268e4
Escape curly braces when converting .format() strings ( #2112 )
...
Closes #2111 .
2023-01-23 14:11:24 -05:00