Skip to content

Commit 41c845e

Browse files
committed
Merge commit 'ff0993c5e9162ddaea78e83d0f0161e68bd4ea73' into clippy
2 parents feb3536 + ff0993c commit 41c845e

File tree

143 files changed

+3943
-914
lines changed

Some content is hidden

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

143 files changed

+3943
-914
lines changed

src/tools/clippy/.github/workflows/clippy_bors.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ jobs:
232232
matrix:
233233
integration:
234234
- 'rust-lang/cargo'
235-
- 'rust-lang/rls'
235+
# FIXME: re-enable once fmt_macros is renamed in RLS
236+
# - 'rust-lang/rls'
236237
- 'rust-lang/chalk'
237238
- 'rust-lang/rustfmt'
238239
- 'Marwes/combine'

src/tools/clippy/CHANGELOG.md

+84-3
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,88 @@ document.
66

77
## Unreleased / In Rust Nightly
88

9-
[891e1a8...master](https://github.com/rust-lang/rust-clippy/compare/891e1a8...master)
9+
[7ea7cd1...master](https://github.com/rust-lang/rust-clippy/compare/7ea7cd1...master)
10+
11+
## Rust 1.45
12+
13+
Current beta, release 2020-07-16
14+
15+
[891e1a8...7ea7cd1](https://github.com/rust-lang/rust-clippy/compare/891e1a8...7ea7cd1)
16+
17+
### New lints
18+
19+
* [`match_wildcard_for_single_variants`] [#5582](https://github.com/rust-lang/rust-clippy/pull/5582)
20+
* [`unsafe_derive_deserialize`] [#5493](https://github.com/rust-lang/rust-clippy/pull/5493)
21+
* [`if_let_mutex`] [#5332](https://github.com/rust-lang/rust-clippy/pull/5332)
22+
* [`mismatched_target_os`] [#5506](https://github.com/rust-lang/rust-clippy/pull/5506)
23+
* [`await_holding_lock`] [#5439](https://github.com/rust-lang/rust-clippy/pull/5439)
24+
* [`match_on_vec_items`] [#5522](https://github.com/rust-lang/rust-clippy/pull/5522)
25+
* [`manual_async_fn`] [#5576](https://github.com/rust-lang/rust-clippy/pull/5576)
26+
* [`reversed_empty_ranges`] [#5583](https://github.com/rust-lang/rust-clippy/pull/5583)
27+
* [`manual_non_exhaustive`] [#5550](https://github.com/rust-lang/rust-clippy/pull/5550)
28+
29+
### Moves and Deprecations
30+
31+
* Downgrade [`match_bool`] to pedantic [#5408](https://github.com/rust-lang/rust-clippy/pull/5408)
32+
* Downgrade [`match_wild_err_arm`] to pedantic and update help messages. [#5622](https://github.com/rust-lang/rust-clippy/pull/5622)
33+
* Downgrade [`useless_let_if_seq`] to nursery. [#5599](https://github.com/rust-lang/rust-clippy/pull/5599)
34+
* Generalize `option_and_then_some` and rename to [`bind_instead_of_map`]. [#5529](https://github.com/rust-lang/rust-clippy/pull/5529)
35+
* Rename `identity_conversion` to [`useless_conversion`]. [#5568](https://github.com/rust-lang/rust-clippy/pull/5568)
36+
* Merge `block_in_if_condition_expr` and `block_in_if_condition_stmt` into [`blocks_in_if_conditions`].
37+
[#5563](https://github.com/rust-lang/rust-clippy/pull/5563)
38+
* Merge `option_map_unwrap_or`, `option_map_unwrap_or_else` and `result_map_unwrap_or_else` into [`map_unwrap_or`].
39+
[#5563](https://github.com/rust-lang/rust-clippy/pull/5563)
40+
* Merge `option_unwrap_used` and `result_unwrap_used` into [`unwrap_used`].
41+
[#5563](https://github.com/rust-lang/rust-clippy/pull/5563)
42+
* Merge `option_expect_used` and `result_expect_used` into [`expect_used`].
43+
[#5563](https://github.com/rust-lang/rust-clippy/pull/5563)
44+
* Merge `for_loop_over_option` and `for_loop_over_result` into [`for_loops_over_fallibles`].
45+
[#5563](https://github.com/rust-lang/rust-clippy/pull/5563)
46+
47+
### Enhancements
48+
49+
* Avoid running cargo lints when not enabled to improve performance. [#5505](https://github.com/rust-lang/rust-clippy/pull/5505)
50+
* Extend [`useless_conversion`] with `TryFrom` and `TryInto`. [#5631](https://github.com/rust-lang/rust-clippy/pull/5631)
51+
* Lint also in type parameters and where clauses in [`unused_unit`]. [#5592](https://github.com/rust-lang/rust-clippy/pull/5592)
52+
* Do not suggest deriving `Default` in [`new_without_default`]. [#5616](https://github.com/rust-lang/rust-clippy/pull/5616)
53+
54+
### False Positive Fixes
55+
56+
* [`while_let_on_iterator`] [#5525](https://github.com/rust-lang/rust-clippy/pull/5525)
57+
* [`empty_line_after_outer_attr`] [#5609](https://github.com/rust-lang/rust-clippy/pull/5609)
58+
* [`unnecessary_unwrap`] [#5558](https://github.com/rust-lang/rust-clippy/pull/5558)
59+
* [`comparison_chain`] [#5596](https://github.com/rust-lang/rust-clippy/pull/5596)
60+
* Don't trigger [`used_underscore_binding`] in await desugaring. [#5535](https://github.com/rust-lang/rust-clippy/pull/5535)
61+
* Don't trigger [`borrowed_box`] on mutable references. [#5491](https://github.com/rust-lang/rust-clippy/pull/5491)
62+
* Allow `1 << 0` in [`identity_op`]. [#5602](https://github.com/rust-lang/rust-clippy/pull/5602)
63+
* Allow `use super::*;` glob imports in [`wildcard_imports`]. [#5564](https://github.com/rust-lang/rust-clippy/pull/5564)
64+
* Whitelist more words in [`doc_markdown`]. [#5611](https://github.com/rust-lang/rust-clippy/pull/5611)
65+
* Skip dev and build deps in [`multiple_crate_versions`]. [#5636](https://github.com/rust-lang/rust-clippy/pull/5636)
66+
* Honor `allow` attribute on arguments in [`ptr_arg`]. [#5647](https://github.com/rust-lang/rust-clippy/pull/5647)
67+
* Honor lint level attributes for [`redundant_field_names`], [`just_underscores_and_digits`], [`many_single_char_names`]
68+
and [`similar_names`]. [#5651](https://github.com/rust-lang/rust-clippy/pull/5651)
69+
* Ignore calls to `len` in [`or_fun_call`]. [#4429](https://github.com/rust-lang/rust-clippy/pull/4429)
70+
71+
### Suggestion Improvements
72+
73+
* Simplify suggestions in [`manual_memcpy`]. [#5536](https://github.com/rust-lang/rust-clippy/pull/5536)
74+
* Fix suggestion in [`redundant_pattern_matching`] for macros. [#5511](https://github.com/rust-lang/rust-clippy/pull/5511)
75+
* Avoid suggesting `copied()` for mutable references in [`map_clone`]. [#5530](https://github.com/rust-lang/rust-clippy/pull/5530)
76+
* Improve help message for [`clone_double_ref`]. [#5547](https://github.com/rust-lang/rust-clippy/pull/5547)
77+
78+
### ICE Fixes
79+
80+
* Fix ICE caused in unwrap module. [#5590](https://github.com/rust-lang/rust-clippy/pull/5590)
81+
* Fix ICE on rustc test issue-69020-assoc-const-arith-overflow.rs [#5499](https://github.com/rust-lang/rust-clippy/pull/5499)
82+
83+
### Documentation
84+
85+
* Clarify the documentation of [`unnecessary_mut_passed`]. [#5639](https://github.com/rust-lang/rust-clippy/pull/5639)
86+
* Extend example for [`unneeded_field_pattern`]. [#5541](https://github.com/rust-lang/rust-clippy/pull/5541)
1087

1188
## Rust 1.44
1289

13-
Current beta, release 2020-06-04
90+
Current stable, released 2020-06-04
1491

1592
[204bb9b...891e1a8](https://github.com/rust-lang/rust-clippy/compare/204bb9b...891e1a8)
1693

@@ -93,7 +170,7 @@ Current beta, release 2020-06-04
93170

94171
## Rust 1.43
95172

96-
Current stable, released 2020-04-23
173+
Released 2020-04-23
97174

98175
[4ee1206...204bb9b](https://github.com/rust-lang/rust-clippy/compare/4ee1206...204bb9b)
99176

@@ -1401,6 +1478,7 @@ Released 2018-09-13
14011478
[`items_after_statements`]: https://rust-lang.github.io/rust-clippy/master/index.html#items_after_statements
14021479
[`iter_cloned_collect`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect
14031480
[`iter_next_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_next_loop
1481+
[`iter_next_slice`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_next_slice
14041482
[`iter_nth`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth
14051483
[`iter_nth_zero`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth_zero
14061484
[`iter_skip_next`]: https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next
@@ -1601,9 +1679,11 @@ Released 2018-09-13
16011679
[`unnecessary_fold`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold
16021680
[`unnecessary_mut_passed`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed
16031681
[`unnecessary_operation`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation
1682+
[`unnecessary_sort_by`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by
16041683
[`unnecessary_unwrap`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap
16051684
[`unneeded_field_pattern`]: https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern
16061685
[`unneeded_wildcard_pattern`]: https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_wildcard_pattern
1686+
[`unnested_or_patterns`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnested_or_patterns
16071687
[`unreachable`]: https://rust-lang.github.io/rust-clippy/master/index.html#unreachable
16081688
[`unreadable_literal`]: https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal
16091689
[`unsafe_derive_deserialize`]: https://rust-lang.github.io/rust-clippy/master/index.html#unsafe_derive_deserialize
@@ -1630,6 +1710,7 @@ Released 2018-09-13
16301710
[`useless_transmute`]: https://rust-lang.github.io/rust-clippy/master/index.html#useless_transmute
16311711
[`useless_vec`]: https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec
16321712
[`vec_box`]: https://rust-lang.github.io/rust-clippy/master/index.html#vec_box
1713+
[`vec_resize_to_zero`]: https://rust-lang.github.io/rust-clippy/master/index.html#vec_resize_to_zero
16331714
[`verbose_bit_mask`]: https://rust-lang.github.io/rust-clippy/master/index.html#verbose_bit_mask
16341715
[`verbose_file_reads`]: https://rust-lang.github.io/rust-clippy/master/index.html#verbose_file_reads
16351716
[`vtable_address_comparisons`]: https://rust-lang.github.io/rust-clippy/master/index.html#vtable_address_comparisons

src/tools/clippy/CONTRIBUTING.md

+28-8
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ anything, feel free to ask questions on issues or visit the `#clippy` on [Discor
1212

1313
All contributors are expected to follow the [Rust Code of Conduct].
1414

15-
* [Getting started](#getting-started)
16-
* [Finding something to fix/improve](#finding-something-to-fiximprove)
17-
* [Writing code](#writing-code)
18-
* [How Clippy works](#how-clippy-works)
19-
* [Fixing nightly build failures](#fixing-build-failures-caused-by-rust)
20-
* [Issue and PR Triage](#issue-and-pr-triage)
21-
* [Bors and Homu](#bors-and-homu)
22-
* [Contributions](#contributions)
15+
- [Contributing to Clippy](#contributing-to-clippy)
16+
- [Getting started](#getting-started)
17+
- [Finding something to fix/improve](#finding-something-to-fiximprove)
18+
- [Writing code](#writing-code)
19+
- [Getting code-completion for rustc internals to work](#getting-code-completion-for-rustc-internals-to-work)
20+
- [How Clippy works](#how-clippy-works)
21+
- [Fixing build failures caused by Rust](#fixing-build-failures-caused-by-rust)
22+
- [Issue and PR triage](#issue-and-pr-triage)
23+
- [Bors and Homu](#bors-and-homu)
24+
- [Contributions](#contributions)
2325

2426
[Discord]: https://discord.gg/rust-lang
2527
[Rust Code of Conduct]: https://www.rust-lang.org/policies/code-of-conduct
@@ -91,6 +93,24 @@ quick read.
9193
[rfc_stability]: https://github.com/rust-lang/rfcs/blob/master/text/2476-clippy-uno.md#stability-guarantees
9294
[rfc_lint_cats]: https://github.com/rust-lang/rfcs/blob/master/text/2476-clippy-uno.md#lint-audit-and-categories
9395

96+
## Getting code-completion for rustc internals to work
97+
98+
Unfortunately, [`rust-analyzer`][ra_homepage] does not (yet?) understand how Clippy uses compiler-internals
99+
using `extern crate` and it also needs to be able to read the source files of the rustc-compiler which are not
100+
available via a `rustup` component at the time of writing.
101+
To work around this, you need to have a copy of the [rustc-repo][rustc_repo] available which can be obtained via
102+
`git clone https://github.com/rust-lang/rust/`.
103+
Then you can run a `cargo dev` command to automatically make Clippy use the rustc-repo via path-dependencies
104+
which rust-analyzer will be able to understand.
105+
Run `cargo dev ra-setup --repo-path <repo-path>` where `<repo-path>` is an absolute path to the rustc repo
106+
you just cloned.
107+
The command will add path-dependencies pointing towards rustc-crates inside the rustc repo to
108+
Clippys `Cargo.toml`s and should allow rust-analyzer to understand most of the types that Clippy uses.
109+
Just make sure to remove the dependencies again before finally making a pull request!
110+
111+
[ra_homepage]: https://rust-analyzer.github.io/
112+
[rustc_repo]: https://github.com/rust-lang/rust/
113+
94114
## How Clippy works
95115

96116
[`clippy_lints/src/lib.rs`][lint_crate_entry] imports all the different lint modules and registers in the [`LintStore`].

src/tools/clippy/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ tempfile = { version = "3.1.0", optional = true }
3737
lazy_static = "1.0"
3838

3939
[dev-dependencies]
40-
cargo_metadata = "0.9.0"
40+
cargo_metadata = "0.9.1"
4141
compiletest_rs = { version = "0.5.0", features = ["tmp"] }
4242
tester = "0.7"
4343
lazy_static = "1.0"

src/tools/clippy/clippy_dev/src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use walkdir::WalkDir;
1111

1212
pub mod fmt;
1313
pub mod new_lint;
14+
pub mod ra_setup;
1415
pub mod stderr_length_check;
1516
pub mod update_lints;
1617

@@ -400,7 +401,7 @@ fn test_replace_region_no_changes() {
400401
changed: false,
401402
new_lines: "123\n456\n789".to_string(),
402403
};
403-
let result = replace_region_in_text(text, r#"^\s*123$"#, r#"^\s*456"#, false, || vec![]);
404+
let result = replace_region_in_text(text, r#"^\s*123$"#, r#"^\s*456"#, false, Vec::new);
404405
assert_eq!(expected, result);
405406
}
406407

src/tools/clippy/clippy_dev/src/main.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![cfg_attr(feature = "deny-warnings", deny(warnings))]
22

33
use clap::{App, Arg, SubCommand};
4-
use clippy_dev::{fmt, new_lint, stderr_length_check, update_lints};
4+
use clippy_dev::{fmt, new_lint, ra_setup, stderr_length_check, update_lints};
55

66
fn main() {
77
let matches = App::new("Clippy developer tooling")
@@ -87,6 +87,19 @@ fn main() {
8787
SubCommand::with_name("limit_stderr_length")
8888
.about("Ensures that stderr files do not grow longer than a certain amount of lines."),
8989
)
90+
.subcommand(
91+
SubCommand::with_name("ra-setup")
92+
.about("Alter dependencies so rust-analyzer can find rustc internals")
93+
.arg(
94+
Arg::with_name("rustc-repo-path")
95+
.long("repo-path")
96+
.short("r")
97+
.help("The path to a rustc repo that will be used for setting the dependencies")
98+
.takes_value(true)
99+
.value_name("path")
100+
.required(true),
101+
),
102+
)
90103
.get_matches();
91104

92105
match matches.subcommand() {
@@ -115,6 +128,7 @@ fn main() {
115128
("limit_stderr_length", _) => {
116129
stderr_length_check::check();
117130
},
131+
("ra-setup", Some(matches)) => ra_setup::run(matches.value_of("rustc-repo-path")),
118132
_ => {},
119133
}
120134
}

src/tools/clippy/clippy_dev/src/new_lint.rs

+2
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ fn get_manifest_contents(lint_name: &str, hint: &str) -> String {
147147
name = "{}"
148148
version = "0.1.0"
149149
publish = false
150+
151+
[workspace]
150152
"#,
151153
hint, lint_name
152154
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#![allow(clippy::filter_map)]
2+
3+
use std::fs;
4+
use std::fs::File;
5+
use std::io::prelude::*;
6+
use std::path::PathBuf;
7+
8+
// This module takes an absolute path to a rustc repo and alters the dependencies to point towards
9+
// the respective rustc subcrates instead of using extern crate xyz.
10+
// This allows rust analyzer to analyze rustc internals and show proper information inside clippy
11+
// code. See https://github.com/rust-analyzer/rust-analyzer/issues/3517 and https://github.com/rust-lang/rust-clippy/issues/5514 for details
12+
13+
pub fn run(rustc_path: Option<&str>) {
14+
// we can unwrap here because the arg is required here
15+
let rustc_path = PathBuf::from(rustc_path.unwrap());
16+
assert!(rustc_path.is_dir(), "path is not a directory");
17+
let rustc_source_basedir = rustc_path.join("src");
18+
assert!(
19+
rustc_source_basedir.is_dir(),
20+
"are you sure the path leads to a rustc repo?"
21+
);
22+
23+
let clippy_root_manifest = fs::read_to_string("Cargo.toml").expect("failed to read ./Cargo.toml");
24+
let clippy_root_lib_rs = fs::read_to_string("src/driver.rs").expect("failed to read ./src/driver.rs");
25+
inject_deps_into_manifest(
26+
&rustc_source_basedir,
27+
"Cargo.toml",
28+
&clippy_root_manifest,
29+
&clippy_root_lib_rs,
30+
)
31+
.expect("Failed to inject deps into ./Cargo.toml");
32+
33+
let clippy_lints_manifest =
34+
fs::read_to_string("clippy_lints/Cargo.toml").expect("failed to read ./clippy_lints/Cargo.toml");
35+
let clippy_lints_lib_rs =
36+
fs::read_to_string("clippy_lints/src/lib.rs").expect("failed to read ./clippy_lints/src/lib.rs");
37+
inject_deps_into_manifest(
38+
&rustc_source_basedir,
39+
"clippy_lints/Cargo.toml",
40+
&clippy_lints_manifest,
41+
&clippy_lints_lib_rs,
42+
)
43+
.expect("Failed to inject deps into ./clippy_lints/Cargo.toml");
44+
}
45+
46+
fn inject_deps_into_manifest(
47+
rustc_source_dir: &PathBuf,
48+
manifest_path: &str,
49+
cargo_toml: &str,
50+
lib_rs: &str,
51+
) -> std::io::Result<()> {
52+
let extern_crates = lib_rs
53+
.lines()
54+
// get the deps
55+
.filter(|line| line.starts_with("extern crate"))
56+
// we have something like "extern crate foo;", we only care about the "foo"
57+
// ↓ ↓
58+
// extern crate rustc_middle;
59+
.map(|s| &s[13..(s.len() - 1)]);
60+
61+
let new_deps = extern_crates.map(|dep| {
62+
// format the dependencies that are going to be put inside the Cargo.toml
63+
format!(
64+
"{dep} = {{ path = \"{source_path}/lib{dep}\" }}\n",
65+
dep = dep,
66+
source_path = rustc_source_dir.display()
67+
)
68+
});
69+
70+
// format a new [dependencies]-block with the new deps we need to inject
71+
let mut all_deps = String::from("[dependencies]\n");
72+
new_deps.for_each(|dep_line| {
73+
all_deps.push_str(&dep_line);
74+
});
75+
76+
// replace "[dependencies]" with
77+
// [dependencies]
78+
// dep1 = { path = ... }
79+
// dep2 = { path = ... }
80+
// etc
81+
let new_manifest = cargo_toml.replacen("[dependencies]\n", &all_deps, 1);
82+
83+
// println!("{}", new_manifest);
84+
let mut file = File::create(manifest_path)?;
85+
file.write_all(new_manifest.as_bytes())?;
86+
87+
println!("Dependency paths injected: {}", manifest_path);
88+
89+
Ok(())
90+
}

src/tools/clippy/clippy_lints/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ keywords = ["clippy", "lint", "plugin"]
1717
edition = "2018"
1818

1919
[dependencies]
20-
cargo_metadata = "0.9.0"
20+
cargo_metadata = "0.9.1"
2121
if_chain = "1.0.0"
2222
itertools = "0.9"
2323
lazy_static = "1.0.2"
24-
pulldown-cmark = { version = "0.7", default-features = false }
24+
pulldown-cmark = { version = "0.7.1", default-features = false }
2525
quine-mc_cluskey = "0.2.2"
2626
regex-syntax = "0.6"
2727
serde = { version = "1.0", features = ["derive"] }

src/tools/clippy/clippy_lints/src/assign_ops.rs

+4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ declare_clippy_lint! {
2424
/// let mut a = 5;
2525
/// let b = 0;
2626
/// // ...
27+
/// // Bad
2728
/// a = a + b;
29+
///
30+
/// // Good
31+
/// a += b;
2832
/// ```
2933
pub ASSIGN_OP_PATTERN,
3034
style,

0 commit comments

Comments
 (0)