Commit Graph

976 Commits

Author SHA1 Message Date
Micha Reiser c0cf87356e
Set non-empty range for indentation diagnostics (#4005) 2023-04-18 16:26:13 +02: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
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
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 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 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 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 `Diagnostic`s in snapshot tests (#3906) 2023-04-11 09:03:00 +00:00
Micha Reiser 210083bdd8
Order `Edit`s by `Location`s (#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 `dataclass`es (#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 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 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
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 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
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
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
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
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
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
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
Leiser Fernández Gallo 224e85c6d7
Implement `flake8-gettext` (#3785) 2023-03-28 23:32:02 +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
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
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 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
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
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