Skip to content

Commit 90c8fe2

Browse files
Merge branch 'master' into master
2 parents 6c1c506 + e294f94 commit 90c8fe2

File tree

830 files changed

+14931
-7259
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

830 files changed

+14931
-7259
lines changed

.github/workflows/clippy_changelog.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- name: Check Changelog
2525
if: ${{ github.event_name == 'pull_request' }}
2626
run: |
27-
body=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -s "https://api.github.com/repos/rust-lang/rust-clippy/pulls/$PR_NUMBER" | \
27+
body=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -s "https://api.github.com/repos/${{ github.repository }}/pulls/$PR_NUMBER" | \
2828
python -c "import sys, json; print(json.load(sys.stdin)['body'])")
2929
output=$(awk '/^changelog:\s*\S/ && !/changelog: \[.*\]: your change/' <<< "$body" | sed "s/changelog:\s*//g")
3030
if [ -z "$output" ]; then

.github/workflows/clippy_mq.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ jobs:
2727
host: x86_64-pc-windows-msvc
2828
- os: macos-13
2929
host: x86_64-apple-darwin
30+
- os: macos-latest
31+
host: aarch64-apple-darwin
3032

3133
runs-on: ${{ matrix.os }}
3234

.github/workflows/deploy.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ on:
88
tags:
99
- rust-1.**
1010

11+
concurrency:
12+
group: ${{ github.workflow }}
13+
cancel-in-progress: false
14+
1115
env:
1216
TARGET_BRANCH: 'gh-pages'
1317
SHA: '${{ github.sha }}'

.github/workflows/lintcheck.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666

6767
- name: Run lintcheck
6868
if: steps.cache-json.outputs.cache-hit != 'true'
69-
run: ./target/debug/lintcheck --format json --all-lints --crates-toml ./lintcheck/ci_crates.toml
69+
run: env CLIPPY_CONF_DIR="$PWD/lintcheck/ci-config" ./target/debug/lintcheck --format json --all-lints --crates-toml ./lintcheck/ci_crates.toml
7070

7171
- name: Upload base JSON
7272
uses: actions/upload-artifact@v4
@@ -97,7 +97,7 @@ jobs:
9797
run: cargo build --manifest-path=lintcheck/Cargo.toml
9898

9999
- name: Run lintcheck
100-
run: ./target/debug/lintcheck --format json --all-lints --crates-toml ./lintcheck/ci_crates.toml
100+
run: env CLIPPY_CONF_DIR="$PWD/lintcheck/ci-config" ./target/debug/lintcheck --format json --all-lints --crates-toml ./lintcheck/ci_crates.toml
101101

102102
- name: Upload head JSON
103103
uses: actions/upload-artifact@v4

CHANGELOG.md

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,68 @@ document.
66

77
## Unreleased / Beta / In Rust Nightly
88

