diff options
author | Carl Lerche <me@carllerche.com> | 2019-11-22 15:55:10 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-22 15:55:10 -0800 |
commit | 7b4c999341809588a427a9a80d310ee4aa1c1a21 (patch) | |
tree | 13e7638b2ec0ad90fbdbaf4f7100d8a2f8841703 | |
parent | e1b1e216c506a01a1f4ca579adae02f85b8db82b (diff) |
default all feature flags to off (#1811)
Changes the set of `default` feature flags to `[]`. By default, only
core traits are included without specifying feature flags. This makes it
easier for users to pick the components they need.
For convenience, a `full` feature flag is included that includes all
components.
Tests are configured to require the `full` feature. Testing individual
feature flags will need to be moved to a separate crate.
Closes #1791
72 files changed, 165 insertions, 82 deletions
@@ -54,15 +54,13 @@ an asynchronous application. A basic TCP echo server with Tokio: -```rust +```rust,no_run use tokio::net::TcpListener; use tokio::prelude::*; -use std::net::SocketAddr; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { - let addr = "127.0.0.1:8080".parse::<SocketAddr>()?; - let mut listener = TcpListener::bind(&addr).await?; + let mut listener = TcpListener::bind("127.0.0.1:8080").await?; loop { let (mut socket, _) = listener.accept().await?; @@ -77,14 +75,14 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { Ok(n) if n == 0 => return, Ok(n) => n, Err(e) => { - println!("failed to read from socket; err = {:?}", e); + eprintln!("failed to read from socket; err = {:?}", e); return; } }; // Write the data back if let Err(e) = socket.write_all(&buf[0..n]).await { - println!("failed to write to socket; err = {:?}", e); + eprintln!("failed to write to socket; err = {:?}", e); return; } } diff --git a/ci/azure-test-stable.yml b/ci/azure-test-stable.yml index 5d806a6a..3e5a181b 100644 --- a/ci/azure-test-stable.yml +++ b/ci/azure-test-stable.yml @@ -22,14 +22,6 @@ jobs: - template: azure-is-release.yml - ${{ each crate in parameters.crates }}: - # Run with default crate features - - script: cargo test - env: - LOOM_MAX_PREEMPTIONS: 2 - CI: 'True' - displayName: ${{ crate }} - cargo test - workingDirectory: $(Build.SourcesDirectory)/${{ crate }} - # Run with all crate features - script: cargo test --all-features env: @@ -41,14 +33,6 @@ jobs: - template: azure-patch-crates.yml - ${{ each crate in parameters.crates }}: - # Run with default crate features - - script: cargo test - env: - LOOM_MAX_PREEMPTIONS: 2 - CI: 'True' - displayName: ${{ crate }} - cargo test - workingDirectory: $(Build.SourcesDirectory)/${{ crate }} - # Run with all crate features - script: cargo test --all-features env: diff --git a/examples/Cargo.toml b/examples/Cargo.toml index ed273590..21b42ff7 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -5,8 +5,8 @@ publish = false edition = "2018" [dev-dependencies] -tokio = { version = "=0.2.0-alpha.6", path = "../tokio" } -tokio-util = { version = "=0.2.0-alpha.6", path = "../tokio-util" } +tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["full"] } +tokio-util = { version = "=0.2.0-alpha.6", path = "../tokio-util", features = ["full"] } bytes = { git = "https://github.com/tokio-rs/bytes" } futures = "0.3.0" diff --git a/tests-integration/Cargo.toml b/tests-integration/Cargo.toml index 2a6af097..265d7d6d 100644 --- a/tests-integration/Cargo.toml +++ b/tests-integration/Cargo.toml @@ -6,9 +6,10 @@ edition = "2018" publish = false [dependencies] +tokio = { path = "../tokio", features = ["full"] } +doc-comment = "0.3.1" [dev-dependencies] -tokio = { path = "../tokio" } tokio-test = { path = "../tokio-test" } futures = { version = "0.3.0", features = ["async-await"] } diff --git a/tests-integration/src/lib.rs b/tests-integration/src/lib.rs new file mode 100644 index 00000000..74795f29 --- /dev/null +++ b/tests-integration/src/lib.rs @@ -0,0 +1,4 @@ +use doc_comment::doc_comment; + +// #[doc = include_str!("../../README.md")] +doc_comment!(include_str!("../../README.md")); diff --git a/tokio-macros/Cargo.toml b/tokio-macros/Cargo.toml index 4bf87927..7e8d9513 100644 --- a/tokio-macros/Cargo.toml +++ b/tokio-macros/Cargo.toml @@ -29,7 +29,7 @@ quote = "1" syn = { version = "1.0.3", features = ["full"] } [dev-dependencies] -tokio = { version = "=0.2.0-alpha.6", path = "../tokio" } +tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["full"] } [package.metadata.docs.rs] all-features = true diff --git a/tokio-test/Cargo.toml b/tokio-test/Cargo.toml index b1ac4de1..cd0f4044 100644 --- a/tokio-test/Cargo.toml +++ b/tokio-test/Cargo.toml @@ -20,12 +20,13 @@ Testing utilities for Tokio- and futures-based code categories = ["asynchronous", "testing"] [dependencies] -tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["test-util"] } +tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["rt-core", "sync", "time", "test-util"] } bytes = { git = "https://github.com/tokio-rs/bytes" } futures-core = "0.3.0" [dev-dependencies] +tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["full"] } futures-util = "0.3.0" [package.metadata.docs.rs] diff --git a/tokio-tls/Cargo.toml b/tokio-tls/Cargo.toml index 022f6eda..fee03cc6 100644 --- a/tokio-tls/Cargo.toml +++ b/tokio-tls/Cargo.toml @@ -29,6 +29,8 @@ native-tls = "0.2" tokio = { version = "=0.2.0-alpha.6", path = "../tokio" } [dev-dependencies] +tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["macros", "stream", "rt-core", "io-util", "net"] } + cfg-if = "0.1" env_logger = { version = "0.6", default-features = false } futures = { version = "0.3.0", features = ["async-await"] } diff --git a/tokio-util/Cargo.toml b/tokio-util/Cargo.toml index 8e5542be..356712c6 100644 --- a/tokio-util/Cargo.toml +++ b/tokio-util/Cargo.toml @@ -19,6 +19,16 @@ Additional utilities for working with Tokio. """ categories = ["asynchronous"] +[features] +# No features on by default +default = [] + +# Shorthand for enabling everything +full = ["codec", "udp"] + +codec = [] +udp = ["tokio/udp"] + [dependencies] tokio = { version = "=0.2.0-alpha.6", path = "../tokio" } @@ -29,10 +39,11 @@ log = "0.4" pin-project-lite = "0.1.1" [dev-dependencies] -tokio = { version = "=0.2.0-alpha.6", path = "../tokio" } +tokio = { version = "=0.2.0-alpha.6", path = "../tokio", features = ["full"] } tokio-test = { version = "=0.2.0-alpha.6", path = "../tokio-test" } futures = "0.3.0" [package.metadata.docs.rs] all-features = true +rustdoc-args = ["--cfg", "docsrs"] diff --git a/tokio-util/src/cfg.rs b/tokio-util/src/cfg.rs new file mode 100644 index 00000000..13fabd36 --- /dev/null +++ b/tokio-util/src/cfg.rs @@ -0,0 +1,19 @@ +macro_rules! cfg_codec { + ($($item:item)*) => { + $( + #[cfg(feature = "codec")] + #[cfg_attr(docsrs, doc(cfg(feature = "codec")))] + $item + )* + } +} + +macro_rules! cfg_udp { + ($($item:item)*) => { + $( + #[cfg(all(feature = "udp", feature = "codec"))] + #[cfg_attr(docsrs, doc(cfg(all(feature = "udp", feature = "codec"))))] + $item + )* + } +} diff --git a/tokio-util/src/lib.rs b/tokio-util/src/lib.rs index 5a64673c..d4ed5a7b 100644 --- a/tokio-util/src/lib.rs +++ b/tokio-util/src/lib.rs @@ -10,8 +10,17 @@ no_crate_inject, attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables)) ))] +#![cfg_attr(docsrs, feature(doc_cfg))] //! Utilities for working with Tokio. -pub mod codec; -pub mod udp; +#[macro_use] +mod cfg; + +cfg_codec! { + pub mod codec; +} + +cfg_udp! { + pub mod udp; +} diff --git a/tokio-util/src/udp/frame.rs b/tokio-util/src/udp/frame.rs index d37b20cd..a6c6f220 100644 --- a/tokio-util/src/udp/frame.rs +++ b/tokio-util/src/udp/frame.rs @@ -27,6 +27,7 @@ use std::task::{Context, Poll}; /// calling `split` on the `UdpFramed` returned by this method, which will break /// them into separate objects, allowing them to interact more easily. #[must_use = "sinks do nothing unless polled"] +#[cfg_attr(docsrs, doc(feature = "codec-udp"))] #[derive(Debug)] pub struct UdpFramed<C> { socket: UdpSocket, diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 320e5b38..4f0161ae 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -24,7 +24,8 @@ categories = ["asynchronous", "network-programming"] keywords = ["io", "async", "non-blocking", "futures"] [features] -default = ["full"] +# Include nothing by default +default = [] # enable everything full = [ @@ -48,7 +49,7 @@ full = [ blocking = ["rt-core"] dns = ["rt-core"] fs = ["rt-core"] -io-driver = ["rt-core", "mio", "lazy_static"] +io-driver = ["mio", "lazy_static"] io-util = ["memchr"] # stdin, stdout, stderr io-std = ["rt-core"] @@ -83,7 +84,7 @@ stream = ["futures-core"] sync = ["fnv"] test-util = [] tcp = ["io-driver"] -time = ["rt-core", "slab"] +time = ["slab"] udp = ["io-driver"] uds = ["io-driver", "mio-uds", "libc"] diff --git a/tokio/README.md b/tokio/README.md index 087ab025..530f0bac 100644 --- a/tokio/README.md +++ b/tokio/README.md @@ -52,6 +52,15 @@ an asynchronous application. ## Example +To get started, add the following to `Cargo.toml`. + +```toml +tokio = { version = "0.2.0", features = ["full"] } +``` + +Tokio requires components to be explicitly enabled using feature flags. As a +shorthand, the `full` feature enables all components. + A basic TCP echo server with Tokio: ```rust diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index c213ee89..cd7a62ea 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -52,6 +52,13 @@ //! control what features are present, so that unused code can be eliminated. //! This documentation also lists what feature flags are necessary to enable each API. //! +//! The easiest way to get started is to enable all features. Do this by +//! enabling the `full` feature flag: +//! +//! ```toml +//! tokio = { version = "0.2", features = ["full"] } +//! ``` +//! //! [features]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section //! //! ## Working With Tasks diff --git a/tokio/src/sync/mod.rs b/tokio/src/sync/mod.rs index 2954eb85..0db703bb 100644 --- a/tokio/src/sync/mod.rs +++ b/tokio/src/sync/mod.rs @@ -40,9 +40,11 @@ cfg_not_sync! { pub(crate) use task::AtomicWaker; } - cfg_rt_core! { - pub(crate) mod oneshot; - } + #[cfg(any( + feature = "rt-core", + feature = "process", + feature = "signal"))] + pub(crate) mod oneshot; cfg_signal! { pub(crate) mod mpsc; diff --git a/tokio/tests/_require_full.rs b/tokio/tests/_require_full.rs new file mode 100644 index 00000000..98455bed --- /dev/null +++ b/tokio/tests/_require_full.rs @@ -0,0 +1,2 @@ +#![cfg(not(feature = "full"))] +compile_error!("run main Tokio tests with `--features full`"); diff --git a/tokio/tests/buffered.rs b/tokio/tests/buffered.rs index 5d77f866..7ce3d01c 100644 --- a/tokio/tests/buffered.rs +++ b/tokio/tests/buffered.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::net::TcpListener; use tokio::prelude::*; diff --git a/tokio/tests/fs_dir.rs b/tokio/tests/fs_dir.rs index 40e20bdb..c8b32fc6 100644 --- a/tokio/tests/fs_dir.rs +++ b/tokio/tests/fs_dir.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::fs; use tokio_test::assert_ok; diff --git a/tokio/tests/fs_file.rs b/tokio/tests/fs_file.rs index 555a1e64..3a56276e 100644 --- a/tokio/tests/fs_file.rs +++ b/tokio/tests/fs_file.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::fs::File; use tokio::prelude::*; diff --git a/tokio/tests/fs_file_mocked.rs b/tokio/tests/fs_file_mocked.rs index 12463cfc..0c572240 100644 --- a/tokio/tests/fs_file_mocked.rs +++ b/tokio/tests/fs_file_mocked.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] macro_rules! ready { ($e:expr $(,)?) => { diff --git a/tokio/tests/fs_link.rs b/tokio/tests/fs_link.rs index faf6e75e..cbbe27ef 100644 --- a/tokio/tests/fs_link.rs +++ b/tokio/tests/fs_link.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::fs; diff --git a/tokio/tests/io_async_read.rs b/tokio/tests/io_async_read.rs index 0b9509e1..2be2aa1a 100644 --- a/tokio/tests/io_async_read.rs +++ b/tokio/tests/io_async_read.rs @@ -1,3 +1,6 @@ +#![warn(rust_2018_idioms)] +#![cfg(feature = "full")] + use tokio::io::AsyncRead; use tokio_test::task; use tokio_test::{assert_ready_err, assert_ready_ok}; diff --git a/tokio/tests/io_chain.rs b/tokio/tests/io_chain.rs index d7cb47ca..e2d59411 100644 --- a/tokio/tests/io_chain.rs +++ b/tokio/tests/io_chain.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::AsyncReadExt; use tokio_test::assert_ok; diff --git a/tokio/tests/io_copy.rs b/tokio/tests/io_copy.rs index a9df7430..75d77435 100644 --- a/tokio/tests/io_copy.rs +++ b/tokio/tests/io_copy.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::{AsyncRead, AsyncReadExt}; use tokio_test::assert_ok; diff --git a/tokio/tests/io_driver.rs b/tokio/tests/io_driver.rs index ec51373f..b85abd8c 100644 --- a/tokio/tests/io_driver.rs +++ b/tokio/tests/io_driver.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::net::TcpListener; use tokio::runtime; diff --git a/tokio/tests/io_driver_drop.rs b/tokio/tests/io_driver_drop.rs index 6b923dd3..0a5ce625 100644 --- a/tokio/tests/io_driver_drop.rs +++ b/tokio/tests/io_driver_drop.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::net::TcpListener; use tokio::runtime; diff --git a/tokio/tests/io_lines.rs b/tokio/tests/io_lines.rs index 83240d62..3775cae0 100644 --- a/tokio/tests/io_lines.rs +++ b/tokio/tests/io_lines.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::AsyncBufReadExt; use tokio_test::assert_ok; diff --git a/tokio/tests/io_read.rs b/tokio/tests/io_read.rs index 01cd2fd6..d18615e4 100644 --- a/tokio/tests/io_read.rs +++ b/tokio/tests/io_read.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::{AsyncRead, AsyncReadExt}; use tokio_test::assert_ok; diff --git a/tokio/tests/io_read_exact.rs b/tokio/tests/io_read_exact.rs index 8b2f20ec..d0e659bd 100644 --- a/tokio/tests/io_read_exact.rs +++ b/tokio/tests/io_read_exact.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::AsyncReadExt; use tokio_test::assert_ok; diff --git a/tokio/tests/io_read_line.rs b/tokio/tests/io_read_line.rs index 684eb14a..57ae37ce 100644 --- a/tokio/tests/io_read_line.rs +++ b/tokio/tests/io_read_line.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::AsyncBufReadExt; use tokio_test::assert_ok; diff --git a/tokio/tests/io_read_to_end.rs b/tokio/tests/io_read_to_end.rs index 89782aa3..ee636ba5 100644 --- a/tokio/tests/io_read_to_end.rs +++ b/tokio/tests/io_read_to_end.rs @@ -1,4 +1,5 @@ #![warn(rust_2018_idioms)] +#![cfg(feature = "full")] use tokio::io::AsyncReadExt; use tokio_test::assert_ok; diff --git a/tokio/tests/io_read_to_string.rs b/tokio/tests/io_read_to_string.rs index 270d1e48..6b384b89 100644 --- a/tokio/tests/io_read_to_string.rs |