Commit Graph

10642 Commits

Author SHA1 Message Date
Jason Newcomb 25cbcb4331 refactor(lines_filter_map_ok): move to under methods/ (#15925)
changelog: none
2025-10-26 22:04:43 +00:00
Jason Newcomb d1b51eafaa {option,result}_map_unit_fn: fix and clean-up tests, make suggestions multiline (#15871)
changelog: none
2025-10-24 20:46:18 +00:00
Jason Newcomb 3dcf3990f5 fix(manual_let_else): expressions ending with '}' (#15919)
`let-else` statements do not allow the init expression to end with '}'

Fixes rust-lang/rust-clippy#15914

changelog: [`manual_let_else`]: If the init expression ends with `'}'`
wrap it with `(...)`
2025-10-24 20:29:37 +00:00
Samuel Tardieu 8ff0cf8551 Fix len_zero FP on unstable methods (#15894)
Closes rust-lang/rust-clippy#15890

changelog: [`len_zero`] fix FP on unstable methods
2025-10-23 22:16:54 +00:00
yanglsh 9eba2cccd8 fix: len_zero FP on unstable methods 2025-10-24 05:58:18 +08:00
dswij 09c3237590 chore(empty_enum): rename to empty_enums (#15912)
According to the lint naming guidelines[^1], lint names should use the
plural form.

[^1]:
https://rust-lang.github.io/rfcs/0344-conventions-galore.html#lints

changelog: [`empty_enum`]: rename to `empty_enums`
2025-10-23 15:50:20 +00:00
Ada Alakbarova 22bdd9f7c9 fix(match_as_ref): suggest as_ref when the reference needs to be cast 2025-10-22 13:16:00 +02:00
Samuel Tardieu fb82de5ed8 `manual_option_as_slice: improve diagnostics (#15926)
- Make the diagnostic message actually desribe the problem
- Always give the suggestion, by using `snippet_with_context`
- Make the suggestion verbose, because we sometimes lint multiline exprs
like `match`es

changelog: [`manual_option_as_slice`]: improve diagnostics
2025-10-21 22:07:49 +00:00
Ada Alakbarova a6e5159c7d fix: parenthesise the receiver if needed 2025-10-21 18:11:39 +02:00
Ada Alakbarova cb33ccd3fe improve diagnostics 2025-10-21 16:51:33 +02:00
Ada Alakbarova 91dbaae9ad improve diagnostics 2025-10-21 16:51:14 +02:00
Ada Alakbarova d9ecbb73e8 clean-up 2025-10-21 14:17:20 +02:00
Alex Macleod 973e596eb0 option_option: split part of diagnostic message into help message (#15870)
changelog: [`option_option`]: improve diagnostic message
2025-10-20 17:54:59 +00:00
Teodoro Freund 0702934c98 manual_let_else fix when expression finishes with '}' 2025-10-20 16:22:12 +01:00
Ada Alakbarova 5578908f91 chore(empty_enum): rename to empty_enums
According to the lint naming guidelines[^1], lint names should use the
plural form.

[^1]: https://rust-lang.github.io/rfcs/0344-conventions-galore.html#lints
2025-10-20 13:40:04 +02:00
Ada Alakbarova c8c23bcf5b fix(empty_enum): don't lint if all variants happen to be cfg-d out 2025-10-20 00:47:11 +02:00
Ada Alakbarova 70de06f70f clean-up a bit 2025-10-20 00:16:29 +02:00
Ada Alakbarova 98db098408 improve the suggestion
- make them `verbose` -- the ones spanning multiple lines were
  especially egregious
- give a more descriptive help message
2025-10-17 19:49:58 +02:00
Ada Alakbarova b0ecbdf5a2 fix option_map_unit_fn_unfixable.rs
The errors were unrelated to the lint...
2025-10-17 19:32:48 +02:00
Ada Alakbarova 4463ba7ade clean-up tests 2025-10-17 19:32:48 +02:00
Philipp Krones cf7aaa5ecf Merge remote-tracking branch 'upstream/master' into rustup 2025-10-16 15:57:00 +02:00
llogiq 00e5e1b838 refactor(match_like_matches_macro): disentangle the if-let and match cases (#15854)
As discussed in [#clippy > `match_like_matches_macro` does the
work
of`match_same_arms`](https://rust-lang.zulipchat.com/#narrow/channel/257328-clippy/topic/.60match_like_matches_macro.60.20does.20the.20work.20of.60match_same_arms.60/with/544003831)

Sorry for the large number of commits -- I could've gotten away just
three ("clean-up", and one for each inlining of `find_matches_sugg` and
subsequent simplifications), but I found the diff of that quite
difficult to understand.

changelog: none
2025-10-15 20:31:28 +00:00
llogiq 869753389b overhaul mutex_{atomic,integer} (#15632)
- only lint on definitions of offending mutexes, not all their uses
(fixes https://github.com/rust-lang/rust-clippy/issues/13378)
- give more orderly help messages
- stop linting on `Mutex<*const T>` (see the corresponding commit for
context)
- offer (partial) suggestions

The last change might be deemed a bit too much for the feature freeze,
but it can be easily extracted out into a separate PR.

changelog: [`mutex_atomic`]: only lint the definitions, not uses
changelog: [`mutex_atomic`]: better help messages, and suggestions
changelog: [`mutex_atomic`]: don't lint `Mutex<*const T>`
changelog: [`mutex_integer`]: only lint the definitions, not uses
changelog: [`mutex_integer`]: better help messages, and suggestions
2025-10-15 20:29:59 +00:00
llogiq ab9eb10ef7 feat: manual_rotate also recognize non-consts (#15402)
changelog: [`manual_rotate`]: also recognize non-consts

fixes https://github.com/rust-lang/rust-clippy/issues/13028

r? @llogiq
2025-10-15 19:12:24 +00:00
Jason Newcomb 8116b2354a Dereference argument of manual_div_ceil() if needed (#15706)
Fixes rust-lang/rust-clippy#15705

changelog: [`manual_div_ceil`]: dereference argument when needed

r? Alexendoo
2025-10-15 02:22:39 +00:00
Jason Newcomb ec8e8fde91 refactor(non_canonical_impls): lint starting from impls (#15749)
Based on
https://github.com/rust-lang/rust-clippy/pull/15520#discussion_r2372599748,
with the following changes/additions:
- No longer use the `Trait` enum for quickly filtering out irrelevant
impls -- instead, check the `trait_of` basically right away:
    1. pre-fetch `DefId`s of the relevant traits into the lint pass
2. reuse `cx.tcx.impl_trait_ref`'s output for the the `DefId` of the
trait being implemented
    3. compare those `DefId`s, which should be very cheap
- Next, check whether `self_ty` implements the other relevant trait.
- Pre-filter impl items in the same (lazy) iterator, but delay the
proc-macro check as much as possible

changelog: none

Not auto-assigning since @blyxyas and/or @Jarcho will be the ones
reviewing it:
r? ghost
2025-10-15 02:20:21 +00:00
Jason Newcomb d230acd9cf Allow explicit_write in tests (#15862)
Resolves rust-lang/rust-clippy#15780.

I didn't get any feedback on that issue. So I hope it is okay that I
charged ahead and addressed it.

changelog: Allow `explicit_write` in tests
2025-10-15 01:44:50 +00:00
Teodoro Freund 9cc0291582 unnecessary_safety_comment fix an ICE and
improve coverage

Considering comments above attributes for items

Fixed the ICE and safety comments between attributes

- No longer using attr.span()
- ignoring attributes manually

Improve error messages on unsafe fns
2025-10-14 22:23:53 +01:00
Samuel Moelius 1bd8cad5a2 Allow explicit_write in tests 2025-10-14 11:52:54 -04:00
Samuel Tardieu a8d1258ba7 feat(multiple_inherent_impl): Add config option to target specific scope (#15843)
Add a config option `inherent-impl-lint-scope` to the lint
`multiple_inherent_impl` to target a different scope according to
people's needs. It can take three values: `module`, `file`, and `crate`
(default).

- `module` is the weakest option. It lints if there are two or more
impls in the same module.
- `file` is a bit stronger, since it lints if there are two or more
impls in the same file. So, this triggers the lint (where it did not
with module):
- `crate` is the strongest of them; it triggers as soon as there are two
or more impls anywhere in the crate. It is the current behaviour of the
lint, so it's the default option.

changelog: [`multiple_inherent_impl`] : Add config option (`module`,
`file` or `crate`) to target specific scope

fixes rust-lang/rust-clippy#14867
2025-10-13 05:07:54 +00:00
Ada Alakbarova 2fe9d4bfa6 option_option: split part of diagnostic message into help message 2025-10-12 14:19:10 +02:00
Ada Alakbarova 3e1f8623f7 clean-up tests 2025-10-12 13:54:47 +02:00
Paul MIALANE 9be213666e feat(multiple_inherent_impl): Add config option to target specific scope 2025-10-12 10:59:57 +02:00
Camille GILLOT 918b2d88e9 Diagnose liveness on MIR. 2025-10-11 20:50:21 +00:00
Timo 1f0b8b8629 fix(clone_on_ref_ptr): only name the generic type if possible (#15740)
Fixes https://github.com/rust-lang/rust-clippy/issues/15009

changelog: [clone_on_ref_ptr]: only name the generic type if possible
2025-10-11 14:15:19 +00:00
Alejandra González d66e5db0f7 manual_unwrap_or: fix FP edge case (#15812)
changelog: [`manual_unwrap_or`]: fix FP edge case

Found this problem while investigating a different bug.
2025-10-11 11:15:44 +00:00
Ada Alakbarova 778da589c6 suggest adjusting the type ascription 2025-10-11 10:37:39 +02:00
Ada Alakbarova e5fd571414 realize that a test case is incorrect
`Mutex<*const _>` doesn't make a lot of sense (there can be no
contention over a read-only reference), but `AtomicPtr::new(*const _)`
straight up doesn't compile
2025-10-11 10:37:39 +02:00
Ada Alakbarova 99ce6391dd suggest replacing Mutex::new with AtomicX::new 2025-10-11 10:37:38 +02:00
Ada Alakbarova 38ac3d041c only lint on definitions, not use 2025-10-11 10:37:38 +02:00
Ada Alakbarova 3ae047ee04 restructure messages
- The main message should point out what's wrong, not directly suggest a
  solution.
- The second part of the message is a separate advice, so it should be
  emitted separately.
2025-10-11 10:34:59 +02:00
Ada Alakbarova 6b076ca80b feat(zero_repeat_side_effects): don't suggest unnecessary braces around stmts 2025-10-11 10:19:24 +02:00
Ada Alakbarova bb5b5bce99 feat(zero_repeat_side_effects): put the suggestion on two lines 2025-10-11 10:19:23 +02:00
Samuel Tardieu 12e2542c55 Dereference argument of manual_div_ceil() if needed 2025-10-11 09:37:25 +02:00
Ada Alakbarova 097f2fd2f4 add missing test for macros
The missing external macro test for `non_canonical_clone_impl` was
caught thanks to lintcheck -- I went ahead and added all the other
combinations of the test while at it
2025-10-11 09:24:58 +02:00
Samuel Tardieu ebbbbebf2d Replace all item identification utils (#15682)
This introduces a new way of identifying items/paths using extension
traits with a composable set of functions rather than unique functions
for various combinations of starting points and target items. Altogether
this is a set of five traits:

* `MaybeTypeckRes`: Allows both `LateContext` and `TypeckResults` to be
used for type-dependent lookup. The implementation here will avoid ICEs
by returning `None` when debug assertions are disabled. With assertions
this will assert that we don't silently lookup anything from a different
body than the current one and that a definition actually exists.
* `HasHirId`: Simply a convenience to allow not typing `.hir_id` at call
sites.
* `MaybeQPath`: This is the old `MaybePath`. Extension functions for
type-dependent path lookups exist here. A lot of these functions aren't
used in the current PR, but what they accomplish is done in various
places I haven't cleaned up yet.
* `MaybeResPath`: Like `MaybeQPath`, but only does non-type-dependent
lookup (`QPath::Resolved`).
* `MaybeDef`: Extension functions for identifying the current definition
and accessing properties. Implemented for several types for convenience.

`MaybeDef` is implemented for `Option` to allow chaining methods
together. e.g.
`cx.ty_based_def(e).opt_parent(cx).opt_impl_ty(cx).is_diag_item(..)`
would chaining `and_then` or `if let` on every step. `MaybeQPath` and
`MaybeResPath` are also implemented for `Option` for the same reason.

`ty_based_def` is just a shorter name for `type_dependent_def`. I'm not
really attached to it, but it's nice that it's a little shorter.

changelog: none
2025-10-11 07:03:12 +00:00
Jason Newcomb 42f2ba1869 fix(zero_repeat_side_effects): don't suggest unsuggestable types (#15815)
Fixes https://github.com/rust-lang/rust-clippy/issues/14998

changelog: [`zero_repeat_side_effects`]: don't suggest unsuggestable
types
2025-10-11 04:15:13 +00:00
Jason Newcomb cb32444ee6 Remove is_path_diagnostic_item 2025-10-10 22:30:57 -04:00
Michael Howell e0e5d478c1 manual_unwrap_or: fix FP edge case 2025-10-10 16:54:33 -07:00
Nick Drozd b71fe9254d Check structs and enums for use_self 2025-10-09 18:23:12 -05:00