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