subscriber: mark builders as must_use (#2239)

## Motivation

Builders not marked `#[must_use]` can not be initialized sometimes,
causing silent failures.
Eg.
```rust
fn main() {
    tracing_subscriber::fmt();
    tracing::info!("hello");
}
```
won't print anything.

## Solution

Added `#[must_use]` to builder types in the tracing-subscriber crate.
This commit is contained in:
Kartavya Vashishtha 2022-07-22 00:08:11 +05:30 committed by Eliza Weisman
parent 522437d51c
commit 1b89aa950a
2 changed files with 10 additions and 4 deletions

View File

@ -11,6 +11,7 @@ use tracing::level_filters::STATIC_MAX_LEVEL;
/// ///
/// [builder]: https://rust-unofficial.github.io/patterns/patterns/creational/builder.html /// [builder]: https://rust-unofficial.github.io/patterns/patterns/creational/builder.html
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
#[must_use]
pub struct Builder { pub struct Builder {
regex: bool, regex: bool,
env: Option<String>, env: Option<String>,

View File

@ -243,6 +243,7 @@ pub type Formatter<
/// Configures and constructs `Subscriber`s. /// Configures and constructs `Subscriber`s.
#[cfg_attr(docsrs, doc(cfg(all(feature = "fmt", feature = "std"))))] #[cfg_attr(docsrs, doc(cfg(all(feature = "fmt", feature = "std"))))]
#[derive(Debug)] #[derive(Debug)]
#[must_use]
pub struct SubscriberBuilder< pub struct SubscriberBuilder<
N = format::DefaultFields, N = format::DefaultFields,
E = format::Format<format::Full>, E = format::Format<format::Full>,
@ -465,7 +466,8 @@ impl Default for SubscriberBuilder {
SubscriberBuilder { SubscriberBuilder {
filter: Subscriber::DEFAULT_MAX_LEVEL, filter: Subscriber::DEFAULT_MAX_LEVEL,
inner: Default::default(), inner: Default::default(),
}.log_internal_errors(true) }
.log_internal_errors(true)
} }
} }
@ -626,12 +628,15 @@ where
/// By default, `fmt::Layer` will write any `FormatEvent`-internal errors to /// By default, `fmt::Layer` will write any `FormatEvent`-internal errors to
/// the writer. These errors are unlikely and will only occur if there is a /// the writer. These errors are unlikely and will only occur if there is a
/// bug in the `FormatEvent` implementation or its dependencies. /// bug in the `FormatEvent` implementation or its dependencies.
/// ///
/// If writing to the writer fails, the error message is printed to stderr /// If writing to the writer fails, the error message is printed to stderr
/// as a fallback. /// as a fallback.
/// ///
/// [`FormatEvent`]: crate::fmt::FormatEvent /// [`FormatEvent`]: crate::fmt::FormatEvent
pub fn log_internal_errors(self, log_internal_errors: bool) -> SubscriberBuilder<N, format::Format<L, T>, F, W> { pub fn log_internal_errors(
self,
log_internal_errors: bool,
) -> SubscriberBuilder<N, format::Format<L, T>, F, W> {
SubscriberBuilder { SubscriberBuilder {
inner: self.inner.log_internal_errors(log_internal_errors), inner: self.inner.log_internal_errors(log_internal_errors),
..self ..self