Skip to content

Commit 578f9ce

Browse files
committed
chore: pull updates from upstream
2 parents 27c460e + 31b1741 commit 578f9ce

File tree

1,094 files changed

+22572
-4888
lines changed

Some content is hidden

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

1,094 files changed

+22572
-4888
lines changed

CHANGELOG.md

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

77
## Unreleased / In Rust Nightly
88

9-
[d7b5cbf0...master](https://github.com/rust-lang/rust-clippy/compare/d7b5cbf0...master)
9+
[3c7e7dbc...master](https://github.com/rust-lang/rust-clippy/compare/3c7e7dbc...master)
10+
11+
## Rust 1.64
12+
13+
Current stable, released 2022-09-22
14+
15+
[d7b5cbf0...3c7e7dbc](https://github.com/rust-lang/rust-clippy/compare/d7b5cbf0...3c7e7dbc)
16+
17+
### New Lints
18+
19+
* [`arithmetic_side_effects`]
20+
[#9130](https://github.com/rust-lang/rust-clippy/pull/9130)
21+
* [`invalid_utf8_in_unchecked`]
22+
[#9105](https://github.com/rust-lang/rust-clippy/pull/9105)
23+
* [`assertions_on_result_states`]
24+
[#9225](https://github.com/rust-lang/rust-clippy/pull/9225)
25+
* [`manual_find`]
26+
[#8649](https://github.com/rust-lang/rust-clippy/pull/8649)
27+
* [`manual_retain`]
28+
[#8972](https://github.com/rust-lang/rust-clippy/pull/8972)
29+
* [`default_instead_of_iter_empty`]
30+
[#8989](https://github.com/rust-lang/rust-clippy/pull/8989)
31+
* [`manual_rem_euclid`]
32+
[#9031](https://github.com/rust-lang/rust-clippy/pull/9031)
33+
* [`obfuscated_if_else`]
34+
[#9148](https://github.com/rust-lang/rust-clippy/pull/9148)
35+
* [`std_instead_of_core`]
36+
[#9103](https://github.com/rust-lang/rust-clippy/pull/9103)
37+
* [`std_instead_of_alloc`]
38+
[#9103](https://github.com/rust-lang/rust-clippy/pull/9103)
39+
* [`alloc_instead_of_core`]
40+
[#9103](https://github.com/rust-lang/rust-clippy/pull/9103)
41+
* [`explicit_auto_deref`]
42+
[#8355](https://github.com/rust-lang/rust-clippy/pull/8355)
43+
44+
45+
### Moves and Deprecations
46+
47+
* Moved [`format_push_string`] to `restriction` (now allow-by-default)
48+
[#9161](https://github.com/rust-lang/rust-clippy/pull/9161)
49+
50+
### Enhancements
51+
52+
* [`significant_drop_in_scrutinee`]: Now gives more context in the lint message
53+
[#8981](https://github.com/rust-lang/rust-clippy/pull/8981)
54+
* [`single_match`], [`single_match_else`]: Now catches more `Option` cases
55+
[#8985](https://github.com/rust-lang/rust-clippy/pull/8985)
56+
* [`unused_async`]: Now works for async methods
57+
[#9025](https://github.com/rust-lang/rust-clippy/pull/9025)
58+
* [`manual_filter_map`], [`manual_find_map`]: Now lint more expressions
59+
[#8958](https://github.com/rust-lang/rust-clippy/pull/8958)
60+
* [`question_mark`]: Now works for simple `if let` expressions
61+
[#8356](https://github.com/rust-lang/rust-clippy/pull/8356)
62+
* [`undocumented_unsafe_blocks`]: Now finds comments before the start of closures
63+
[#9117](https://github.com/rust-lang/rust-clippy/pull/9117)
64+
* [`trait_duplication_in_bounds`]: Now catches duplicate bounds in where clauses
65+
[#8703](https://github.com/rust-lang/rust-clippy/pull/8703)
66+
* [`shadow_reuse`], [`shadow_same`], [`shadow_unrelated`]: Now lint in const blocks
67+
[#9124](https://github.com/rust-lang/rust-clippy/pull/9124)
68+
* [`slow_vector_initialization`]: Now detects cases with `vec.capacity()`
69+
[#8953](https://github.com/rust-lang/rust-clippy/pull/8953)
70+
* [`unused_self`]: Now respects the `avoid-breaking-exported-api` config option
71+
[#9199](https://github.com/rust-lang/rust-clippy/pull/9199)
72+
* [`box_collection`]: Now supports all std collections
73+
[#9170](https://github.com/rust-lang/rust-clippy/pull/9170)
74+
75+
### False Positive Fixes
76+
77+
* [`significant_drop_in_scrutinee`]: Now ignores calls to `IntoIterator::into_iter`
78+
[#9140](https://github.com/rust-lang/rust-clippy/pull/9140)
79+
* [`while_let_loop`]: Now ignores cases when the significant drop order would change
80+
[#8981](https://github.com/rust-lang/rust-clippy/pull/8981)
81+
* [`branches_sharing_code`]: Now ignores cases where moved variables have a significant
82+
drop or variable modifications can affect the conditions
83+
[#9138](https://github.com/rust-lang/rust-clippy/pull/9138)
84+
* [`let_underscore_lock`]: Now ignores bindings that aren't locked
85+
[#8990](https://github.com/rust-lang/rust-clippy/pull/8990)
86+
* [`trivially_copy_pass_by_ref`]: Now tracks lifetimes and ignores cases where unsafe
87+
pointers are used
88+
[#8639](https://github.com/rust-lang/rust-clippy/pull/8639)
89+
* [`let_unit_value`]: No longer ignores `#[allow]` attributes on the value
90+
[#9082](https://github.com/rust-lang/rust-clippy/pull/9082)
91+
* [`declare_interior_mutable_const`]: Now ignores the `thread_local!` macro
92+
[#9015](https://github.com/rust-lang/rust-clippy/pull/9015)
93+
* [`if_same_then_else`]: Now ignores branches with `todo!` and `unimplemented!`
94+
[#9006](https://github.com/rust-lang/rust-clippy/pull/9006)
95+
* [`enum_variant_names`]: Now ignores names with `_` prefixes
96+
[#9032](https://github.com/rust-lang/rust-clippy/pull/9032)
97+
* [`let_unit_value`]: Now ignores cases, where the unit type is manually specified
98+
[#9056](https://github.com/rust-lang/rust-clippy/pull/9056)
99+
* [`match_same_arms`]: Now ignores branches with `todo!`
100+
[#9207](https://github.com/rust-lang/rust-clippy/pull/9207)
101+
* [`assign_op_pattern`]: Ignores cases that break borrowing rules
102+
[#9214](https://github.com/rust-lang/rust-clippy/pull/9214)
103+
* [`extra_unused_lifetimes`]: No longer triggers in derive macros
104+
[#9037](https://github.com/rust-lang/rust-clippy/pull/9037)
105+
* [`mismatching_type_param_order`]: Now ignores complicated generic parameters
106+
[#9146](https://github.com/rust-lang/rust-clippy/pull/9146)
107+
* [`equatable_if_let`]: No longer lints in macros
108+
[#9074](https://github.com/rust-lang/rust-clippy/pull/9074)
109+
* [`new_without_default`]: Now ignores generics and lifetime parameters on `fn new`
110+
[#9115](https://github.com/rust-lang/rust-clippy/pull/9115)
111+
* [`needless_borrow`]: Now ignores cases that result in the execution of different traits
112+
[#9096](https://github.com/rust-lang/rust-clippy/pull/9096)
113+
* [`declare_interior_mutable_const`]: No longer triggers in thread-local initializers
114+
[#9246](https://github.com/rust-lang/rust-clippy/pull/9246)
115+
116+
### Suggestion Fixes/Improvements
117+
118+
* [`type_repetition_in_bounds`]: The suggestion now works with maybe bounds
119+
[#9132](https://github.com/rust-lang/rust-clippy/pull/9132)
120+
* [`transmute_ptr_to_ref`]: Now suggests `pointer::cast` when possible
121+
[#8939](https://github.com/rust-lang/rust-clippy/pull/8939)
122+
* [`useless_format`]: Now suggests the correct variable name
123+
[#9237](https://github.com/rust-lang/rust-clippy/pull/9237)
124+
* [`or_fun_call`]: The lint emission will now only span over the `unwrap_or` call
125+
[#9144](https://github.com/rust-lang/rust-clippy/pull/9144)
126+
* [`neg_multiply`]: Now suggests adding parentheses around suggestion if needed
127+
[#9026](https://github.com/rust-lang/rust-clippy/pull/9026)
128+
* [`unnecessary_lazy_evaluations`]: Now suggest for `bool::then_some` for lazy evaluation
129+
[#9099](https://github.com/rust-lang/rust-clippy/pull/9099)
130+
* [`manual_flatten`]: Improved message for long code snippets
131+
[#9156](https://github.com/rust-lang/rust-clippy/pull/9156)
132+
* [`explicit_counter_loop`]: The suggestion is now machine applicable
133+
[#9149](https://github.com/rust-lang/rust-clippy/pull/9149)
134+
* [`needless_borrow`]: Now keeps parentheses around fields, when needed
135+
[#9210](https://github.com/rust-lang/rust-clippy/pull/9210)
136+
* [`while_let_on_iterator`]: The suggestion now works in `FnOnce` closures
137+
[#9134](https://github.com/rust-lang/rust-clippy/pull/9134)
138+
139+
### ICE Fixes
140+
141+
* Fix ICEs related to `#![feature(generic_const_exprs)]` usage
142+
[#9241](https://github.com/rust-lang/rust-clippy/pull/9241)
143+
* Fix ICEs related to reference lints
144+
[#9093](https://github.com/rust-lang/rust-clippy/pull/9093)
145+
* [`question_mark`]: Fix ICE on zero field tuple structs
146+
[#9244](https://github.com/rust-lang/rust-clippy/pull/9244)
147+
148+
### Documentation Improvements
149+
150+
* [`needless_option_take`]: Now includes a "What it does" and "Why is this bad?" section.
151+
[#9022](https://github.com/rust-lang/rust-clippy/pull/9022)
152+
153+
### Others
154+
155+
* Using `--cap-lints=allow` and only `--force-warn`ing some will now work with Clippy's driver
156+
[#9036](https://github.com/rust-lang/rust-clippy/pull/9036)
157+
* Clippy now tries to read the `rust-version` from `Cargo.toml` to identify the
158+
minimum supported rust version
159+
[#8774](https://github.com/rust-lang/rust-clippy/pull/8774)
10160

11161
## Rust 1.63
12162

13-
Current stable, released 2022-08-11
163+
Released 2022-08-11
14164

15165
[7c21f91b...d7b5cbf0](https://github.com/rust-lang/rust-clippy/compare/7c21f91b...d7b5cbf0)
16166

@@ -3583,7 +3733,7 @@ Released 2018-09-13
35833733
[`almost_complete_letter_range`]: https://rust-lang.github.io/rust-clippy/master/index.html#almost_complete_letter_range
35843734
[`almost_swapped`]: https://rust-lang.github.io/rust-clippy/master/index.html#almost_swapped
35853735
[`approx_constant`]: https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant
3586-
[`arithmetic`]: https://rust-lang.github.io/rust-clippy/master/index.html#arithmetic
3736+
[`arithmetic_side_effects`]: https://rust-lang.github.io/rust-clippy/master/index.html#arithmetic_side_effects
35873737
[`as_conversions`]: https://rust-lang.github.io/rust-clippy/master/index.html#as_conversions
35883738
[`as_underscore`]: https://rust-lang.github.io/rust-clippy/master/index.html#as_underscore
35893739
[`assertions_on_constants`]: https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants
@@ -3603,11 +3753,13 @@ Released 2018-09-13
36033753
[`blocks_in_if_conditions`]: https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_if_conditions
36043754
[`bool_assert_comparison`]: https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison
36053755
[`bool_comparison`]: https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison
3756+
[`bool_to_int_with_if`]: https://rust-lang.github.io/rust-clippy/master/index.html#bool_to_int_with_if
36063757
[`borrow_as_ptr`]: https://rust-lang.github.io/rust-clippy/master/index.html#borrow_as_ptr
36073758
[`borrow_deref_ref`]: https://rust-lang.github.io/rust-clippy/master/index.html#borrow_deref_ref
36083759
[`borrow_interior_mutable_const`]: https://rust-lang.github.io/rust-clippy/master/index.html#borrow_interior_mutable_const
36093760
[`borrowed_box`]: https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box
36103761
[`box_collection`]: https://rust-lang.github.io/rust-clippy/master/index.html#box_collection
3762+
[`box_default`]: https://rust-lang.github.io/rust-clippy/master/index.html#box_default
36113763
[`box_vec`]: https://rust-lang.github.io/rust-clippy/master/index.html#box_vec
36123764
[`boxed_local`]: https://rust-lang.github.io/rust-clippy/master/index.html#boxed_local
36133765
[`branches_sharing_code`]: https://rust-lang.github.io/rust-clippy/master/index.html#branches_sharing_code
@@ -3799,6 +3951,7 @@ Released 2018-09-13
37993951
[`items_after_statements`]: https://rust-lang.github.io/rust-clippy/master/index.html#items_after_statements
38003952
[`iter_cloned_collect`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect
38013953
[`iter_count`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_count
3954+
[`iter_kv_map`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map
38023955
[`iter_next_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_next_loop
38033956
[`iter_next_slice`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_next_slice
38043957
[`iter_not_returning_iterator`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_not_returning_iterator
@@ -4123,6 +4276,7 @@ Released 2018-09-13
41234276
[`unimplemented`]: https://rust-lang.github.io/rust-clippy/master/index.html#unimplemented
41244277
[`uninit_assumed_init`]: https://rust-lang.github.io/rust-clippy/master/index.html#uninit_assumed_init
41254278
[`uninit_vec`]: https://rust-lang.github.io/rust-clippy/master/index.html#uninit_vec
4279+
[`uninlined_format_args`]: https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
41264280
[`unit_arg`]: https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg
41274281
[`unit_cmp`]: https://rust-lang.github.io/rust-clippy/master/index.html#unit_cmp
41284282
[`unit_hash`]: https://rust-lang.github.io/rust-clippy/master/index.html#unit_hash

CONTRIBUTING.md

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,23 +110,28 @@ Just make sure to remove the dependencies again before finally making a pull req
110110
[IntelliJ_rust_homepage]: https://intellij-rust.github.io/
111111

112112
### Rust Analyzer
113-
As of [#6869][6869], [`rust-analyzer`][ra_homepage] can understand that Clippy uses compiler-internals
114-
using `extern crate` when `package.metadata.rust-analyzer.rustc_private` is set to `true` in Clippy's `Cargo.toml.`
115-
You will require a `nightly` toolchain with the `rustc-dev` component installed.
116-
Make sure that in the `rust-analyzer` configuration, you set
113+
For [`rust-analyzer`][ra_homepage] to work correctly make sure that in the `rust-analyzer` configuration you set
114+
117115
```json
118116
{ "rust-analyzer.rustc.source": "discover" }
119117
```
120-
and
121-
```json
122-
{ "rust-analyzer.updates.channel": "nightly" }
123-
```
118+
124119
You should be able to see information on things like `Expr` or `EarlyContext` now if you hover them, also
125120
a lot more type hints.
126-
This will work with `rust-analyzer 2021-03-15` shipped in nightly `1.52.0-nightly (107896c32 2021-03-15)` or later.
121+
122+
To have `rust-analyzer` also work in the `clippy_dev` and `lintcheck` crates, add the following configuration
123+
124+
```json
125+
{
126+
"rust-analyzer.linkedProjects": [
127+
"./Cargo.toml",
128+
"clippy_dev/Cargo.toml",
129+
"lintcheck/Cargo.toml",
130+
]
131+
}
132+
```
127133

128134
[ra_homepage]: https://rust-analyzer.github.io/
129-
[6869]: https://github.com/rust-lang/rust-clippy/pull/6869
130135

131136
## How Clippy works
132137

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "clippy"
3-
version = "0.1.65"
3+
version = "0.1.66"
44
description = "A bunch of helpful lints to avoid common pitfalls in Rust"
55
repository = "https://github.com/rust-lang/rust-clippy"
66
readme = "README.md"
@@ -28,7 +28,7 @@ tempfile = { version = "3.2", optional = true }
2828
termize = "0.1"
2929

3030
[dev-dependencies]
31-
compiletest_rs = { version = "0.8", features = ["tmp"] }
31+
compiletest_rs = { version = "0.9", features = ["tmp"] }
3232
tester = "0.9"
3333
regex = "1.5"
3434
toml = "0.5"

README.md

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -139,25 +139,6 @@ line. (You can swap `clippy::all` with the specific lint category you are target
139139

140140
## Configuration
141141

142-
Some lints can be configured in a TOML file named `clippy.toml` or `.clippy.toml`. It contains a basic `variable =
143-
value` mapping e.g.
144-
145-
```toml
146-
avoid-breaking-exported-api = false
147-
disallowed-names = ["toto", "tata", "titi"]
148-
cognitive-complexity-threshold = 30
149-
```
150-
151-
See the [list of lints](https://rust-lang.github.io/rust-clippy/master/index.html) for more information about which
152-
lints can be configured and the meaning of the variables.
153-
154-
Note that configuration changes will not apply for code that has already been compiled and cached under `./target/`;
155-
for example, adding a new string to `doc-valid-idents` may still result in Clippy flagging that string. To be sure that
156-
any configuration changes are applied, you may want to run `cargo clean` and re-compile your crate from scratch.
157-
158-
To deactivate the “for further information visit *lint-link*” message you can
159-
define the `CLIPPY_DISABLE_DOCS_LINKS` environment variable.
160-
161142
### Allowing/denying lints
162143

163144
You can add options to your code to `allow`/`warn`/`deny` Clippy lints:
@@ -205,6 +186,33 @@ the lint(s) you are interested in:
205186
cargo clippy -- -A clippy::all -W clippy::useless_format -W clippy::...
206187
```
207188

189+
### Configure the behavior of some lints
190+
191+
Some lints can be configured in a TOML file named `clippy.toml` or `.clippy.toml`. It contains a basic `variable =
192+
value` mapping e.g.
193+
194+
```toml
195+
avoid-breaking-exported-api = false
196+
disallowed-names = ["toto", "tata", "titi"]
197+
cognitive-complexity-threshold = 30
198+
```
199+
200+
See the [list of lints](https://rust-lang.github.io/rust-clippy/master/index.html) for more information about which
201+
lints can be configured and the meaning of the variables.
202+
203+
> **Note**
204+
>
205+
> `clippy.toml` or `.clippy.toml` cannot be used to allow/deny lints.
206+
207+
> **Note**
208+
>
209+
> Configuration changes will not apply for code that has already been compiled and cached under `./target/`;
210+
> for example, adding a new string to `doc-valid-idents` may still result in Clippy flagging that string. To be sure
211+
> that any configuration changes are applied, you may want to run `cargo clean` and re-compile your crate from scratch.
212+
213+
To deactivate the “for further information visit *lint-link*” message you can
214+
define the `CLIPPY_DISABLE_DOCS_LINKS` environment variable.
215+
208216
### Specifying the minimum supported Rust version
209217

210218
Projects that intend to support old versions of Rust can disable lints pertaining to newer features by

book/src/development/adding_lints.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ We start by opening the test file created at `tests/ui/foo_functions.rs`.
9090
Update the file with some examples to get started:
9191

9292
```rust
93+
#![allow(unused)]
9394
#![warn(clippy::foo_functions)]
9495

9596
// Impl methods

book/src/development/common_tools_writing_lints.md

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Starting with an `expr`, you can check whether it is calling a specific method
6666
impl<'tcx> LateLintPass<'tcx> for MyStructLint {
6767
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx hir::Expr<'_>) {
6868
// Check our expr is calling a method
69-
if let hir::ExprKind::MethodCall(path, _, [_self_arg, ..]) = &expr.kind
69+
if let hir::ExprKind::MethodCall(path, _, _self_arg, ..) = &expr.kind
7070
// Check the name of this method is `some_method`
7171
&& path.ident.name == sym!(some_method)
7272
// Optionally, check the type of the self argument.
@@ -123,7 +123,8 @@ There are three ways to do this, depending on if the target trait has a
123123
diagnostic item, lang item or neither.
124124

125125
```rust
126-
use clippy_utils::{implements_trait, is_trait_method, match_trait_method, paths};
126+
use clippy_utils::ty::implements_trait;
127+
use clippy_utils::is_trait_method;
127128
use rustc_span::symbol::sym;
128129

129130
impl LateLintPass<'_> for MyStructLint {
@@ -143,13 +144,6 @@ impl LateLintPass<'_> for MyStructLint {
143144
.map_or(false, |id| implements_trait(cx, ty, id, &[])) {
144145
// `expr` implements `Drop` trait
145146
}
146-
147-
// 3. Using the type path with the expression
148-
// we use `match_trait_method` function from Clippy's utils
149-
// (This method should be avoided if possible)
150-
if match_trait_method(cx, expr, &paths::INTO) {
151-
// `expr` implements `Into` trait
152-
}
153147
}
154148
}
155149
```
@@ -233,8 +227,9 @@ functions to deal with macros:
233227
crates
234228

235229
```rust
236-
#[macro_use]
237-
extern crate a_crate_with_macros;
230+
use rustc_middle::lint::in_external_macro;
231+
232+
use a_crate_with_macros::foo;
238233

239234
// `foo` is defined in `a_crate_with_macros`
240235
foo!("bar");

clippy_dev/src/fmt.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,16 @@ pub fn run(check: bool, verbose: bool) {
8282
fn output_err(err: CliError) {
8383
match err {
8484
CliError::CommandFailed(command, stderr) => {
85-
eprintln!("error: A command failed! `{}`\nstderr: {}", command, stderr);
85+
eprintln!("error: A command failed! `{command}`\nstderr: {stderr}");
8686
},
8787
CliError::IoError(err) => {
88-
eprintln!("error: {}", err);
88+
eprintln!("error: {err}");
8989
},
9090
CliError::RustfmtNotInstalled => {
9191
eprintln!("error: rustfmt nightly is not installed.");
9292
},
9393
CliError::WalkDirError(err) => {
94-
eprintln!("error: {}", err);
94+
eprintln!("error: {err}");
9595
},
9696
CliError::IntellijSetupActive => {
9797
eprintln!(

clippy_dev/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(let_else)]
1+
#![feature(let_chains)]
22
#![feature(once_cell)]
33
#![feature(rustc_private)]
44
#![cfg_attr(feature = "deny-warnings", deny(warnings))]

0 commit comments

Comments
 (0)