Skip to content

Commit

Permalink
Auto merge of #4104 - Manishearth:beta-backports, r=flip1995
Browse files Browse the repository at this point in the history
Backport #4101 to beta

This lint has been causing lots of problems.

I'll check up on other potential beta backports when I build the new changelog

r? @oli-obk
  • Loading branch information
bors committed May 17, 2019
2 parents 37f5c1e + 28bde06 commit 8434618
Show file tree
Hide file tree
Showing 13 changed files with 56 additions and 56 deletions.
5 changes: 3 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
language: rust

rust: nightly
rust: beta

os:
- linux
Expand All @@ -17,6 +17,7 @@ branches:
env:
global:
- RUST_BACKTRACE=1
- RUSTC_BOOTSTRAP=1

install:
- |
Expand Down Expand Up @@ -90,7 +91,7 @@ matrix:
script:
- |
rm rust-toolchain
./setup-toolchain.sh
rustup override set beta
export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib
- |
if [ -z ${INTEGRATION} ]; then
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,7 @@ All notable changes to this project will be documented in this file.
[`redundant_clone`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_clone
[`redundant_closure`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure
[`redundant_closure_call`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_call
[`redundant_closure_for_method_calls`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_for_method_calls
[`redundant_field_names`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names
[`redundant_pattern`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern
[`redundant_pattern_matching`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

A collection of lints to catch common mistakes and improve your [Rust](https://github.com/rust-lang/rust) code.

[There are 298 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html)
[There are 299 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html)

We have a bunch of lint categories to allow you to choose how much Clippy is supposed to ~~annoy~~ help you:

Expand Down
9 changes: 2 additions & 7 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,8 @@ branches:

install:
- curl -sSf -o rustup-init.exe https://win.rustup.rs/
- rustup-init.exe -y --default-host %TARGET% --default-toolchain nightly
- rustup-init.exe -y --default-host %TARGET% --default-toolchain beta
- set PATH=%PATH%;C:\Users\appveyor\.cargo\bin
- git ls-remote https://github.com/rust-lang/rust.git master | awk '{print $1}' >rustc-hash.txt
- set /p RUSTC_HASH=<rustc-hash.txt
- del rust-toolchain
- cargo install rustup-toolchain-install-master --debug || echo "rustup-toolchain-install-master already installed"
- rustup-toolchain-install-master %RUSTC_HASH% -f -n master
- rustup default master
- set PATH=%PATH%;C:\Users\appveyor\.rustup\toolchains\master\bin
- rustc -V
- cargo -V
Expand All @@ -32,6 +26,7 @@ build: false

test_script:
- set RUST_BACKTRACE=1
- set RUSTC_BOOTSTRAP=1
- cargo build --features debugging
- cargo test --features debugging

Expand Down
27 changes: 1 addition & 26 deletions ci/base-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ export CARGO_TARGET_DIR=`pwd`/target/

# Perform various checks for lint registration
./util/dev update_lints --check
cargo +nightly fmt --all -- --check

# Check running clippy-driver without cargo
(
Expand All @@ -50,29 +49,5 @@ cargo +nightly fmt --all -- --check
# TODO: CLIPPY_CONF_DIR / CARGO_MANIFEST_DIR
)

# make sure tests are formatted

# some lints are sensitive to formatting, exclude some files
tests_need_reformatting="false"
# switch to nightly
rustup override set nightly
# avoid loop spam and allow cmds with exit status != 0
set +ex

for file in `find tests | grep "\.rs$"` ; do
rustfmt ${file} --check
if [ $? -ne 0 ]; then
echo "${file} needs reformatting!"
tests_need_reformatting="true"
fi
done

set -ex # reset

if [ "${tests_need_reformatting}" == "true" ] ; then
echo "Tests need reformatting!"
exit 2
fi

# switch back to master
rustup override set master
# rustup override set master
26 changes: 24 additions & 2 deletions clippy_lints/src/eta_reduction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,31 @@ declare_clippy_lint! {
"redundant closures, i.e., `|a| foo(a)` (which can be written as just `foo`)"
}

declare_clippy_lint! {
/// **What it does:** Checks for closures which only invoke a method on the closure
/// argument and can be replaced by referencing the method directly.
///
/// **Why is this bad?** It's unnecessary to create the closure.
///
/// **Known problems:** rust-lang/rust-clippy#3071, rust-lang/rust-clippy#4002,
/// rust-lang/rust-clippy#3942
///
/// **Example:**
/// ```rust,ignore
/// Some('a').map(|s| s.to_uppercase());
/// ```
/// may be rewritten as
/// ```rust,ignore
/// Some('a').map(char::to_uppercase);
/// ```
pub REDUNDANT_CLOSURE_FOR_METHOD_CALLS,
pedantic,
"redundant closures for method calls"
}

impl LintPass for EtaPass {
fn get_lints(&self) -> LintArray {
lint_array!(REDUNDANT_CLOSURE)
lint_array!(REDUNDANT_CLOSURE, REDUNDANT_CLOSURE_FOR_METHOD_CALLS)
}

fn name(&self) -> &'static str {
Expand Down Expand Up @@ -110,7 +132,7 @@ fn check_closure(cx: &LateContext<'_, '_>, expr: &Expr) {
if let Some(name) = get_ufcs_type_name(cx, method_def_id, &args[0]);

then {
span_lint_and_then(cx, REDUNDANT_CLOSURE, expr.span, "redundant closure found", |db| {
span_lint_and_then(cx, REDUNDANT_CLOSURE_FOR_METHOD_CALLS, expr.span, "redundant closure found", |db| {
db.span_suggestion(
expr.span,
"remove closure as shown",
Expand Down
1 change: 1 addition & 0 deletions clippy_lints/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,7 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) {
enum_glob_use::ENUM_GLOB_USE,
enum_variants::MODULE_NAME_REPETITIONS,
enum_variants::PUB_ENUM_VARIANT_NAMES,
eta_reduction::REDUNDANT_CLOSURE_FOR_METHOD_CALLS,
functions::TOO_MANY_LINES,
if_not_else::IF_NOT_ELSE,
infinite_iter::MAYBE_INFINITE_ITER,
Expand Down
2 changes: 1 addition & 1 deletion rust-toolchain
Original file line number Diff line number Diff line change
@@ -1 +1 @@
nightly
beta
5 changes: 2 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,9 @@ where
})
.map(|p| ("CARGO_TARGET_DIR", p));

// Run the dogfood tests directly on nightly cargo. This is required due
// to a bug in rustup.rs when running cargo on custom toolchains. See issue #3118.
// Don't run the dogfood tests on beta
if std::env::var_os("CLIPPY_DOGFOOD").is_some() && cfg!(windows) {
args.insert(0, "+nightly".to_string());
return Ok(())
}

let exit_status = std::process::Command::new("cargo")
Expand Down
6 changes: 5 additions & 1 deletion tests/ui/eta.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
clippy::option_map_unit_fn,
clippy::trivially_copy_pass_by_ref
)]
#![warn(clippy::redundant_closure, clippy::needless_borrow)]
#![warn(
clippy::redundant_closure,
clippy::redundant_closure_for_method_calls,
clippy::needless_borrow
)]

use std::path::PathBuf;

Expand Down
24 changes: 13 additions & 11 deletions tests/ui/eta.stderr
Original file line number Diff line number Diff line change
@@ -1,69 +1,71 @@
error: redundant closure found
--> $DIR/eta.rs:15:27
--> $DIR/eta.rs:19:27
|
LL | let a = Some(1u8).map(|a| foo(a));
| ^^^^^^^^^^ help: remove closure as shown: `foo`
|
= note: `-D clippy::redundant-closure` implied by `-D warnings`

error: redundant closure found
--> $DIR/eta.rs:16:10
--> $DIR/eta.rs:20:10
|
LL | meta(|a| foo(a));
| ^^^^^^^^^^ help: remove closure as shown: `foo`

error: redundant closure found
--> $DIR/eta.rs:17:27
--> $DIR/eta.rs:21:27
|
LL | let c = Some(1u8).map(|a| {1+2; foo}(a));
| ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `{1+2; foo}`

error: this expression borrows a reference that is immediately dereferenced by the compiler
--> $DIR/eta.rs:19:21
--> $DIR/eta.rs:23:21
|
LL | all(&[1, 2, 3], &&2, |x, y| below(x, y)); //is adjusted
| ^^^ help: change this to: `&2`
|
= note: `-D clippy::needless-borrow` implied by `-D warnings`

error: redundant closure found
--> $DIR/eta.rs:26:27
--> $DIR/eta.rs:30:27
|
LL | let e = Some(1u8).map(|a| generic(a));
| ^^^^^^^^^^^^^^ help: remove closure as shown: `generic`

error: redundant closure found
--> $DIR/eta.rs:69:51
--> $DIR/eta.rs:73:51
|
LL | let e = Some(TestStruct { some_ref: &i }).map(|a| a.foo());
| ^^^^^^^^^^^ help: remove closure as shown: `TestStruct::foo`
|
= note: `-D clippy::redundant-closure-for-method-calls` implied by `-D warnings`

error: redundant closure found
--> $DIR/eta.rs:71:51
--> $DIR/eta.rs:75:51
|
LL | let e = Some(TestStruct { some_ref: &i }).map(|a| a.trait_foo());
| ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TestTrait::trait_foo`

error: redundant closure found
--> $DIR/eta.rs:74:42
--> $DIR/eta.rs:78:42
|
LL | let e = Some(&mut vec![1, 2, 3]).map(|v| v.clear());
| ^^^^^^^^^^^^^ help: remove closure as shown: `std::vec::Vec::clear`

error: redundant closure found
--> $DIR/eta.rs:79:29
--> $DIR/eta.rs:83:29
|
LL | let e = Some("str").map(|s| s.to_string());
| ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `std::string::ToString::to_string`

error: redundant closure found
--> $DIR/eta.rs:81:27
--> $DIR/eta.rs:85:27
|
LL | let e = Some('a').map(|s| s.to_uppercase());
| ^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `char::to_uppercase`

error: redundant closure found
--> $DIR/eta.rs:84:65
--> $DIR/eta.rs:88:65
|
LL | let e: std::vec::Vec<char> = vec!['a', 'b', 'c'].iter().map(|c| c.to_ascii_uppercase()).collect();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `char::to_ascii_uppercase`
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/map_clone.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#![allow(clippy::iter_cloned_collect)]
#![allow(clippy::clone_on_copy)]
#![allow(clippy::missing_docs_in_private_items)]
#![allow(clippy::redundant_closure)]
#![allow(clippy::redundant_closure_for_method_calls)]

fn main() {
let _: Vec<i8> = vec![5_i8; 6].iter().cloned().collect();
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/map_clone.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#![allow(clippy::iter_cloned_collect)]
#![allow(clippy::clone_on_copy)]
#![allow(clippy::missing_docs_in_private_items)]
#![allow(clippy::redundant_closure)]
#![allow(clippy::redundant_closure_for_method_calls)]

fn main() {
let _: Vec<i8> = vec![5_i8; 6].iter().map(|x| *x).collect();
Expand Down

0 comments on commit 8434618

Please sign in to comment.