Commit graph

21506 commits

Author SHA1 Message Date
Alex Macleod
e692cd4b30
change literal_string_with_formatting_args lint category to nursery (#14014)
This PR changes literal_string_with_formatting_args category from
`suspicious` to `nursery` since there are thousands of false positive on
GitHub.

Closes #13989 since it's no longer problematic with such false positive
with ~~`pedantic`~~ `nursery` category.

changelog: [`literal_string_with_formatting_args` ] change category to
`nursery` from `suspicious`
2025-01-19 11:58:32 +00:00
anatawa12
fbf66310c1
chore: change to nursery instead 2025-01-19 12:38:59 +09:00
Alex Macleod
2220806d69
Emit missing_const_for_fn for CONST_MUT_REFS (#13839)
1.83 stabilized `CONST_MUT_REFS`, also allowing for `const fn` to mutate
through mutable references. This ensures `missing_const_for_fn` is
emitted for those cases.

changelog: [`missing_const_for_fn`]: Now suggests marking some functions
taking mutable references `const`
2025-01-18 17:52:49 +00:00
Timo
38828bf89a
Fix typo in check_clousure function name (#14025)
I noticed this because I failed to find this `check_closure` by
grepping.

changelog: none
2025-01-18 17:32:30 +00:00
Samuel Tardieu
a487c601a4 Fix typo in check_clousure function name 2025-01-18 16:08:42 +01:00
Thomas Churchman
f327640706 Emit missing_const_for_fn for CONST_MUT_REFS 2025-01-18 13:31:04 +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
anatawa12
ee522d8d15
change literal_string_with_formatting_args lint to pedantic 2025-01-17 15:37:48 +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