Commit graph

14099 commits

Author SHA1 Message Date
dswij
ca168c07a6
unnecessary_{find,filter}_map: make diagnostic spans more precise (#15929)
changelog: [`unnecessary_find_map`]: make diagnostic spans more precise
changelog: [`unnecessary_filter_map`]: make diagnostic spans more
precise
2025-10-27 15:32:05 +00:00
Alex Macleod
0029a91219
Lint precedence possible ambiguity between closure and method call (#14421)
`|x: String| {x}.clone()` applies `clone()` to `{x}`, while `|x: String|
-> String {x}.clone()` applies `.clone()` to the closure because a
closure with an explicit return type requires a block as its body.

This extends the `precedence` lint to suggest using parentheses around
the closure definition in the second case, when `.clone()` would apply
to the whole closure.

changelog: [`precedence`]: warn about ambiguity when a closure is used
as a method call receiver

[Related
discussion](https://rust-lang.zulipchat.com/#narrow/channel/213817-t-lang/topic/Closure.20syntax.20ambiguity/with/504671477)
2025-10-27 13:12:49 +00:00
Ada Alakbarova
640e1188f0
chore(needless_if): rename to needless_ifs 2025-10-27 11:00:57 +01:00
Samuel Tardieu
a0a347e25c
fix(needless_if): don't expand macro invocations in the suggestion (#15960)
Fixes https://github.com/rust-lang/rust-clippy/issues/15959

changelog: [`needless_if`]: don't expand macro invocations in the
suggestion
2025-10-27 08:45:42 +00:00
Samuel Tardieu
da8965202a
refactor(double_comparison): clean-up, simplify lint logic (#15955)
- use let-chains
- rm macro
- add comments explaining linted cases

changelog: none
2025-10-27 08:03:05 +00:00
Samuel Tardieu
12b011b809
Lint precedence possible ambiguity between closure and method call
`|x: String| {x}.clone()` applies `clone()` to {x}, while
`|x: String| -> String {x}.clone()` applies `.clone()` to
the closure because a closure with an explicit return type
requires a block.

This extends the `precedence` lint to suggest using parentheses
around the closure definition when the closure would be cloned,
as in `(|x: String| -> String {x}).clone()`.
2025-10-27 07:58:41 +01:00
Jason Newcomb
25cbcb4331
refactor(lines_filter_map_ok): move to under methods/ (#15925)
changelog: none
2025-10-26 22:04:43 +00:00
Ada Alakbarova
ce2ef31ed6
fix(needless_if): don't expand macro invocations in the suggestion 2025-10-26 15:51:52 +01:00
Ada Alakbarova
aae10d749f
refactor(double_comparison): clean-up, simplify lint logic
- use let-chains
- rm macro
- add comments explaining linted cases
2025-10-26 10:49:08 +01: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
Ada Alakbarova
9145cee025
make the spans more precise 2025-10-23 19:02:34 +02:00
Ada Alakbarova
9fd359b53e
clean-up
- introduce `Kind`: a bit more type-safe and hopefully a bit faster
2025-10-23 19:02:25 +02: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
Samuel Tardieu
0c592df5a5
fix(match_as_ref): suggest as_ref when the reference needs to be cast (#15934)
I first implemented the naive version, which just talks about, and
suggests using, `Option::as_ref`. But the resulting error message
sounded a bit misleading -- after all, the manual implementation was
factually that of `Option::as_mut`, and we only suggest `as_ref` as a
means of downcasting. So then I added another help message to mention
the need for reference downcasting, which.. still looks awkward.

Honestly it might be the easiest to hide the reference downcasting into
the `.map` after all, so that it encapsulates _all_ the casting needed
following the switch to `as_ref`/`as_mut`.

changelog: [`match_as_ref`]: suggest `as_ref` when the reference needs
to be cast

r? @samueltardieu
2025-10-22 11:22: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
2bb3d0c396
refactor(elidable_lifetimes): harmonize suggestion-building logic with extra_unused_type_parameters (#15908)
It's nice to come up with a clever algorithm
(https://github.com/rust-lang/rust-clippy/pull/15667), but it's even
nicer to reuse logic that already exists elsewhere.

changelog: none

r? @samueltardieu as you reviewed the original PR
2025-10-22 10:15:01 +00:00
Ada Alakbarova
5ff804e9b2
misc: move infallible stuff out of the way 2025-10-22 11:59:21 +02:00
Zylos
bab7519d5b
Update mod.rs 2025-10-21 21:43:34 -04:00
Ada Alakbarova
17f194238d
Adapt the logic from extra_unused_type_parameters
.. and add some docs to both of them
2025-10-22 01:06:13 +02:00
Samuel Tardieu
c6c71afda1
refactor(option_as_ref_cloned): move the method_call call out of the check (#15917)
This is more consistent with what the other `methods/` lints do.

changelog: none
2025-10-21 22:49:09 +00: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
81d2300862
move to methods/, for real this time 2025-10-21 22:15:15 +02:00
Ada Alakbarova
37ebd4c97e
move the lint file to under methods/
WARNING: this commit won't compile
2025-10-21 22:14:59 +02: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
a8fa9e1627
clean-up 2025-10-21 16:48:37 +02:00
Ada Alakbarova
c5215b6d84
clean-up a bit 2025-10-21 15:36:06 +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
4e3fa960d4
refactor(option_as_ref_cloned): move the method_call call out of the check 2025-10-20 15:54:59 +02: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
Samuel Tardieu
95dd88d6c4
refactor(manual_div_ceil_: move to under operators/ (#15909)
changelog: none
2025-10-20 05:14:21 +00: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
9ee9fd00d0
refactor(manual_div_ceil): move to under operators/ 2025-10-20 00:05:38 +02:00
Ada Alakbarova
c6426f5dd7
Revert "fix(elidable_lifetime_names): avoid overlapping spans in suggestions"
This reverts commit 25881bfc34.
2025-10-19 18:32:21 +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
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
Diggory Blake
e8fec08b9c Restrict sysroot crate imports to those defined in this repo.
It's common to import dependencies from the sysroot via `extern crate`
rather than use an explicit cargo dependency, when it's necessary to use
the same dependency version as used by rustc itself. However, this is
dangerous for crates.io crates, since rustc may not pull in the
dependency on some targets, or may pull in multiple versions. In both
cases, the `extern crate` fails to resolve.

To address this, re-export all such dependencies from the appropriate
`rustc_*` crates, and use this alias from crates which would otherwise
need to use `extern crate`.
2025-10-15 13:17:25 +01: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