Commit Graph

13133 Commits

Author SHA1 Message Date
Samuel Tardieu e16801e68c Use symbols instead of &str when possible 2025-05-19 22:47:57 +02:00
Samuel Tardieu ebc2a68fe8 Add new useless_concat lint (#13829)
Fixes #13793.

Interestingly enough, to actually check that the macro call has at least
two arguments, we need to use the rust lexer after getting the original
source code snippet.

changelog: Add new `useless_concat` lint
2025-05-19 15:11:37 +00:00
Alejandra González df33aaf540 Check if dropping an expression may have indirect side-effects (#14594)
It is not enough to check if an expression type implements `Drop` to
determine whether it can have a significant side-effect.

Also, add tests for unchecked cases which were explicitly handled in the
code, such as checking for side effect in a `struct`'s fields, or in its
base expression.

Fix rust-lang/rust-clippy#14592

changelog: [`no_effect_underscore_binding`]: do not propose to remove
the assignment of an object if dropping it might indirectly have a
visible side effect
2025-05-19 11:41:40 +00:00
Samuel Tardieu 375c65030b fix: unnecessary_to_owned FP when map key is a reference (#14834)
Closes rust-lang/rust-clippy#14833

changelog: [`unnecessary_to_owned`] fix FP when map key is a reference
2025-05-18 19:49:20 +00:00
yanglsh 492c4e197d fix: unnecessary_to_owned FP when map key is a reference 2025-05-19 00:27:53 +08:00
Samuel Tardieu b7caa1b3e0 Do not call TyCtxt::type_of() on a trait 2025-05-18 09:38:19 +02:00
Timo da7b678992 empty_struct_with_brackets: do not lint code coming from macro expansion (#14623)
Do not attempt to fetch a snippet from expansion. Without this change,
the inside of macros could[*] be shown as the source of the problem.

[*] Due to the way the source code is processed and reparsed in this
macro, the declarative macro has to be located outside the current
source file for the bug to appear. Otherwise, the macro call itself will
be (mis)identified as a potential `struct` field definition and the lint
will not trigger.

changelog: [`empty_struct_with_brackets`]: do not lint code coming from
macro expansion
2025-05-17 10:43:54 +00:00
Timo daeb6a1d18 Misc changes (#14702)
This mainly fixes `with_leading_whitespace` not always adding the
whitespace it can.

changelog: None
2025-05-17 10:40:21 +00:00
Jason Newcomb 9d47e0c8ce clippy_dev: remove the need for markers when bumping the version 2025-05-17 04:27:39 -04:00
Michael Hackner e666b83b11 excessive_precision: Fix false positive when exponent has leading zero 2025-05-16 21:35:09 -07:00
Samuel Tardieu dcd8bb6d7e Skip inner ordering checking in presence of #[repr(…)] (#14610)
A representation attribute `#[repr(…)]` might indicate that the ordering
of the fields or the variants is dictated by the API the code is
interfacing with. Better not lint with `arbitrary_source_item_ordering`
in this case.

changelog: [`arbitrary_source_item_ordering`]: do not lint inside items
with `#[repr]` attribute
2025-05-16 19:34:32 +00:00
Samuel Tardieu 604b7b0c5c Extend cargo dev rename_lint (#14633)
Based on rust-lang/rust-clippy#14616

Extends `rename_lint` to handle more cases and makes `update_lints` sort
`deprecated_lints.rs`.

changelog: None
2025-05-16 15:06:30 +00:00
llogiq 94cfebb397 Rewrite non_copy_const (#13207)
fixes #12979
fixes #12951
fixes #13233

Tests still need to be finished and the docs still need to be updated,
but this should otherwise ready.

changelog: Lint `declare_interior_mutable_const` and
`borrow_interior_mutable_const` more precisely
2025-05-16 15:05:36 +00:00
llogiq 5cb7e4039e Reenable linting on UFCS deref calls (#14808)
Was disabled in rust-lang/rust-clippy#10855 due to a broken suggestion.
This will only lint if a type is not proveded (e.g. `T::deref`).

changelog: none
2025-05-16 14:47:34 +00:00
Alejandra González 5239b7fa2c unnecessary_wraps: do not include the whole body in the lint span (#14777)
Using the function declaration, by stripping the body, is enough to
convey the lint message.

changelog: [`unnecessary_wraps`]: do not include the whole body in the
lint span

Closes rust-lang/rust-clippy#14773
2025-05-16 14:24:58 +00:00
Samuel Tardieu feb70b51c4 match_same_arms, ifs_same_cond: lint once per same arm/condition (#14637)
A large fraction of the lints emitted in CI lintcheck come from [this
`match`](https://github.com/unicode-rs/unicode-normalization/blob/v0.1.23/src/tables.rs#L34289),
currently for `n` same arms `((n - 1) * n)/2` lints are emitted, with
this change it will be emitted as a single lint

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

changelog: none
2025-05-16 14:16:45 +00:00
Alex Macleod 39ab00a3a1 match_same_arms, ifs_same_cond: lint once per same arm/condition 2025-05-16 12:56:25 +00:00
Jason Newcomb 27acbf2c66 Reenable linting on UFCS deref calls. 2025-05-16 06:45:08 -04:00
Jason Newcomb b3f490202b clippy_dev: order deprecated_lints.rs in update_lints 2025-05-16 06:43:52 -04:00
Jason Newcomb 7c41ec7395 Reword declare_interior_mutable_const and
`borrow_interior_mutable_const` messages to be less assertive.
Update documentation for both lints.
2025-05-16 06:08:40 -04:00
Jason Newcomb 57782e0ff1 Rewrite non_copy_const 2025-05-16 06:08:35 -04:00
llogiq 95d7eda0b4 comparison_chain: do not lint on 2 blocks expression (#14811)
Clippy should not lint 2 blocks expression for comparison_chain.

Fixes rust-lang/rust-clippy#4725

changelog: [`comparison_chain`]: do not lint 2 blocks expression
2025-05-16 06:52:35 +00:00
llogiq ff5e626837 Fix false positive of useless_conversion when using .into_iter().any() (#14800)
Fixes: rust-lang/rust-clippy#14656

changelog: Fix [`useless_conversion`] false positive when using
`.into_iter().any()`.
2025-05-16 06:49:42 +00:00
Samuel Tardieu a1931dd7cc unnecessary_wraps: do not include the whole body in the lint span
Using the function declaration, by stripping the body, is enough to
convey the lint message.
2025-05-15 19:37:06 +02:00
Philipp Krones 367073195a Bump Clippy version -> 0.1.89 2025-05-15 19:19:46 +02:00
Philipp Krones 0bb1b5bd3b Merge remote-tracking branch 'upstream/master' into rustup 2025-05-15 19:19:08 +02:00
Georges Savoundararadj 34c6ba7354 comparison_chain: do not lint on 2 blocks expression
Clippy should not lint 2 blocks expression for comparison_chain.
2025-05-15 12:57:19 +02:00
relaxcn f6e95a5b23 Fix false positive of useless_conversion when using into_iter() 2025-05-15 03:05:01 +00:00
Guillaume Gomez 0d25090d26 Improve code and apply suggestions 2025-05-14 19:05:05 +02:00
dswij 40bead02a5 clippy_dev refactor (#14616)
Based on rust-lang/rust-clippy#13223

Various refactoring on `clippy_dev` before upgrading rename and
splitting `clippy_lints` into multiple crates.

Some improvements:
* The working directory is set to the root clippy directory. Running
from a subdirectory was kind of supported before sometimes. Now it just
works.
* File won't be written unless they're actually updated. Most of the
time they weren't written, but a few cases slipped through.
* Buffers are reused more for the negligible speed boost.

changelog: None
2025-05-14 16:44:08 +00:00
SLUCHABLUB 488e4e53d2 Add the allow_exact_repetitions option to the module_name_repetitions lint. 2025-05-14 10:49:01 +02:00
Jason Newcomb 373df5265e Post non_std_lazy_statics type warnings onto the right node (#14740)
When a `non_std_lazy_statics` warning is generated about an item type
which can be replaced by a standard library one, ensure that the lint
happens on the item HIR node so that it can be expected.

changelog: [`non_std_lazy_statics`]: generate the warning onto the right
node

Fixes rust-lang/rust-clippy#14729

Note that this doesn't change anything on lints generated for the
`lazy_static::lazy_static` macro because the `expect` attribute cannot
be applied to a macro.
2025-05-14 05:49:50 +00:00
llogiq 7bac114c86 Add new lint: cloned_ref_to_slice_refs (#14284)
Added lint for catching `&[foo.clone()]` where foo is a reference and
suggests `std::slice::from_ref(foo)`.

changelog: new lint: [`cloned_ref_to_slice_refs`]
2025-05-13 05:32:33 +00:00
asdfish 40e1b0ed00 add lint cloned_ref_to_slice_refs
remove merge

removed false positive and improved tests

clarify known problems for `cloned_ref_to_slice_refs`
2025-05-12 21:12:58 -04:00
Jason Newcomb a9beb8b68d clippy_dev: Refactor token parsing to avoid macros. 2025-05-12 17:07:53 -04:00
Jason Newcomb 97abf33fa0 clippy_dev: Split gathering lint decls from parsing deprecated lints. 2025-05-12 17:07:53 -04:00
llogiq 83248e57e9 Fix messages for type_repetition_in_bounds (#14752)
changelog: [`type_repetition_in_bounds`]: include all generic bounds in
suggestion, clearer message which now includes the repeated type name

Fixes rust-lang/rust-clippy#14744
2025-05-12 16:37:11 +00:00
Samuel Tardieu c6a23f8fbd Include all bounds in bounds consolidation
Also, include the type name in the lint message, and simplify the span
computation.
2025-05-12 18:32:17 +02:00
llogiq 459364b971 return_and_then: only lint returning expressions (#14783)
If an expression is not going to return from the current function of
closure, it should not get linted.

This also allows `return` expression to be linted, in addition to the
final expression. Those require blockification and proper indentation.

changelog: [`return_and_then`]: only lint returning expressions

Fixes rust-lang/rust-clippy#14781
2025-05-12 16:01:55 +00:00
llogiq 62ba9969a4 Fix clippy::version of elidable_lifetime_names to 1.87 (#14654)
relates to rust-lang/rust-clippy#14653

changelog: [`elidable_lifetime_names`]: Fix clippy version that this
lint was introduced in.

It might be good to have some automation to check that the version is
correct.
IIUC the version should be the current nightly version at the time a PR
is merged.
If a release happens while a PR is open, the version needs to be bumped
- this is easy to forget.
2025-05-12 15:53:05 +00:00
llogiq b363499457 Add new confusing_method_to_numeric_cast lint (#13979)
Fixes https://github.com/rust-lang/rust-clippy/issues/13973.

I don't think we can make `fn_to_numeric_cast_any` to be emitted in some
special cases. Its category cannot be changed at runtime.

I think in this case, the best might be a specialized new lint so we can
target exactly what we want.

----

changelog: Add new `confusing_method_to_numeric_cast` lint
2025-05-12 15:27:33 +00:00
Guillaume Gomez 7b06d2b776 Move concat macro path into clippy_utils::paths 2025-05-12 14:14:45 +02:00
Guillaume Gomez a8679816dc Add new useless_concat lint 2025-05-12 14:14:45 +02:00
Philipp Krones 2ce5451850 Changelog for Clippy 1.87 🦡 (#14748)
Violets are red,
Roses are blue,
It’s wrong on purpose —
We don’t break tradition.

<hr>

This is cat-penguin of this release [nominated
by](https://github.com/rust-lang/rust-clippy/pull/12224#issuecomment-1927555104)
@xFrednet some time ago:

![image](https://github.com/user-attachments/assets/49bd7783-9d56-4a15-b026-1c7e799ea7ba)

Cats for the next release can be traditionally nominated in the comments
:D
Please be more active and cat-minded 😻

<hr>

changelog: none

r? flip1995
2025-05-12 10:00:01 +00:00
Alexey Semenyuk 55b5c835c5 Changelog for Clippy 1.87 2025-05-12 14:50:27 +05:00
Samuel Tardieu c040e9f6fc return_and_then: only lint returning expressions
If an expression is not going to return from the current function of
closure, it should not get linted.

This also allows `return` expression to be linted, in addition to the
final expression. Those require blockification and proper indentation.
2025-05-11 18:43:01 +02:00
Samuel Tardieu 9ed53b85b7 Fix ICE in missing_const_for_fn
The `mir_drops_elaborated_and_const_checked` query result has been
stolen already and cannot be borrowed again. Use the `optimized_mir`
query result instead.
2025-05-10 22:10:28 +02:00
Samuel Tardieu 5262ab2416 Fix unnecessary_unwrap emitted twice in closure (#14763) (#14770)
The problem is that `check_fn` is triggered by both function and
closure, and `visit_expr` can visit expressions in another closures
within a function or closure.

So just skip walking in a inner closure.

changelog: Fix [`unnecessary_unwrap`] emitted twice in closure which
inside in a function or another closure.

Fixes: rust-lang/rust-clippy#14763
2025-05-10 14:15:50 +00:00
relaxcn e61886a6d9 fix unnecessary_unwrap emitted twice in closure 2025-05-10 07:12:40 +08:00
Samuel Tardieu bde939058b char::is_digit() is const-stable only since Rust 1.87
The `to_digit_is_some()` lint suggests using `char::is_digit()`. It
should not trigger in const contexts before Rust 1.87.
2025-05-10 00:20:55 +02:00