Commit graph

12667 commits

Author SHA1 Message Date
Alex Macleod
efcf1f5730 Split needless_lifetime '_ suggestions into elidable_lifetime_names 2025-02-24 14:23:33 +00:00
Jason Newcomb
0fa170621d
fix: too_long_first_doc_paragraph suggests wrongly when first line too long (#14276)
Fixes #14274

changelog: [`too_long_first_doc_paragraph`]: fix wrong suggestion when
first line too long
2025-02-24 10:04:01 +00:00
Manish Goregaokar
35d5ee0e41
add MSRV check for repeat_vec_with_capacity (#14126)
changelog: [`repeat_vec_with_capacity`]: add MSRV check
2025-02-23 15:50:44 +00:00
dswij
d92da0fb32
manual_slice_fill: do not initialize from the iterator (#14191)
```rust
let mut tmp = vec![1, 2, 3];
for b in &mut tmp {
    *b = !*b;
}
```

must not suggest the invalid `tmp.fill(!*b)`.

In addition, there is another commit which cleans up two function calls
with no effect.

Fix #14189

changelog: [`manual_slice_fill`]: ensure that the initialization
expression doesn't reference the iterator
2025-02-22 15:28:15 +00:00
Timo
d5488b3b63
useless_asref: add a check for Clone before suggesting the use of .clone() (#14174)
fixes #12357

changelog: [`useless_asref`]: don't suggest to use `.clone()` if the
target type doesn't implement the `Clone` trait
2025-02-22 14:04:57 +00:00
yanglsh
2ad3520d51 fix: too_long_first_doc_paragraph suggests wrongly when first line too long 2025-02-22 19:05:07 +08:00
Andre Bogus
6366cca439 add io_other_error lint 2025-02-21 22:08:31 +01:00
Alejandra González
649cef0e81
rename MANUAL_DIV_CEIL MSRV alias and add missing conf info for manual_div_ceil (#14263)
- The name of an MSRV alias should describe its functionality, and it is
not appropriate for it to be the same as the name of the lint that uses
it.
- Additionally, while `manual_div_ceil` allows setting MSRV, this is not
correctly reflected in the configuration information.

changelog: none
2025-02-21 18:02:30 +00:00
Samuel Tardieu
4ac7a5361b Represent the capability instead of the lint name in msrv aliases
`INTEGER_BITS` better represents the addition of the `BITS` value on the
primitive integer types.
2025-02-21 09:44:18 +01:00
Samuel Tardieu
acfbbc65b5 Remove obsolete comment and simplify code
The `IoBufRead` diagnostic has been added during the latest rustup.
2025-02-20 18:03:40 +01:00
Philipp Krones
238edf273d
Rustup (#14262)
r? @ghost

changelog: none
2025-02-20 14:59:15 +00:00
Timo
bbf65f008d
add owned_cow lint (#13948)
Closes #13697.

---

changelog: add [`owned_cow`] lint
2025-02-20 14:53:45 +00:00
Fridtjof Stoldt
7c889ac449
Changelog for Clippy 1.85 🦜 (#14229)
Roses are red,
Biolets are blue,
A typo happened,
too late now

You might be asking,
what are Biolets now?
And to be honest,
I have no clue

---

The cat of this release is `Vera` nominated by @and-reas-se

<img height=500
src="https://github.com/user-attachments/assets/82e6fccc-1f6d-4d29-b6bb-0bd4f3584593"
alt="The cats of this Clippy release" />

Cats for the next release can be nominated in the comments :D

---

changelog: none
2025-02-20 14:32:01 +00:00
Philipp Krones
8844a969ca
Bump Clippy version -> 0.1.87 2025-02-20 15:26:51 +01:00
lapla-cogito
3c9a0ab38c
rename the MSRV alias MANUAL_DIV_CEIL to DIV_CEIL 2025-02-20 23:26:51 +09:00
Philipp Krones
12025085b9
Merge remote-tracking branch 'upstream/master' into rustup 2025-02-20 15:26:07 +01:00
Andre Bogus
83f5cbad18 add owned_cow lint 2025-02-19 23:12:46 +01:00
Catherine Flores
d8ecde0e43
fix: map_entry FP on struct member (#14151)
fixes #13934

I modified the part for checking if the map is used so that it can check
field and index exprs.

changelog: [`map_entry`]: fix FP on struct member
2025-02-19 09:07:34 +00:00
Catherine Flores
975a813c5a
.last() to .next_back() requires a mutable receiver (#14140)
In the case where `iter` is a `DoubleEndedIterator`, replacing a call to
`iter.last()` (which consumes `iter`) by `iter.next_back()` (which
requires a mutable reference to `iter`) cannot be done when `iter` is a
non-mutable binding which is not a mutable reference. When possible, a
local immutable binding is made into a mutable one.

Also, the applicability is switched to `MaybeIncorrect` and a note is
added to the output when the element types have a significant drop,
because the drop order will potentially be modified because
`.next_back()` does not consume the iterator nor the elements before the
last one.

Fix #14139

changelog: [`double_ended_iterator_last`]: do not trigger on
non-reference immutable receiver, and warn about possible drop order
change
2025-02-19 09:05:46 +00:00
Samuel Tardieu
dcd643a652 double_ended_iterator_last: note when drop order is changed
`iter.last()` will drop all elements of `iter` in order, while
`iter.next_back()` will drop the non-last elements of `iter` when
`iter` goes out of scope since `.next_back()` does not consume its
argument.

When the transformation proposed by `double_ended_iterator_last` would
concern an iterator whose element type has a significant drop, a note is
added to warn about the possible drop order change, and the suggestion
is switched from `MachineApplicable` to `MaybeIncorrect`.
2025-02-19 09:26:39 +01:00
yanglsh
e2cdfed0ea fix: map_entry FP on struct member 2025-02-19 16:25:18 +08:00
Alejandra González
48fffe7db3
add a preferred fix for cast_possible_wrap description (#14225)
close #9250

changelog: none
2025-02-18 23:47:57 +00:00
Samuel Tardieu
45f7a60d31 .last() to .next_back() requires a mutable receiver
In the case where `iter` is a `DoubleEndedIterator`, replacing a call to
`iter.last()` (which consumes `iter`) by `iter.next_back()` (which
requires a mutable reference to `iter`) cannot be done when `iter`
Is not a mutable binding or a mutable reference.

When `iter` is a local binding, it can be made mutable by fixing its
definition site.
2025-02-18 13:51:01 +01:00
cyrgani
758ec1d332 remove an unneeded #![feature] 2025-02-18 11:04:53 +01:00
Nicholas Nethercote
835e6a694b Move methods from Map to TyCtxt, part 2.
Continuing the work started in #136466.

Every method gains a `hir_` prefix, though for the ones that already
have a `par_` or `try_par_` prefix I added the `hir_` after that.
2025-02-18 10:17:44 +11:00
Manish Goregaokar
437014b951
Update mention of ref_to_mut to invalid_reference_casting (#14241)
This lint was renamed in 50da77521e.

While I'm here convert the list of separate lints into a proper list for
ease of use.

changelog: none
2025-02-17 18:11:42 +00:00
Tamir Duberstein
01085cb16a
Update mention of ref_to_mut to invalid_reference_casting
This lint was renamed in 50da77521e.

While I'm here convert the list of separate lints into a proper list for
ease of use and clarify which lints are in clippy and which are in rustc.
2025-02-17 10:45:27 -05:00
Samuel Tardieu
66d19d84ae manual_ok_err: blockify the replacement of an else if …
If the part being replaced is an `if` expression following an `else`,
the replacement expression must be blockified.
2025-02-17 15:49:44 +01:00
Matthias Krüger
42114c9633 Rollup merge of #137101 - GrigorenkoPV:str-inherent-lint, r=Urgau
`invalid_from_utf8[_unchecked]`: also lint inherent methods

Addressing https://github.com/rust-lang/rust/issues/131114#issuecomment-2646663535

Also corrected a typo: "_an_ invalid literal", not "_a_ invalid literal".
2025-02-17 06:37:38 +01:00
Nicholas Nethercote
91481e3bcf Overhaul the intravisit::Map trait.
First of all, note that `Map` has three different relevant meanings.
- The `intravisit::Map` trait.
- The `map::Map` struct.
- The `NestedFilter::Map` associated type.

The `intravisit::Map` trait is impl'd twice.
- For `!`, where the methods are all unreachable.
- For `map::Map`, which gets HIR stuff from the `TyCtxt`.

As part of getting rid of `map::Map`, this commit changes `impl
intravisit::Map for map::Map` to `impl intravisit::Map for TyCtxt`. It's
fairly straightforward except various things are renamed, because the
existing names would no longer have made sense.

- `trait intravisit::Map` becomes `trait intravisit::HirTyCtxt`, so named
  because it gets some HIR stuff from a `TyCtxt`.
- `NestedFilter::Map` assoc type becomes `NestedFilter::MaybeTyCtxt`,
  because it's always `!` or `TyCtxt`.
- `Visitor::nested_visit_map` becomes `Visitor::maybe_tcx`.

I deliberately made the new trait and associated type names different to
avoid the old `type Map: Map` situation, which I found confusing. We now
have `type MaybeTyCtxt: HirTyCtxt`.
2025-02-17 13:21:35 +11:00
Nicholas Nethercote
8cf9eea5b3 Move some Map methods onto TyCtxt.
The end goal is to eliminate `Map` altogether.

I added a `hir_` prefix to all of them, that seemed simplest. The
exceptions are `module_items` which became `hir_module_free_items` because
there was already a `hir_module_items`, and `items` which became
`hir_free_items` for consistency with `hir_module_free_items`.
2025-02-17 13:21:02 +11:00
Pavel Grigorenko
f68f0b3e11 clippy: string_from_utf8_as_bytes: also detect inherent from_utf8 2025-02-16 16:34:51 +03:00
xFrednet
ef7e9fe704
Update version attribute for 1.85 clippy lints 2025-02-16 13:38:59 +01:00
lapla-cogito
a12d5a0285
add suggestion example for cast_possible_wrap 2025-02-16 14:22:18 +09:00
lapla-cogito
1c0e120d8b
apply manual_contains to Clippy sources 2025-02-16 06:22:03 +09:00
lapla-cogito
fd17bfe57d
add manual_contains lint 2025-02-16 06:21:57 +09:00
lapla-cogito
91548d0fe3
prevent useless_asref from suggesting .clone() on types without the Clone trait 2025-02-16 05:59:53 +09:00
Samuel Tardieu
44aa75fd2a manual_slice_fill: initializer must not reference the iterator
```rust
let mut tmp = vec![1, 2, 3];
for b in &mut tmp {
    *b = !*b;
}
```

must not suggest the invalid `tmp.fill(!*b)`.
2025-02-15 15:56:41 +01:00
Samuel Tardieu
510d3b69fc Use clippy_utils::is_mutable() in unnecessary_struct_initialization 2025-02-15 15:56:41 +01:00
Samuel Tardieu
35ad69c124 Cleanup: remove useless span_is_local() calls in manual_slice_fill
In both instances, `!assign_val.span.from_expansion()` – which is more
restrictive than `span_is_local(assign_val.span)` – has been required
already.
2025-02-15 15:56:41 +01:00
alexey semenyuk
133882920b
Add example for macro_use 2025-02-15 14:47:18 +05:00
Jason Newcomb
0dd5c4ddeb
Fix used_underscore_items lint uses of foreign functions (#14205)
Fixed #14156

changelog: none
2025-02-15 02:46:49 +00:00
Jason Newcomb
4e899e16f9
unnecessary_map_or: do not consume the comparison value if it does not implement Copy (#14207)
Fix #14201

changelog: [`unnecessary_map_or`]: do not consume the comparison value
if it does not implement `Copy`
2025-02-15 02:45:59 +00:00
Catherine Flores
50ecb6e846
doc_link_code: add check for links with code spans that render weird (#14121)
This is the lint described at
https://github.com/rust-lang/rust/pull/136308#issuecomment-2625485331
that recommends using HTML to nest links inside code.

changelog: [`doc_link_code`]: warn when a link with code and a code span
are back-to-back
2025-02-14 13:55:33 +00:00
Timo
b83762c578
Fix literal_string_with_formatting_args lint emitted when it should not (#13953)
Fixes #13885.
Fixes https://github.com/rust-lang/rust-clippy/issues/14007.

Problem was that I forgot to check whether or not the `span` was a
"real" one. Because if not, then it starts pointing to pretty much only
wrong content, hence the problems we saw with clippy linting on
`clippy.toml`.

changelog: Fix `literal_string_with_formatting_args` lint emitted when
it should not

r? @samueltardieu
2025-02-13 16:18:44 +00:00
bors
ef7aa51f1c Auto merge of #136593 - lukas-code:ty-value-perf, r=oli-obk
valtree performance tuning

Summary: This PR makes type checking of code with many type-level constants faster.

After https://github.com/rust-lang/rust/pull/136180 was merged, we observed a small perf regression (https://github.com/rust-lang/rust/pull/136318#issuecomment-2635562821). This happened because that PR introduced additional copies in the fast reject code path for consts, which is very hot for certain crates: 6c1d960d88/compiler/rustc_type_ir/src/fast_reject.rs (L486-L487)

This PR improves the performance again by properly interning the valtrees so that copying and comparing them becomes faster. This will become especially useful with `feature(adt_const_params)`, so the fast reject code doesn't have to do a deep compare of the valtrees.

Note that we can't just compare the interned consts themselves in the fast reject, because sometimes `'static` lifetimes in the type are be replaced with inference variables (due to canonicalization) on one side but not the other.

A less invasive alternative that I considered is simply avoiding copies introduced by https://github.com/rust-lang/rust/pull/136180 and comparing the valtrees it in-place (see commit: 9e91e50ac5 / perf results: https://github.com/rust-lang/rust/pull/136593#issuecomment-2642303245), however that was still measurably slower than interning.

There are some minor regressions in secondary benchmarks: These happen due to changes in memory allocations and seem acceptable to me. The crates that make heavy use of valtrees show no significant changes in memory usage.
2025-02-13 15:27:30 +00:00
Samuel Tardieu
f826193aec unnecessary_map_or: do not consume the non-Copy comparison value 2025-02-13 12:00:38 +01:00
Lukas Markeffsky
a75cc61f99 intern valtrees 2025-02-13 00:38:17 +01:00
llogiq
4129f5c824
New lint: mem_replace_option_with_some (#14197)
`mem::replace(opt, Some(v))` can be replaced by `opt.replace(v)`.

Close #14195

changelog: [`mem_replace_option_with_some`]: new lint
2025-02-12 19:02:06 +00:00
Samuel Tardieu
342ac8ee28 New lint: mem_replace_option_with_some
`mem::replace(opt, Some(v))` can be replaced by `opt.replace(v)`.
2025-02-12 19:57:14 +01:00