summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2019-11-22 15:55:10 -0800
committerGitHub <noreply@github.com>2019-11-22 15:55:10 -0800
commit7b4c999341809588a427a9a80d310ee4aa1c1a21 (patch)
tree13e7638b2ec0ad90fbdbaf4f7100d8a2f8841703
parente1b1e216c506a01a1f4ca579adae02f85b8db82b (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
-rw-r--r--README.md10
-rw-r--r--ci/azure-test-stable.yml16
-rw-r--r--examples/Cargo.toml4
-rw-r--r--tests-integration/Cargo.toml3
-rw-r--r--tests-integration/src/lib.rs4
-rw-r--r--tokio-macros/Cargo.toml2
-rw-r--r--tokio-test/Cargo.toml3
-rw-r--r--tokio-tls/Cargo.toml2
-rw-r--r--tokio-util/Cargo.toml13
-rw-r--r--tokio-util/src/cfg.rs19
-rw-r--r--tokio-util/src/lib.rs13
-rw-r--r--tokio-util/src/udp/frame.rs1
-rw-r--r--tokio/Cargo.toml7
-rw-r--r--tokio/README.md9
-rw-r--r--tokio/src/lib.rs7
-rw-r--r--tokio/src/sync/mod.rs8
-rw-r--r--tokio/tests/_require_full.rs2
-rw-r--r--tokio/tests/buffered.rs1
-rw-r--r--tokio/tests/fs_dir.rs1
-rw-r--r--tokio/tests/fs_file.rs1
-rw-r--r--tokio/tests/fs_file_mocked.rs1
-rw-r--r--tokio/tests/fs_link.rs1
-rw-r--r--tokio/tests/io_async_read.rs3
-rw-r--r--tokio/tests/io_chain.rs1
-rw-r--r--tokio/tests/io_copy.rs1
-rw-r--r--tokio/tests/io_driver.rs1
-rw-r--r--tokio/tests/io_driver_drop.rs1
-rw-r--r--tokio/tests/io_lines.rs1
-rw-r--r--tokio/tests/io_read.rs1
-rw-r--r--tokio/tests/io_read_exact.rs1
-rw-r--r--tokio/tests/io_read_line.rs1
-rw-r--r--tokio/tests/io_read_to_end.rs1
-rw-r--r--tokio/tests/io_read_to_string.rs1
-rw-r--r--tokio/tests/io_read_until.rs1
-rw-r--r--tokio/tests/io_split.rs3
-rw-r--r--tokio/tests/io_take.rs1
-rw-r--r--tokio/tests/io_write.rs1
-rw-r--r--tokio/tests/io_write_all.rs1
-rw-r--r--tokio/tests/net_bind_resource.rs3
-rw-r--r--tokio/tests/process_issue_42.rs4
-rw-r--r--tokio/tests/process_smoke.rs2
-rw-r--r--tokio/tests/rt_basic.rs1
-rw-r--r--tokio/tests/rt_common.rs5
-rw-r--r--tokio/tests/rt_threaded.rs1
-rw-r--r--tokio/tests/signal_ctrl_c.rs3
-rw-r--r--tokio/tests/signal_drop_recv.rs3
-rw-r--r--tokio/tests/signal_drop_rt.rs3
-rw-r--r--tokio/tests/signal_drop_signal.rs3
-rw-r--r--tokio/tests/signal_multi_rt.rs3
-rw-r--r--tokio/tests/signal_no_rt.rs3
-rw-r--r--tokio/tests/signal_notify_both.rs3
-rw-r--r--tokio/tests/signal_twice.rs3
-rw-r--r--tokio/tests/signal_usr1.rs3
-rw-r--r--tokio/tests/sync_barrier.rs1
-rw-r--r--tokio/tests/sync_errors.rs1
-rw-r--r--tokio/tests/sync_mpsc.rs1
-rw-r--r--tokio/tests/sync_mutex.rs1
-rw-r--r--tokio/tests/sync_oneshot.rs1
-rw-r--r--tokio/tests/sync_watch.rs1
-rw-r--r--tokio/tests/tcp_accept.rs1
-rw-r--r--tokio/tests/tcp_connect.rs1
-rw-r--r--tokio/tests/tcp_echo.rs1
-rw-r--r--tokio/tests/tcp_peek.rs1
-rw-r--r--tokio/tests/tcp_shutdown.rs1
-rw-r--r--tokio/tests/time_interval.rs1
-rw-r--r--tokio/tests/time_rt.rs1
-rw-r--r--tokio/tests/time_timeout.rs1
-rw-r--r--tokio/tests/udp.rs1
-rw-r--r--tokio/tests/uds_cred.rs5
-rw-r--r--tokio/tests/uds_datagram.rs30
-rw-r--r--tokio/tests/uds_split.rs3
-rw-r--r--tokio/tests/uds_stream.rs3
72 files changed, 165 insertions, 82 deletions
diff --git a/README.md b/README.md
index c2aa98af..75e6f264 100644
--- a/README.md
+++ b/README.md
@@ -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