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
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
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
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
fa04861724
Check exclusions prior to resolving `pyproject.toml` files ( #3588 )
2023-03-18 13:12:49 -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
Charlie Marsh
e0df62b841
Rewrite mock import with starred imports ( #3566 )
2023-03-16 20:54:29 -04:00
Micha Reiser
eff84442bc
refactor: Add Copy implementation to Rule ( #3556 )
2023-03-16 17:50:18 +01:00
Edgar R. M
9ae9cc9d2f
Use `value > max` style in pylint and mccabe messages ( #3553 )
2023-03-16 01:37:25 -04: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
Charlie Marsh
106a93eab0
Make Clap an optional feature for ruff crate ( #3498 )
2023-03-14 11:02:05 -04:00
Micha Reiser
d5700d7c69
Add Micro Benchmark ( #3466 )
2023-03-14 08:35:07 +01: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
Charlie Marsh
8955e32b5c
Respect ignores for runtime-import-in-type-checking-block (TCH004) ( #3474 )
2023-03-13 02:23:26 +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
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
Jonathan Plasse
8b561313aa
Remove empty line after RUF100 auto-fix ( #3414 )
2023-03-10 22:57:13 +00: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
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
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
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