9-
[609cd310...master](https://github.com/rust-lang/rust-clippy/compare/609cd310...master)
9+
[3e3715c3...master](https://github.com/rust-lang/rust-clippy/compare/3e3715c3...master)
10+
11+
## Rust 1.86
12+
13+
Current stable, released 2025-04-03
14+
15+
[View all 108 merged pull requests](https://github.com/rust-lang/rust-clippy/pulls?q=merged%3A2024-12-27T15%3A11%3A38Z..2025-02-06T13%3A57%3A58Z+base%3Amaster)
16+
17+
### New Lints
18+
19+
* Added [`unneeded_struct_pattern`] to `style` [#13465](https://github.com/rust-lang/rust-clippy/pull/13465)
20+
* Added [`doc_overindented_list_items`] to `style` [#13711](https://github.com/rust-lang/rust-clippy/pull/13711)
21+
* Added [`manual_ok_err`] to `complexity` [#13740](https://github.com/rust-lang/rust-clippy/pull/13740)
22+
* Added [`non_std_lazy_statics`] to `pedantic` [#13770](https://github.com/rust-lang/rust-clippy/pull/13770)
23+
* Added [`manual_repeat_n`] to `style` [#13858](https://github.com/rust-lang/rust-clippy/pull/13858)
24+
* Added [`manual_option_as_slice`] to `complexity` [#13901](https://github.com/rust-lang/rust-clippy/pull/13901)
25+
* Added [`double_ended_iterator_last`] to `perf` [#13922](https://github.com/rust-lang/rust-clippy/pull/13922)
26+
* Added [`useless_nonzero_new_unchecked`] to `complexity` [#13993](https://github.com/rust-lang/rust-clippy/pull/13993)
27+
* Added [`sliced_string_as_bytes`] to `perf` [#14002](https://github.com/rust-lang/rust-clippy/pull/14002)
28+
* Added [`unnecessary_semicolon`] to `pedantic` [#14032](https://github.com/rust-lang/rust-clippy/pull/14032)
29+
* Added [`return_and_then`] to `restriction` [#14051](https://github.com/rust-lang/rust-clippy/pull/14051)
30+
* Added [`manual_slice_fill`] to `style` [#14082](https://github.com/rust-lang/rust-clippy/pull/14082)
31+
* Added [`precedence_bits`] to `restriction` [#14115](https://github.com/rust-lang/rust-clippy/pull/14115)
32+
33+
### Moves and Deprecations
34+
35+
* Moved [`redundant_locals`] to `suspicious` (from `correctness`, now warn-by-default)
36+
[#13747](https://github.com/rust-lang/rust-clippy/pull/13747)
37+
* Moved [`format_push_string`] to `pedantic` (from `restriction`)
38+
[#13894](https://github.com/rust-lang/rust-clippy/pull/13894)
39+
* Moved [`format_collect`] to `pedantic` (from `perf`, now allow-by-default)
40+
[#13894](https://github.com/rust-lang/rust-clippy/pull/13894)
41+
* Moved [`mutex_integer`] to `restriction` (from `nursery`) [#14110](https://github.com/rust-lang/rust-clippy/pull/14110)
42+
43+
### Enhancements
44+
45+
* Add `lint-inconsistent-struct-field-initializers` configuration option to [`inconsistent_struct_constructor`]
46+
[#13737](https://github.com/rust-lang/rust-clippy/pull/13737)
47+
* [`len_zero`] now also triggers if deref target implements `is_empty()`
48+
[#13871](https://github.com/rust-lang/rust-clippy/pull/13871)
49+
* [`obfuscated_if_else`] now also triggers for the `.then(..).unwrap_or(..)` pattern
50+
[#14021](https://github.com/rust-lang/rust-clippy/pull/14021)
51+
52+
### False Positive Fixes
53+
54+
* [`trailing_empty_array`] no longer triggers in tests [#13844](https://github.com/rust-lang/rust-clippy/pull/13844)
55+
* [`missing_const_for_fn`] no longer triggers in tests [#13945](https://github.com/rust-lang/rust-clippy/pull/13945)
56+
* [`significant_drop_in_scrutinee`]: do not falsely warn for temporaries created by `.await` expansion
57+
[#13985](https://github.com/rust-lang/rust-clippy/pull/13985)
58+
59+
### ICE Fixes
60+
61+
* [`borrow_interior_mutable_const`] Fix an ICE that can occur when taking a reference to a tuple/`struct` field of an
62+
interior mutable `const` [#13877](https://github.com/rust-lang/rust-clippy/pull/13877)
63+
64+
### Others
65+
66+
* Clippy now uses Rust edition 2024 [#13751](https://github.com/rust-lang/rust-clippy/pull/13751)
1067

1168
## Rust 1.85
1269

13-
Current stable, released 2025-02-20
70+
Released 2025-02-20
1471

1572
[View all 72 merged pull requests](https://github.com/rust-lang/rust-clippy/pulls?q=merged%3A2024-11-15T19%3A31%3A08Z..2024-12-26T13%3A59%3A48Z+base%3Amaster)
1673

@@ -5517,6 +5574,7 @@ Released 2018-09-13
55175574
[`cast_slice_different_sizes`]: https://rust-lang.github.io/rust-clippy/master/index.html#cast_slice_different_sizes
55185575
[`cast_slice_from_raw_parts`]: https://rust-lang.github.io/rust-clippy/master/index.html#cast_slice_from_raw_parts
55195576
[`cfg_not_test`]: https://rust-lang.github.io/rust-clippy/master/index.html#cfg_not_test
5577+
[`char_indices_as_byte_indices`]: https://rust-lang.github.io/rust-clippy/master/index.html#char_indices_as_byte_indices
55205578
[`char_lit_as_u8`]: https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8
55215579
[`chars_last_cmp`]: https://rust-lang.github.io/rust-clippy/master/index.html#chars_last_cmp
55225580
[`chars_next_cmp`]: https://rust-lang.github.io/rust-clippy/master/index.html#chars_next_cmp
@@ -5571,6 +5629,7 @@ Released 2018-09-13
55715629
[`disallowed_type`]: https://rust-lang.github.io/rust-clippy/master/index.html#disallowed_type
55725630
[`disallowed_types`]: https://rust-lang.github.io/rust-clippy/master/index.html#disallowed_types
55735631
[`diverging_sub_expression`]: https://rust-lang.github.io/rust-clippy/master/index.html#diverging_sub_expression
5632+
[`doc_comment_double_space_linebreaks`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_comment_double_space_linebreaks
55745633
[`doc_include_without_cfg`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_include_without_cfg
55755634
[`doc_lazy_continuation`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation
55765635
[`doc_link_code`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_link_code
@@ -5681,6 +5740,7 @@ Released 2018-09-13
56815740
[`if_same_then_else`]: https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else
56825741
[`if_then_some_else_none`]: https://rust-lang.github.io/rust-clippy/master/index.html#if_then_some_else_none
56835742
[`ifs_same_cond`]: https://rust-lang.github.io/rust-clippy/master/index.html#ifs_same_cond
5743+
[`ignore_without_reason`]: https://rust-lang.github.io/rust-clippy/master/index.html#ignore_without_reason
56845744
[`ignored_unit_patterns`]: https://rust-lang.github.io/rust-clippy/master/index.html#ignored_unit_patterns
56855745
[`impl_hash_borrow_with_str_and_bytes`]: https://rust-lang.github.io/rust-clippy/master/index.html#impl_hash_borrow_with_str_and_bytes
56865746
[`impl_trait_in_params`]: https://rust-lang.github.io/rust-clippy/master/index.html#impl_trait_in_params
@@ -5783,12 +5843,14 @@ Released 2018-09-13
57835843
[`macro_metavars_in_unsafe`]: https://rust-lang.github.io/rust-clippy/master/index.html#macro_metavars_in_unsafe
57845844
[`macro_use_imports`]: https://rust-lang.github.io/rust-clippy/master/index.html#macro_use_imports
57855845
[`main_recursion`]: https://rust-lang.github.io/rust-clippy/master/index.html#main_recursion
5846+
[`manual_abs_diff`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_abs_diff
57865847
[`manual_assert`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_assert
57875848
[`manual_async_fn`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_async_fn
57885849
[`manual_bits`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_bits
57895850
[`manual_c_str_literals`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_c_str_literals
57905851
[`manual_clamp`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp
57915852
[`manual_contains`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains
5853+
[`manual_dangling_ptr`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_dangling_ptr
57925854
[`manual_div_ceil`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil
57935855
[`manual_filter`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter
57945856
[`manual_filter_map`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter_map
@@ -6055,6 +6117,7 @@ Released 2018-09-13
60556117
[`redundant_pub_crate`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pub_crate
60566118
[`redundant_slicing`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_slicing
60576119
[`redundant_static_lifetimes`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes
6120+
[`redundant_test_prefix`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_test_prefix
60586121
[`redundant_type_annotations`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_type_annotations
60596122
[`ref_as_ptr`]: https://rust-lang.github.io/rust-clippy/master/index.html#ref_as_ptr
60606123
[`ref_binding_to_reference`]: https://rust-lang.github.io/rust-clippy/master/index.html#ref_binding_to_reference
@@ -6156,6 +6219,7 @@ Released 2018-09-13
61566219
[`suspicious_unary_op_formatting`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_unary_op_formatting
61576220
[`suspicious_xor_used_as_pow`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_xor_used_as_pow
61586221
[`swap_ptr_to_ref`]: https://rust-lang.github.io/rust-clippy/master/index.html#swap_ptr_to_ref
6222+
[`swap_with_temporary`]: https://rust-lang.github.io/rust-clippy/master/index.html#swap_with_temporary
61596223
[`tabs_in_doc_comments`]: https://rust-lang.github.io/rust-clippy/master/index.html#tabs_in_doc_comments
61606224
[`temporary_assignment`]: https://rust-lang.github.io/rust-clippy/master/index.html#temporary_assignment
61616225
[`temporary_cstring_as_ptr`]: https://rust-lang.github.io/rust-clippy/master/index.html#temporary_cstring_as_ptr
@@ -6346,6 +6410,7 @@ Released 2018-09-13
63466410
[`await-holding-invalid-types`]: https://doc.rust-lang.org/clippy/lint_configuration.html#await-holding-invalid-types
63476411
[`cargo-ignore-publish`]: https://doc.rust-lang.org/clippy/lint_configuration.html#cargo-ignore-publish
63486412
[`check-incompatible-msrv-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#check-incompatible-msrv-in-tests
6413+
[`check-inconsistent-struct-field-initializers`]: https://doc.rust-lang.org/clippy/lint_configuration.html#check-inconsistent-struct-field-initializers
63496414
[`check-private-items`]: https://doc.rust-lang.org/clippy/lint_configuration.html#check-private-items
63506415
[`cognitive-complexity-threshold`]: https://doc.rust-lang.org/clippy/lint_configuration.html#cognitive-complexity-threshold
63516416
[`disallowed-macros`]: https://doc.rust-lang.org/clippy/lint_configuration.html#disallowed-macros
@@ -6362,7 +6427,7 @@ Released 2018-09-13
63626427
[`future-size-threshold`]: https://doc.rust-lang.org/clippy/lint_configuration.html#future-size-threshold
63636428
[`ignore-interior-mutability`]: https://doc.rust-lang.org/clippy/lint_configuration.html#ignore-interior-mutability
63646429
[`large-error-threshold`]: https://doc.rust-lang.org/clippy/lint_configuration.html#large-error-threshold
6365-
[`lint-inconsistent-struct-field-initializers`]: https://doc.rust-lang.org/clippy/lint_configuration.html#lint-inconsistent-struct-field-initializers
6430+
[`lint-commented-code`]: https://doc.rust-lang.org/clippy/lint_configuration.html#lint-commented-code
63666431
[`literal-representation-threshold`]: https://doc.rust-lang.org/clippy/lint_configuration.html#literal-representation-threshold
63676432
[`matches-for-let-else`]: https://doc.rust-lang.org/clippy/lint_configuration.html#matches-for-let-else
63686433
[`max-fn-params-bools`]: https://doc.rust-lang.org/clippy/lint_configuration.html#max-fn-params-bools

COPYRIGHT

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// REUSE-IgnoreStart
22

3-
Copyright 2014-2024 The Rust Project Developers
3+
Copyright 2014-2025 The Rust Project Developers
44

55
Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
66
http://www.apache.org/licenses/LICENSE-2.0> or the MIT license

Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "clippy"
33
# begin autogenerated version
4-
version = "0.1.87"
4+
version = "0.1.88"
55
# end autogenerated version
66
description = "A bunch of helpful lints to avoid common pitfalls in Rust"
77
repository = "https://github.com/rust-lang/rust-clippy"
@@ -25,6 +25,7 @@ path = "src/driver.rs"
2525
[dependencies]
2626
clippy_config = { path = "clippy_config" }
2727
clippy_lints = { path = "clippy_lints" }
28+
clippy_utils = { path = "clippy_utils" }
2829
rustc_tools_util = { path = "rustc_tools_util", version = "0.4.2" }
2930
tempfile = { version = "3.3", optional = true }
3031
termize = "0.1"
@@ -33,7 +34,7 @@ anstream = "0.6.18"
3334

3435
[dev-dependencies]
3536
cargo_metadata = "0.18.1"
36-
ui_test = "0.26.4"
37+
ui_test = "0.29.2"
3738
regex = "1.5.5"
3839
serde = { version = "1.0.145", features = ["derive"] }
3940
serde_json = "1.0.122"
@@ -42,7 +43,7 @@ walkdir = "2.3"
4243
filetime = "0.2.9"
4344
itertools = "0.12"
4445
pulldown-cmark = { version = "0.11", default-features = false, features = ["html"] }
45-
rinja = { version = "0.3", default-features = false, features = ["config"] }
46+
askama = { version = "0.13", default-features = false, features = ["alloc", "config", "derive"] }
4647

4748
# UI test dependencies
4849
clippy_utils = { path = "clippy_utils" }

LICENSE-APACHE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ APPENDIX: How to apply the Apache License to your work.
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright 2014-2024 The Rust Project Developers
189+
Copyright 2014-2025 The Rust Project Developers
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.

LICENSE-MIT

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2014-2024 The Rust Project Developers
3+
Copyright (c) 2014-2025 The Rust Project Developers
44

55
Permission is hereby granted, free of charge, to any
66
person obtaining a copy of this software and associated

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ If you want to contribute to Clippy, you can find more information in [CONTRIBUT
277277

278278
<!-- REUSE-IgnoreStart -->
279279

280-
Copyright 2014-2024 The Rust Project Developers
280+
Copyright 2014-2025 The Rust Project Developers
281281

282282
Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
283283
[https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)> or the MIT license

rinja.toml renamed to askama.toml

File renamed without changes.

book/src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
- [Updating the Changelog](development/infrastructure/changelog_update.md)
3131
- [Release a New Version](development/infrastructure/release.md)
3232
- [The Clippy Book](development/infrastructure/book.md)
33+
- [Benchmarking Clippy](development/infrastructure/benchmarking.md)
3334
- [Proposals](development/proposals/README.md)
3435
- [Roadmap 2021](development/proposals/roadmap-2021.md)
3536
- [Syntax Tree Patterns](development/proposals/syntax-tree-patterns.md)

book/src/development/adding_lints.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,19 +99,22 @@ struct A;
9999
impl A {
100100
pub fn fo(&self) {}
101101
pub fn foo(&self) {}
102+
//~^ foo_functions
102103
pub fn food(&self) {}
103104
}
104105

105106
// Default trait methods
106107
trait B {
107108
fn fo(&self) {}
108109
fn foo(&self) {}
110+
//~^ foo_functions
109111
fn food(&self) {}
110112
}
111113

112114
// Plain functions
113115
fn fo() {}
114116
fn foo() {}
117+
//~^ foo_functions
115118
fn food() {}
116119

117120
fn main() {
@@ -122,17 +125,24 @@ fn main() {
122125
}
123126
```
124127

125-
Now we can run the test with `TESTNAME=foo_functions cargo uibless`, currently
126-
this test is meaningless though.
128+
Note that we are adding comment annotations with the name of our lint to mark
129+
lines where we expect an error. Except for very specific situations
130+
(`//@check-pass`), at least one error marker must be present in a test file for
131+
it to be accepted.
132+
133+
Once we have implemented our lint we can run `TESTNAME=foo_functions cargo
134+
uibless` to generate the `.stderr` file. If our lint makes use of structured
135+
suggestions then this command will also generate the corresponding `.fixed`
136+
file.
127137

128138
While we are working on implementing our lint, we can keep running the UI test.
129139
That allows us to check if the output is turning into what we want by checking the
130140
`.stderr` file that gets updated on every test run.
131141

132-
Running `TESTNAME=foo_functions cargo uitest` should pass on its own. When we
133-
commit our lint, we need to commit the generated `.stderr` files, too. In
134-
general, you should only commit files changed by `cargo bless` for the
135-
specific lint you are creating/editing.
142+
Once we have implemented our lint running `TESTNAME=foo_functions cargo uitest`
143+
should pass on its own. When we commit our lint, we need to commit the generated
144+
`.stderr` and if applicable `.fixed` files, too. In general, you should only
145+
commit files changed by `cargo bless` for the specific lint you are creating/editing.
136146

137147
> _Note:_ you can run multiple test files by specifying a comma separated list:
138148
> `TESTNAME=foo_functions,test2,test3`.

book/src/development/basics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ following:
147147

148148
First, take note of the toolchain
149149
[override](https://rust-lang.github.io/rustup/overrides.html) in
150-
`/rust-toolchain`. We will use this override to install Clippy into the right
150+
`/rust-toolchain.toml`. We will use this override to install Clippy into the right
151151
toolchain.
152152

153153
> Tip: You can view the active toolchain for the current directory with `rustup

0 commit comments

Comments
 (0)