Skip to content

Commit

Permalink
Once to not violate feature additivity principle
Browse files Browse the repository at this point in the history
When the following dependencies and their features were specified:

```toml
tracing-core = { version = "0.1", default-features = false, features = ["std"] }
tracing = { version = "0.1", default-features = false }
```

The build would fail with the following error:

The build will fail with the following failure:

```
error[E0412]: cannot find type `Once` in crate `tracing_core`
   --> tracing/src/lib.rs:840:35
    |
840 |     pub type Once = tracing_core::Once<()>;
    |                                   ^^^^ not found in `tracing_core`
    |
```

This happened because `tracing-core` exports `Once` only if its `std`
feature is disabled. And the depending `tracing` crate assumed that if
its `std` feature was disabled, so would be the `std` feature in
`tracing-core`.

This is a violation of the [undocumented "features must be additive"
guideline][ag]. In this commit tracing-core is adjusted to export `Once`
regardless of whether `std` is disabled or not.

[ag]: rust-lang/cargo#4328
  • Loading branch information
nagisa committed Jun 21, 2020
1 parent 971a46b commit 36175a5
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 9 deletions.
2 changes: 1 addition & 1 deletion tracing-core/src/lazy_static/core_lazy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.

use crate::Once;
use crate::spin::Once;

pub(crate) struct Lazy<T: Sync>(Once<T>);

Expand Down
5 changes: 4 additions & 1 deletion tracing-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,10 @@ pub(crate) mod spin;

#[cfg(not(feature = "std"))]
#[doc(hidden)]
pub use self::spin::Once;
pub type Once = self::spin::Once<()>;

#[cfg(feature = "std")]
pub use stdlib::sync::Once;

pub mod callsite;
pub mod dispatcher;
Expand Down
2 changes: 1 addition & 1 deletion tracing-core/src/spin/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Synchronization primitives based on spinning

pub(crate) use mutex::*;
pub use once::Once;
pub(crate) use once::Once;

mod mutex;
mod once;
7 changes: 1 addition & 6 deletions tracing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -832,12 +832,7 @@ pub mod subscriber;
#[doc(hidden)]
pub mod __macro_support {
pub use crate::stdlib::sync::atomic::{AtomicUsize, Ordering};

#[cfg(feature = "std")]
pub use crate::stdlib::sync::Once;

#[cfg(not(feature = "std"))]
pub type Once = tracing_core::Once<()>;
pub type Once = tracing_core::Once;
}

mod sealed {
Expand Down

0 comments on commit 36175a5

Please sign in to comment.