Commit Graph

21500 Commits

Author SHA1 Message Date
Samuel Tardieu a487c601a4 Fix typo in check_clousure function name 2025-01-18 16:08:42 +01:00
llogiq 10045db878 Update doc wildcard_dependencies (#13810)
Currently
https://rust-lang.github.io/rust-clippy/master/index.html#wildcard_dependencies
doc doesn't contain explanation how it should be so added more details

----

changelog: none
2025-01-17 21:30:54 +00:00
alexey semenyuk 3f4aa9bf6e Update doc wildcard_dependencies 2025-01-18 01:20:22 +05:00
Alejandra González e359e88088 fix version search in the website (#14016)
fix #14015

changelog: none
2025-01-17 13:59:58 +00:00
lapla-cogito e307b2f0c6 fix version search in the website 2025-01-17 18:16:40 +09:00
Fridtjof Stoldt 8d0c0eb917 Pause assignments for @xFrednet (#14005)
I'll take a short break from auto assignments. My last few weeks have
been busy and I feel like getting my inbox back in order and taking a
short breather will be the best for me.

I still plan to review the PRs I'm currently assigned to and writing the
changelogs.

Jup that's it, have a good day, who ever is reading this =^.^=

changelog: none
2025-01-15 20:16:41 +00:00
xFrednet 7485970298 Pause assignments for @xFrednet 2025-01-15 21:08:43 +01:00
Manish Goregaokar 25d319d1b2 New lint useless-nonzero-new_unchecked (#13993)
changelog: [`useless-nonzero-new_unchecked`]: new lint

Close #13991

### What it does

Checks for `NonZero*::new_unchecked(<literal>)` being used in a `const`
context.

### Why is this bad?

Using `NonZero*::new_unchecked()` is an `unsafe` function and requires
an `unsafe` context. When used with an
integer literal in a `const` context, `NonZero*::new().unwrap()` will
provide the same result with identical
runtime performances while not requiring `unsafe`.

### Example
```no_run
const PLAYERS: NonZeroUsize = unsafe { NonZeroUsize::new_unchecked(3) };
```
Use instead:
```no_run
const PLAYERS: NonZeroUsize = NonZeroUsize::new(3).unwrap();
```
2025-01-15 01:00:54 +00:00
Alex Macleod 98761e4812 Rust 1.81 and later support elision with explicit self types (#13992)
Commit 9ef6e2199c introduced a check to
ensure that Clippy doesn't consider a lifetime present in an explicit
self types as being the default for an elided output lifetime. For
example, elision did not work in the case like:

```rust
  fn func(self: &Rc<Self>, &str) -> &str { … }
```

Since Rust 1.81.0, the lifetime in the self type is now considered the
default for elision. Elision should then be suggested when appropriate.

changelog: [`needless_lifetimes`]: suggest elision of lifetimes present
in explicit self types as well

r? @Alexendoo
because of #8278
2025-01-14 22:42:23 +00:00
Alejandra González 7e83ec57c6 Suggest manual_div_ceil even when right operand is a constant (#13951)
changelog: [`manual_div_ceil`]: lint constants as well

Fix #13950
2025-01-14 19:06:32 +00:00
dswij 8c1ea9fa01 Do not look for significant drop inside .await expansion (#13985)
Temporaries created inside the expansion of `.await` will be dropped and
need no checking. Looking inside the expansion will trigger false
positives.

changelog: [`significant_drop_in_scrutinee`]: do not falsely warn for
temporaries created by `.await` expansion

Fix #13927
2025-01-14 08:56:39 +00:00
Samuel Tardieu 35dbaf8a61 New lint useless-nonzero-new_unchecked 2025-01-13 23:38:29 +01:00
Samuel Tardieu 8b7cfc75dd Rust 1.81 and later support elision with explicit self types
Commit 9ef6e2199c introduced a check to
ensure that Clippy doesn't consider a lifetime present in an explicit
self type as being the default for an elided output lifetime. For
example, elision did not work in the case like:

```rust
  fn func(self: &Rc<Self>, &str) -> &str { … }
```

Since Rust 1.81.0, the lifetime in the self type is now considered
the default for elision. Elision should then be suggested when
appropriate.
2025-01-13 23:34:19 +01:00
Samuel Tardieu dc23fa5e6c Suggest manual_div_ceil even when right operand is a constant 2025-01-13 19:29:02 +01:00
Philipp Krones 6ab6c3c809 Select Rust edition 2024 for compiling Clippy (#13751)
The Cargo feature is no longer experimental and is enabled by default in
our nightly compiler.

changelog: Clippy now uses Rust edition 2024
2025-01-13 18:05:05 +00:00
Samuel Tardieu a4805ff610 Select edition 2024 2025-01-13 16:55:42 +01:00
Samuel Tardieu 6c367cb83f Update mdbook to 0.4.43 2025-01-13 16:55:42 +01:00
Alejandra González dcbe3adc4b auto-fix slow_vector_initialization in some cases (#13947)
changelog: [`slow_vector_initialization`]: auto-fix when appropriate

I made a change for `slow_vector_initialization` lint suggestion to use
`vec!` with size and remove the unneeded `resize` (or similar one) call
in #13912, while only the former one was suggested in the previous
implementation. Now, I think this lint can be automatically fixed with
no unnecessary code in some cases. I wrote “in some cases” because if
there are comments between vector declaration and `resize`, Clippy
shouldn't apply auto-fix because the comment may informational.
2025-01-13 15:12:01 +00:00
Samuel Tardieu 0456e4d6a1 In edition 2024, gen is a reserved keyword 2025-01-13 15:59:34 +01:00
Samuel Tardieu a73166872d In edition 2024, std::env::set_var is unsafe 2025-01-13 15:58:11 +01:00
Philipp Krones 0db64118ca fix(adding_lints): usage of early vs late lint pass (#13955)
changelog: none

This PR fixes explaining the difference in usage between early and late
lint passes in the book.
2025-01-13 13:21:00 +00:00
Philipp Krones dc99034fd4 Fix link to release tags (#13930)
Since we do release tag it makes more sense to refer to tags page then
empty releases page

changelog: none
2025-01-13 13:09:33 +00:00
Philipp Krones 2d8a3e8cde Fix not found links at Book (#13935)
Some of the links are wrong since lead to non existing docs so fix them

changelog: none
2025-01-13 10:55:57 +00:00
Philipp Krones 23f1ebeea2 Fix macro name in the Book (#13958)
`define_clippy_lints` does not exist, `declare_clippy_lint` exists.

changelog: none
2025-01-13 10:54:49 +00:00
Timo 8f257c71a3 don't suggest to use cloned for Cow in unnecessary_to_owned (#13853)
fix #13624

changelog: [`unnecessary_to_owned`]: don't suggest to use `cloned` on
`Cow` in `unnecessary_to_owned`
2025-01-12 21:27:10 +00:00
Catherine Flores d648cc9a2c Do not trigger redundant_pub_crate in external macros (#13952)
Some widely used crates, such as `pin-project-lite`, make use of a
`pub(crate)` construct in a private module inside a public macro. This
makes unrelated project trigger the lint.

There is also an unfortunate situation for Clippy itself: when a new
version of `pin-project-lite` or similar lint-trigerring crates is
released, those lints which can be found in hundreds of occurrences in
dependent crates will change, and appear as diffs in unrelated Clippy PR
because the base lintcheck run will be cached with the ancient release
of the crates. We currently have the situation
[here](https://github.com/rust-lang/rust-clippy/actions/runs/12635410895?pr=13851#user-content-redundant-pub-crate-removed),
which 219 lints removed and 219 lints added because of a
`pin-project-lite` version change between runs, and the fact that
`redundant_pub_crate` triggers on external macros.

Also:
- Fix #10636
- Fix #12213

changelog: [`redundant_pub_crate`]: do not trigger on external macros
2025-01-12 15:15:51 +00:00
Samuel Tardieu 5f75715398 Do not trigger redundant_pub_crate in external macros 2025-01-12 09:24:04 +01:00
Catherine Flores 34d109fd26 Add new lint unneeded_struct_pattern (#13465)
Closes #13400.

changelog: [`unneeded_struct_pattern`]: Add new lint
2025-01-12 02:09:18 +00:00
Timo a895bebcd7 add more test coverage for #11230 (#13915)
Closes #11230

changelog:  none
2025-01-11 23:28:57 +00:00
Samuel Tardieu 0b402baf15 Do not look for significant drop inside .await expansion
Temporaries created inside the expansion of `.await` will be dropped and need
no checking. Looking inside the expansion will trigger false positives.
2025-01-11 14:09:07 +01:00
Catherine Flores ab55d3fc62 Correct version of literal_string_with_formatting_args (#13974)
It claims to be in 1.83 but in fact will not be until 1.85.

Evidence: <https://github.com/rust-lang/rust/pull/134788> is where it
was merged into rust-lang/rust, and has a milestone of 1.85.

changelog: none
2025-01-10 21:14:40 +00:00
Catherine Flores 64250a3360 Also deploy index.html file on release (#13971)
I noticed that this was missing bf482928 while doing the release. No
harm done, as it was updated on the next push to master.

changelog: none
2025-01-10 21:10:08 +00:00
Alejandra González 579571d9cf New lint: manual_ok_err (#13740)
changelog: [`manual_ok_err`]: new lint

Detect manual implementations of `.ok()` or `.err()`, as in

```rust
let a = match func() {
    Ok(v) => Some(v),
    Err(_) => None,
};
let b = if let Err(v) = func() {
    Some(v)
} else {
    None
};
```

which can be replaced by

```rust
let a = func().ok();
let b = func().err();
```

This pattern was detected in the wild in the Rust reimplementation of
coreutils:
https://github.com/uutils/coreutils/pull/6886#pullrequestreview-2465160137
2025-01-10 19:19:58 +00:00
Philipp Krones 8678f9cdb6 CI: rerun the changelog check on PR synchronization (#13980)
Rerunning the PR checks when a PR is synchronized (new commits added, or
force-pushed) seems to remove the changelog checks from the UI while
keeping the PR mergeable from the maintainer's interface.

This PR reruns the cheap changelog check when a PR is synchronized.

changelog: none

r? @flip1995
2025-01-10 17:47:26 +00:00
Samuel Tardieu 4a69d0d4d8 New lint: manual_ok_err 2025-01-10 18:26:01 +01:00
Samuel Tardieu 1bdee5b6b3 CI: rerun the changelog check on PR synchronization
Rerunning the PR checks when a PR is synchronized (new commits added, or
force-pushed) seems to remove the changelog checks from the UI while
keeping the PR mergeable from the maintainer's interface.

This PR reruns the cheap changelog check when a PR is synchronized.
2025-01-10 18:17:55 +01:00
Philipp Krones fc0e65d157 Use diagnostic item instead of path for core::fmt::Debug (#13949)
This removes the last call to `LateContext::match_def_path()` in
Clippy's code. The `LateContext::match_def_path()` in the compiler
sources was only kept for Clippy's usage.

Once this PR is merged and after the rustup, I will submit one to remove
`LateContext::match_def_path()` from the compiler.

changelog: none

r? @flip1995
2025-01-10 16:45:08 +00:00
Philipp Krones cccb006cc0 CI: check the presence of the changelog line in every pull request (#13976)
Checking it only in the merge queue leads to deferred failures once the
decision to merge has been taken already.

- [X] Testing first without changelog line
- [x] Now that that has failed, adding the changelog line and
force-pushing

changelog: none
2025-01-10 16:31:50 +00:00
Samuel Tardieu 7639e82939 CI: check the presence of the changelog line in every pull request
Checking it only in the merge queue leads to deferred failures once the
decision to merge has been taken already.
2025-01-10 17:23:10 +01:00
Alejandra González 7611dbb047 Mention existing labels at CONTRIBUTING (#13978)
At CONTRIBUTING.md there are mentioned
[`l-crash`](https://github.com/rust-lang/rust-clippy/issues?q=is%3Aopen+label%3Al-crash)
and
[`l-bug`](https://github.com/rust-lang/rust-clippy/issues?q=is%3Aopen%20label%3Al-bug)
labels which are never used, so correct them to
[`I-ICE`](https://github.com/rust-lang/rust-clippy/issues?q=is%3Aopen%20label%3AI-ICE)
and
[`C-bug`](https://github.com/rust-lang/rust-clippy/issues?q=is%3Aopen%20label%3AC-bug)

changelog: none
2025-01-10 15:13:11 +00:00
alexey semenyuk f3b1dd636d Fix labels 2025-01-10 18:27:19 +05:00
dswij 716a3a4778 Do not intersect spans coming from different contexts (#13942)
The code should not attempt to obtain a snippet by capping the function
signature span with its identifier span without checking that they are
in the same context.

This is the only instance I could identify where placeholders were used
instead of the real snippet when running the CI lintcheck. Moreover, the
placeholders were not even used, as they snippet was obtained
prematurely.

Found in the context of #13941

changelog: none
2025-01-10 12:33:19 +00:00
Fridtjof Stoldt 5c2601af15 Do not propose to elide lifetimes if this causes an ambiguity (#13929)
Some lifetimes in function return types are not bound to concrete
content and can be set arbitrarily. Clippy should not propose to replace
them by the default `'_` lifetime if such a lifetime cannot be
determined unambigously.

I added a field to the `LifetimeChecker` and `Usage` to flag lifetimes
that cannot be replaced by default ones, but it feels a bit hacky.

Fix #13923

changelog: [`needless_lifetimes`]: remove false positives by checking
that lifetimes can indeed be elided
2025-01-10 11:58:29 +00:00
Samuel Tardieu d8301d762f Do not intersect spans coming from different contexts
The code should not attempt to obtain a snippet by capping the
function signature span with its identifier span without checking that
they are in the same context.
2025-01-10 10:02:27 +01:00
llogiq 197d58d591 Improve needless_as_bytes to also detect str::bytes() (#13972)
I ran Clippy on some projects after upgrading to 1.84, which found a
[needless use of
`as_bytes()`](https://github.com/rust-lang/rust-clippy/pull/13437). It
made me notice that the code was also using `bytes()` needlessly in
other places. This PR improves on the `as_bytes()` lint to also lint
`bytes()`.

----

changelog: none
2025-01-09 22:33:26 +00:00
Kevin Reid db4aac6d21 Correct version of literal_string_with_formatting_args
It claims to be in 1.83 but in fact will not be until 1.85.

Evidence: <https://github.com/rust-lang/rust/pull/134788> is where it was merged into rust-lang/rust, and has a milestone of 1.85.
2025-01-09 11:33:48 -08:00
Quentin Santos d5264c7a46 Check for needless uses of str::bytes()
This builds upon the lint for `str::as_bytes()`, and also covers
needless uses of the iterator version `str::bytes()`.
2025-01-09 18:44:43 +01:00
Quentin Santos e42e354f65 Remove needless check of returned type
We are checking that we are calling the `as_bytes()` method of `String`
or `str`. Checking that it returns a `slice()` does not add anything.
2025-01-09 18:40:33 +01:00
Philipp Krones 55c8550221 Also deploy index.html file on release 2025-01-09 18:24:02 +01:00
Philipp Krones 19e305bb57 Rustup (#13970)
r? @ghost

changelog: none
2025-01-09 17:07:59 +00:00