Commit graph

9838 commits

Author SHA1 Message Date
Alex Macleod
772ea35935 Fix diagnostic paths printed by dogfood test 2025-05-07 14:32:23 +00:00
Alex Macleod
737d3b3363 Remove some unused #![feature]s 2025-05-06 14:07:39 +00:00
yanglsh
e7acf5c9b9 fix: collapsible_if FP on block stmt before expr 2025-05-06 14:25:21 +08:00
Samuel Tardieu
50e0bf1b71
Gate collapsible_if let_chains lints on edition 2024 and MSRV (#14723)
The MSRV being for crates targeting 1.85-1.87 on edition 2024

This enables the lint for regular nightly users without the feature gate
enabled

r? @samueltardieu

Fixes https://github.com/rust-lang/rust-clippy/issues/14678

changelog: none
2025-05-06 05:40:37 +00:00
Alex Macleod
8c93668a71 Gate collapsible_if let_chains lints on edition 2024 and MSRV 2025-05-06 02:23:28 +00:00
Jason Newcomb
c1586e141f
Replace str path utils with new PathLookup type (#14705)
The `&[&str]` path based `clippy_utils` have been removed and replace
with a new type `PathLookup`:

-
[`match_trait_method`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.match_trait_method.html)
-
[`match_qpath`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.match_qpath.html)
-
[`match_path`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.match_path.html)
-
[`match_any_def_paths`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.match_any_def_paths.html)
-
[`match_def_path`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.match_def_path.html)
-
[`match_type`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/ty/fn.match_type.html)
-
[`get_trait_def_id`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.get_trait_def_id.html)

Internally `PathLookup` is a lazy call to `lookup_path` (the new name
for
[`def_path_res`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.def_path_res.html)
to distinguish it from
[`path_res`](https://doc.rust-lang.org/nightly/nightly-rustc/clippy_utils/fn.path_res.html))

The `invalid_paths` internal lint is removed, it could be reimplemented
but it feels redundant since every path should be covered by a test
anyway

### User facing changes

- `manual_saturating_arithmetic` now checks for `u32::MAX/MIN` instead
of only detecting the legacy numeric consts (`std::u32::MAX/MIN`),
`clippy::legacy_numeric_constants` will redirect usages of the legacy
versions to the new one

- `allow-invalid = true` now suppresses all invalid path warnings,
currently you can run into a warning that can't be ignored in some
situations, e.g. with `serde` without the `derive` feature

  ```
  warning: expected a macro, found a trait
   --> /home/gh-Alexendoo/temp/clippy.toml:2:5
    |
  2 |     { path = "serde::Serialize", allow-invalid = true },
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ```

- Re-exports of primitives types like `std::primitive::*` no longer work
in `disallowed-types`, this seems acceptable since it would be unusual
to deny a primitive this way rather than writing e.g. `usize`. Type
aliases such as `c_char` are unaffected

- A similar slight performance improvement to
https://github.com/rust-lang/rust-clippy/pull/14650
  ```bash
$ hyperfine -w 2 -p 'touch src/cargo/lib.rs' 'cargo +master clippy'
'cargo +lazy-paths clippy'
  ```
  ```
  Benchmark 1: cargo +master clippy
Time (mean ± σ): 6.829 s ± 0.064 s [User: 6.079 s, System: 0.673 s]
    Range (min … max):    6.705 s …  6.907 s    10 runs

  Benchmark 2: cargo +lazy-paths clippy
Time (mean ± σ): 6.765 s ± 0.064 s [User: 5.984 s, System: 0.698 s]
    Range (min … max):    6.636 s …  6.834 s    10 runs

  Summary
    cargo +lazy-paths clippy ran
      1.01 ± 0.01 times faster than cargo +master clippy
  ```

changelog: none
2025-05-05 21:46:40 +00:00
Jason Newcomb
f62f269658
Fix manual_unwrap_or_default FP on ref binding (#14731)
Closes rust-lang/rust-clippy#14716

changelog: [`manual_unwrap_or_default`] fix FP on ref binding
2025-05-05 21:45:13 +00:00
Alejandra González
689e62b3b2
fix: unused_async FP on default impl (#14720)
Closes rust-lang/rust-clippy#14704

changelog: [`unused_async`] fix FP on default impl
2025-05-05 00:43:30 +00:00
Alex Macleod
f23772ce8c Move lookup_path and similar into clippy_utils::paths 2025-05-04 17:13:02 +00:00
Alex Macleod
b768fbe4bc Replace str path utils with new PathLookup type 2025-05-04 15:26:37 +00:00
Samuel Moelius
7b7a9a6ece Don't warn about unloaded crates
Fixes https://github.com/rust-lang/rust-clippy/pull/14397#issuecomment-2848328221
2025-05-04 09:22:29 -04:00
yanglsh
7106e21227 fix: manual_unwrap_or_default FP on ref binding 2025-05-03 23:38:52 +08:00
Manish Goregaokar
56f018286b
fix: manual_slice_fill FP on IndexMut overload (#14719)
Closes rust-lang/rust-clippy#14685

changelog: [`manual_slice_fill`] fix FP on `IndexMut` overload
2025-05-02 17:07:07 +00:00
yanglsh
33ea0b482c fix: manual_slice_fill FP on IndexMut overload 2025-05-02 15:09:00 +08:00
Philipp Krones
43797675c2
Merge remote-tracking branch 'upstream/master' into rustup 2025-05-01 09:50:42 +02:00
yanglsh
782c6065c4 fix: unused_async FP on default impl 2025-05-01 14:50:23 +08:00
Manish Goregaokar
549107dbad
Fix zombie_processes FP inside closures (#14696)
Closes rust-lang/rust-clippy#14677

changelog: [`zombie_processes`] fix FP inside closures
2025-04-28 15:41:40 +00:00
Jason Newcomb
542762e8af
fix: unused_unit suggests wrongly when unit never type fallback (#14609)
Closes rust-lang/rust-clippy#14577.

Migrate this lint to late pass and avoids `unit_never_type_fallback`
since it is no longer permitted in Rust 2024.

changelog: [`unused_unit`] fix wrong suggestions when unit never type
fallback
2025-04-27 19:14:47 +00:00
Timo
0dd9722cdc
Replace some Symbol::as_str usage (#14679)
Follow up to https://github.com/rust-lang/rust-clippy/pull/14650

Replaces uses in the form `s.as_str() == "literal"`

r? @y21

changelog: none
2025-04-27 12:56:14 +00:00
yanglsh
5123ad5904 Fix zombie_processes FP inside closures 2025-04-27 16:28:06 +08:00
yanglsh
5d8fb77872 fix: unused_unit suggests wrongly when unit never type fallback 2025-04-27 15:02:49 +08:00
dswij
39a408664b
manual_div_ceil: fix suggestions when macro is involved (#14666)
here is my small fix

changelog: fix suggestion span to avoid showing macro name in
`.div_ceil()` suggestion

i changed this line
`let divisor_snippet = snippet_with_applicability(cx,
rhs.spansource_callsite(), "..", applicability);`
to this line
`let divisor_snippet = snippet_with_applicability(cx, rhs.span, "..",
applicability);`
to fix problem where this warning in macro expands like this
```rust
4  |         let _ = (x + 7) / 8;
   |                 ^^^^^^^^^^^ help: consider using `.div_ceil()`: `x.div_ceil(y!())`
```
[play it
yourself](https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=397aa8cd2ffffb24a286fbddbc75446c)

as you can see here it looks like `x.div_ceil(y!())` and contains macro
signature
so i fixed this problem, i will look closely if there any more problems
like this and fix them in order

**Related issue**

fixes
[rust-lang/rust-clippy#14665](https://github.com/rust-lang/rust-clippy/issues/14665)
2025-04-27 03:13:19 +00:00
dswij
58cfdb72a8
fix: equatable_if_let suggests wrongly when involving reference (#14504)
Closes #8710

changelog: [`equatable_if_let`] fix wrong suggestions when involving
reference
2025-04-26 14:52:32 +00:00
Jason Newcomb
ff307bac14
fix: unnecessary_cast suggests extra brackets when in macro (#14643)
Closes rust-lang/rust-clippy#14640

changelog: [`unnecessary_cast`] fix extra brackets in suggestions when
in macro
2025-04-26 11:55:15 +00:00
yanglsh
ad69347912 fix: equatable_if_let suggests wrongly when involving reference 2025-04-26 15:51:40 +08:00
yanglsh
3f72ffa80e fix: unnecessary_cast suggests extra brackets when in macro 2025-04-26 15:09:04 +08:00
yuk1ty
148c9a1981 Fix error message for static references or mutable references 2025-04-26 14:48:30 +09:00
Alex Macleod
7b337f6e25 Replace some Symbol::as_str usage 2025-04-25 01:03:03 +00:00
Kivooeo
fc12b5b6d8 fix-issue-14665 2025-04-25 01:39:35 +05:00
Alex Macleod
736be8bbb1 Consistently refer to the ? operator 2025-04-24 13:40:57 +00:00
bendn
6e64338a49 Suggest {to,from}_ne_bytes for transmutations between arrays and integers, etc 2025-04-24 13:14:36 +07:00
Alex Macleod
7c5312bdab Reword needless_question_mark diagnostics and docs 2025-04-23 19:07:27 +00:00
Philipp Krones
ff428d91c2 Merge commit '0621446356' into clippy-subtree-update 2025-04-22 18:24:43 +02:00
Alex Macleod
2422f0b9ac
Restrict the cases where ptr_eq triggers (#14526)
`ptr_eq` was recently enhanced to lint on more cases of raw pointers
comparison:

- lint on all raw pointer comparison, by proposing to use
`[core|std]::ptr::eq(lhs, rhs)` instead of `lhs == rhs`;
- removing one symetric `as usize` on each size if needed
- peeling any level of `as *[const|mut] _` if the remaining expression
can still be coerced into the original one (i.e., is a ref or raw
pointer to the same type as before)

The current change restricts the lint to the cases where at least one
level of symetric `as usize`, or any conversion to a raw pointer, could
be removed. For example, a direct comparaison of two raw pointers will
not trigger the lint anymore.

changelog: [`ptr_eq`]: do not lint when comparing two raw pointers
directly with no casts involved

Fixes rust-lang/rust-clippy#14525
2025-04-22 16:05:34 +00:00
Jason Newcomb
c3fb102a41
Consider side effects when rewriting iterator behaviors (#14490)
Closes #9191
Closes #14444
Closes #8055

Adds a new helper to partly check for side effects by recursively
checking if the iterator type contains closures with mutable captures.

changelog: [`double_ended_iterator_last`] fix FP when iter has side
effects
changelog: [`needless_collect`] fix lint not consider side effects
2025-04-22 13:21:54 +00:00
yanglsh
a50e043d32 Expand mutable capture check for is_iter_with_side_effects() 2025-04-22 20:55:07 +08:00
Jason Newcomb
aeb6ac9a0b
Fix question_mark suggesting when type is behind Deref include parentheses (#14655)
Close rust-lang/rust-clippy#14615

changelog: [`question_mark`]: when type is behind Deref include
parentheses
2025-04-22 01:58:56 +00:00
Alexey Semenyuk
7a4d523200 Fix question_mark suggesting when type is behind Deref include parentheses 2025-04-21 22:25:36 +05:00
Timo
083ea7e6c4
manual_ok_err: don't lint subpatterns (#14661)
Fixes https://github.com/rust-lang/rust-clippy/issues/14660

changelog: none
2025-04-21 14:47:02 +00:00
Timo
cc00c77607
Replace interning of string literals with preinterned symbols (#14650)
On
8ddf3676d1
it's a slight improvement

```
$ hyperfine -w 2 -r 100 -p 'touch src/cargo/lib.rs' 'cargo +master clippy' 'cargo +preintern clippy'
Benchmark 1: cargo +master clippy
  Time (mean ± σ):      6.908 s ±  0.063 s    [User: 6.134 s, System: 0.690 s]
  Range (min … max):    6.757 s …  7.045 s    100 runs

Benchmark 2: cargo +preintern clippy
  Time (mean ± σ):      6.815 s ±  0.065 s    [User: 6.039 s, System: 0.692 s]
  Range (min … max):    6.653 s …  6.968 s    100 runs

Summary
  cargo +preintern clippy ran
    1.01 ± 0.01 times faster than cargo +master clippy
```

Part 1 of removing `Symbol <-> str` conversions

changelog: none
2025-04-21 14:38:52 +00:00
dswij
f829f8cd5b
Make borrow_as_ptr flag implicit casts as well (#14408)
While I like replacing `&x` by `&raw const x` and `&mut x` by `&raw mut
x`, I'm less sure I like the suggested reborrows such as `&raw const
*p`. There was one in Clippy sources, see the PR diff.

@RalfJung, any opinion on this?

Fix #14406

changelog: [`borrow_as_ptr`]: lint implicit casts as well
2025-04-21 12:38:11 +00:00
Alejandra González
48430c2970
iter_kv_map: recognize references on maps as well (#14596)
Fix rust-lang/rust-clippy#14595

changelog: [`iter_kv_map`]: recognize references on maps as well
2025-04-21 01:44:34 +00:00
Alex Macleod
8843067aec manual_ok_err: don't lint subpatterns 2025-04-20 22:52:40 +00:00
Alex Macleod
077475f1a5
ptr_cast_constness: show snippet from the right context (#14622)
changelog: [`ptr_cast_constness`]: do not replace suggestion by content
of macro

Fixes rust-lang/rust-clippy#14621
2025-04-20 17:18:52 +00:00
yanglsh
c6d76bb69d fix: needless_collect does not consider side effects 2025-04-19 16:45:58 +08:00
yanglsh
86a10f01d1 fix: double_ended_iterator_last FP when iter has side effects 2025-04-19 16:45:58 +08:00
Alex Macleod
b52bd96713 Replace interning of string literals with preinterned symbols 2025-04-18 22:44:16 +00:00
Timo
781fdab9a9
Move internal lints to their own crate (#13223)
This makes it so switching the internal feature on/off no longer
rebuilds `clippy_lints`.

r? @flip1995

changelog: none
2025-04-18 12:04:08 +00:00
Timo
bcd76c3384
empty_enum_variants_with_brackets: Do not lint reachable enums and enum variants used as functions in the same crate (#12971)
Fixes #12551

changelog: [`empty_enum_variants_with_brackets`]: Do not lint reachable
enums or enums which are used as functions within the same crate.

r? @xFrednet
2025-04-18 09:45:02 +00:00
Aneesh K
fa9254feaf
Do not lint reachable enums and enum variants used as functions in the same crate 2025-04-17 21:59:06 +05:30