From 31c0214e5a42cf16a8759d88988e9b4700826dbe Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Wed, 19 Jun 2019 16:21:19 +0900 Subject: [PATCH 1/6] Use #![warn(single_use_lifetimes)] --- futures-channel/src/lib.rs | 1 + futures-core/src/future/future_obj.rs | 2 ++ futures-core/src/lib.rs | 1 + futures-executor/src/lib.rs | 1 + futures-io/src/lib.rs | 1 + futures-select-macro/src/lib.rs | 1 + futures-sink/src/lib.rs | 1 + futures-test/src/lib.rs | 1 + futures-util/src/compat/executor.rs | 1 + futures-util/src/lib.rs | 1 + futures/src/lib.rs | 1 + 11 files changed, 12 insertions(+) diff --git a/futures-channel/src/lib.rs b/futures-channel/src/lib.rs index 1a19ed1e4f..459db481b1 100644 --- a/futures-channel/src/lib.rs +++ b/futures-channel/src/lib.rs @@ -9,6 +9,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-core/src/future/future_obj.rs b/futures-core/src/future/future_obj.rs index 04d4b268a1..47550501e7 100644 --- a/futures-core/src/future/future_obj.rs +++ b/futures-core/src/future/future_obj.rs @@ -21,6 +21,7 @@ pub struct LocalFutureObj<'a, T> { impl Unpin for LocalFutureObj<'_, T> {} +#[allow(single_use_lifetimes)] #[allow(clippy::transmute_ptr_to_ptr)] unsafe fn remove_future_lifetime<'a, T>(ptr: *mut (dyn Future + 'a)) -> *mut (dyn Future + 'static) @@ -28,6 +29,7 @@ unsafe fn remove_future_lifetime<'a, T>(ptr: *mut (dyn Future + 'a)) mem::transmute(ptr) } +#[allow(single_use_lifetimes)] unsafe fn remove_drop_lifetime<'a, T>(ptr: unsafe fn (*mut (dyn Future + 'a))) -> unsafe fn(*mut (dyn Future + 'static)) { diff --git a/futures-core/src/lib.rs b/futures-core/src/lib.rs index bd44e51098..711acfcfb2 100644 --- a/futures-core/src/lib.rs +++ b/futures-core/src/lib.rs @@ -5,6 +5,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-executor/src/lib.rs b/futures-executor/src/lib.rs index e5511fde7c..5d1d290d9d 100644 --- a/futures-executor/src/lib.rs +++ b/futures-executor/src/lib.rs @@ -6,6 +6,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-io/src/lib.rs b/futures-io/src/lib.rs index e73de08290..e2ad924f3c 100644 --- a/futures-io/src/lib.rs +++ b/futures-io/src/lib.rs @@ -11,6 +11,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-select-macro/src/lib.rs b/futures-select-macro/src/lib.rs index dc0707d359..21ccc4222b 100644 --- a/futures-select-macro/src/lib.rs +++ b/futures-select-macro/src/lib.rs @@ -2,6 +2,7 @@ #![recursion_limit="128"] #![warn(rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] extern crate proc_macro; diff --git a/futures-sink/src/lib.rs b/futures-sink/src/lib.rs index d9cf4303f7..12e2a8f59e 100644 --- a/futures-sink/src/lib.rs +++ b/futures-sink/src/lib.rs @@ -5,6 +5,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-test/src/lib.rs b/futures-test/src/lib.rs index a13cf55def..1ed22d073e 100644 --- a/futures-test/src/lib.rs +++ b/futures-test/src/lib.rs @@ -1,6 +1,7 @@ //! Utilities to make testing [`Future`s](futures_core::Future) easier #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-util/src/compat/executor.rs b/futures-util/src/compat/executor.rs index 7d461d2f57..f1ac18ae63 100644 --- a/futures-util/src/compat/executor.rs +++ b/futures-util/src/compat/executor.rs @@ -81,6 +81,7 @@ where Ex: Executor01, } } +#[allow(single_use_lifetimes)] // https://github.com/rust-lang/rust/issues/55058 impl Executor01 for Compat where for<'a> &'a Sp: Spawn03, diff --git a/futures-util/src/lib.rs b/futures-util/src/lib.rs index f8a63c8f8a..4636e70bab 100644 --- a/futures-util/src/lib.rs +++ b/futures-util/src/lib.rs @@ -7,6 +7,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures/src/lib.rs b/futures/src/lib.rs index 6b63b2d0a3..4affb03b74 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -27,6 +27,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] +#![warn(single_use_lifetimes)] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] From 824488a0b75da0dd10e089481eb0d9c86cc4b9c6 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Wed, 19 Jun 2019 16:21:39 +0900 Subject: [PATCH 2/6] Enable single_use_lifetimes lint only on cfg(test) --- futures-channel/src/lib.rs | 3 ++- futures-core/src/lib.rs | 3 ++- futures-executor/src/lib.rs | 3 ++- futures-io/src/lib.rs | 3 ++- futures-select-macro/src/lib.rs | 3 ++- futures-sink/src/lib.rs | 3 ++- futures-test/src/lib.rs | 3 ++- futures-util/src/lib.rs | 3 ++- futures/src/lib.rs | 3 ++- 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/futures-channel/src/lib.rs b/futures-channel/src/lib.rs index 459db481b1..2769425677 100644 --- a/futures-channel/src/lib.rs +++ b/futures-channel/src/lib.rs @@ -9,7 +9,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-core/src/lib.rs b/futures-core/src/lib.rs index 711acfcfb2..95331a2f29 100644 --- a/futures-core/src/lib.rs +++ b/futures-core/src/lib.rs @@ -5,7 +5,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-executor/src/lib.rs b/futures-executor/src/lib.rs index 5d1d290d9d..c4d4532ad8 100644 --- a/futures-executor/src/lib.rs +++ b/futures-executor/src/lib.rs @@ -6,7 +6,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-io/src/lib.rs b/futures-io/src/lib.rs index e2ad924f3c..a73c3f6bc0 100644 --- a/futures-io/src/lib.rs +++ b/futures-io/src/lib.rs @@ -11,7 +11,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-select-macro/src/lib.rs b/futures-select-macro/src/lib.rs index 21ccc4222b..2cc2a4c9a4 100644 --- a/futures-select-macro/src/lib.rs +++ b/futures-select-macro/src/lib.rs @@ -2,7 +2,8 @@ #![recursion_limit="128"] #![warn(rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] extern crate proc_macro; diff --git a/futures-sink/src/lib.rs b/futures-sink/src/lib.rs index 12e2a8f59e..a690ff9dae 100644 --- a/futures-sink/src/lib.rs +++ b/futures-sink/src/lib.rs @@ -5,7 +5,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-test/src/lib.rs b/futures-test/src/lib.rs index 1ed22d073e..f9c7c421e7 100644 --- a/futures-test/src/lib.rs +++ b/futures-test/src/lib.rs @@ -1,7 +1,8 @@ //! Utilities to make testing [`Future`s](futures_core::Future) easier #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures-util/src/lib.rs b/futures-util/src/lib.rs index 4636e70bab..70e8d6db76 100644 --- a/futures-util/src/lib.rs +++ b/futures-util/src/lib.rs @@ -7,7 +7,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] diff --git a/futures/src/lib.rs b/futures/src/lib.rs index 4affb03b74..215a596957 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -27,7 +27,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms, unreachable_pub)] -#![warn(single_use_lifetimes)] +// It cannot be included in the published code because this lints have false positives in the minimum required version. +#![cfg_attr(test, warn(single_use_lifetimes))] #![warn(clippy::all)] #![doc(test(attr(deny(warnings), allow(dead_code, unused_assignments, unused_variables))))] From eb4cbfa0171233b21c5c42d17bde1eebb5542e01 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Wed, 19 Jun 2019 16:24:53 +0900 Subject: [PATCH 3/6] Deny warnings on CI --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 5295acc45e..d096cd7761 100644 --- a/.travis.yml +++ b/.travis.yml @@ -147,6 +147,7 @@ script: env: global: - secure: "iwVcMVIF7ZSY82fK5UyyUvVvJxMSYrbZawh1+4Oi8pvOdYq1gptcDoOC8jxWwCwrNF1b+/85n+jlEUngEqqSmV5PjAbWPjoc+u4Zn7CRi1AlxoUlvHPiQm4vM4Mkkd6GsqoIZttCeedU9m/w0nQ18uUtK8uD6vr2FVdcMnUnkYQAxuGOowGLrwidukzfBXMCu/JrwKMIbt61knAFiI/KJknu0h1mRrhpeF/sQ3tJFzRRcQeFJkbfwDzltMpPo1hq5D3HI4ONjYi/qO2pwUhDk4umfp9cLW9MS8rQvptxJTQmWemHi+f2/U4ld6a0URL6kEuMkt/EbH0A74eFtlicfRs44dX9MlWoqbLypnC3ymqmHcpwcwNA3HmZyg800MTuU+BPK41HIPdO9tPpxjHEiqvNDknH7qs+YBnis0eH7DHJgEjXq651PjW7pm+rnHPwsj+OzKE1YBNxBQZZDkS3VnZJz+O4tVsOzc3IOz0e+lf7VVuI17C9haj117nKp3umC4MVBA0S8RfreFgqpyDeY2zwcqOr0YOlEGGRl0vyWP8Qcxx12kQ7+doLolt6Kxda4uO0hKRmIF6+qki1T+L7v8BOGOtCncz4f7IX48eQ7+Wu0OtglRn45qAa3CxjUuW6xX3KSNH66PCXV0Jtp8Ga2SSevX2wtbbFu9f+9R+PQY4=" + - RUSTFLAGS=-Dwarnings notifications: email: From d98f01574b8640181c854fac609205cc1af6ee05 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Wed, 19 Jun 2019 17:49:19 +0900 Subject: [PATCH 4/6] Change two test to build --- .travis.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d096cd7761..1e733d0e42 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,8 +19,11 @@ matrix: # This is the minimum Rust version supported by `async-await` feature. # When updating this, the reminder to update the minimum required version of `async-await` feature in README.md. - - name: cargo +nightly test (minimum required version) + - name: cargo +nightly build (minimum required version) rust: nightly-2019-05-09 + script: + - cargo run --manifest-path ci/remove-dev-dependencies/Cargo.toml */Cargo.toml + - cargo build --all --all-features - name: cargo test rust: nightly @@ -30,11 +33,12 @@ matrix: rust: nightly os: linux - - name: cargo test (with minimal versions) + - name: cargo build (with minimal versions) rust: nightly script: + - cargo run --manifest-path ci/remove-dev-dependencies/Cargo.toml */Cargo.toml - cargo update -Zminimal-versions - - cargo test --all --all-features + - cargo build --all --all-features - name: cargo clippy rust: nightly From 812c0b64ee1030bb6554869b49f247f1642799a2 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Wed, 19 Jun 2019 17:54:41 +0900 Subject: [PATCH 5/6] Tweak options passed to clippy --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1e733d0e42..caf523662e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,7 +45,7 @@ matrix: script: - if rustup component add clippy-preview; then - cargo clippy --all -- -Dwarnings -Drust-2018-idioms; + cargo clippy --all --all-features; else echo 'Skipping clippy'; fi From 4621fdb0105a34f7546d0296759251ab7df6a0fe Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Wed, 19 Jun 2019 19:01:09 +0900 Subject: [PATCH 6/6] Bump minimum required version of syn dependency to avoid warnings in minimal versions build --- futures-select-macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futures-select-macro/Cargo.toml b/futures-select-macro/Cargo.toml index 1341b88f18..2e2ab2fa94 100644 --- a/futures-select-macro/Cargo.toml +++ b/futures-select-macro/Cargo.toml @@ -22,4 +22,4 @@ std = [] proc-macro2 = "0.4" proc-macro-hack = "0.5.3" quote = "0.6" -syn = { version = "0.15.22", features = ["full"] } +syn = { version = "0.15.25", features = ["full"] }