Skip to content

Commit

Permalink
chore: fix new warnings in Rust 1.72.0 (#2700)
Browse files Browse the repository at this point in the history
This branch fixes a handful of new warnings which have shown up after
updating to Rust 1.72.0.

This includes:

* `clippy::redundant_closure_call` in macros --- allowed because the
  macro sometimes calls a function that isn't a closure, and the closure
  is just used in the case where it's not a function.
* Unnecessary uses of `#` in raw string literals that don't contain `"`
  characters.
* Dead code warnings with specific feature flag combinations in
  `tracing-subscriber`.

In addition, I've fixed a broken RustDoc link that was making the 
Netlify build sad.
  • Loading branch information
hawkw committed Aug 29, 2023
1 parent 81ab9d6 commit bf05c61
Show file tree
Hide file tree
Showing 11 changed files with 56 additions and 38 deletions.
1 change: 1 addition & 0 deletions netlify.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
[build.environment]
RUSTDOCFLAGS="""
-D warnings \
--force-warn rustdoc::redundant-explicit-links \
--force-warn renamed-and-removed-lints \
--cfg docsrs \
--html-before-content /opt/build/repo/assets/warning.html \
Expand Down
8 changes: 8 additions & 0 deletions tracing-core/src/field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,10 @@ macro_rules! impl_one_value {
impl $crate::sealed::Sealed for $value_ty {}
impl $crate::field::Value for $value_ty {
fn record(&self, key: &$crate::field::Field, visitor: &mut dyn $crate::field::Visit) {
// `op` is always a function; the closure is used because
// sometimes there isn't a real function corresponding to that
// operation. the clippy warning is not that useful here.
#[allow(clippy::redundant_closure_call)]
visitor.$record(key, $op(*self))
}
}
Expand All @@ -388,6 +392,10 @@ macro_rules! impl_one_value {
impl $crate::sealed::Sealed for ty_to_nonzero!($value_ty) {}
impl $crate::field::Value for ty_to_nonzero!($value_ty) {
fn record(&self, key: &$crate::field::Field, visitor: &mut dyn $crate::field::Visit) {
// `op` is always a function; the closure is used because
// sometimes there isn't a real function corresponding to that
// operation. the clippy warning is not that useful here.
#[allow(clippy::redundant_closure_call)]
visitor.$record(key, $op(self.get()))
}
}
Expand Down
3 changes: 1 addition & 2 deletions tracing-subscriber/src/field/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ pub trait VisitOutput<Out>: Visit {
/// Extension trait implemented by types which can be recorded by a [visitor].
///
/// This allows writing code that is generic over `tracing_core`'s
/// [`span::Attributes`][attr], [`span::Record`][rec], and [`Event`][event]
/// [`span::Attributes`][attr], [`span::Record`][rec], and [`Event`]
/// types. These types all provide inherent `record` methods that allow a
/// visitor to record their fields, but there is no common trait representing this.
///
Expand Down Expand Up @@ -85,7 +85,6 @@ pub trait VisitOutput<Out>: Visit {
/// [visitor]: tracing_core::field::Visit
/// [attr]: tracing_core::span::Attributes
/// [rec]: tracing_core::span::Record
/// [event]: tracing_core::event::Event
pub trait RecordFields: crate::sealed::Sealed<RecordFieldsMarker> {
/// Record all the fields in `self` with the provided `visitor`.
fn record(&self, visitor: &mut dyn Visit);
Expand Down
5 changes: 3 additions & 2 deletions tracing-subscriber/src/filter/directive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ enum ParseErrorKind {
// === impl DirectiveSet ===

impl<T> DirectiveSet<T> {
#[cfg(feature = "std")]
// this is only used by `env-filter`.
#[cfg(all(feature = "std", feature = "env-filter"))]
pub(crate) fn is_empty(&self) -> bool {
self.directives.is_empty()
}
Expand Down Expand Up @@ -388,7 +389,7 @@ impl FromStr for StaticDirective {
// === impl ParseError ===

impl ParseError {
#[cfg(feature = "std")]
#[cfg(all(feature = "std", feature = "env-filter"))]
pub(crate) fn new() -> Self {
ParseError {
kind: ParseErrorKind::Other(None),
Expand Down
23 changes: 15 additions & 8 deletions tracing-subscriber/src/filter/env/directive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,9 @@ impl Directive {
}

pub(super) fn parse(from: &str, regex: bool) -> Result<Self, ParseError> {
static DIRECTIVE_RE: Lazy<Regex> = Lazy::new(|| Regex::new(
r"(?x)
static DIRECTIVE_RE: Lazy<Regex> = Lazy::new(|| {
Regex::new(
r"(?x)
^(?P<global_level>(?i:trace|debug|info|warn|error|off|[0-5]))$ |
# ^^^.
# `note: we match log level names case-insensitively
Expand All @@ -135,15 +136,18 @@ impl Directive {
# `note: we match log level names case-insensitively
)?
$
"
)
.unwrap());
",
)
.unwrap()
});
static SPAN_PART_RE: Lazy<Regex> =
Lazy::new(|| Regex::new(r#"(?P<name>[^\]\{]+)?(?:\{(?P<fields>[^\}]*)\})?"#).unwrap());
Lazy::new(|| Regex::new(r"(?P<name>[^\]\{]+)?(?:\{(?P<fields>[^\}]*)\})?").unwrap());
static FIELD_FILTER_RE: Lazy<Regex> =
// TODO(eliza): this doesn't _currently_ handle value matchers that include comma
// characters. We should fix that.
Lazy::new(|| Regex::new(r#"(?x)
Lazy::new(|| {
Regex::new(
r"(?x)
(
# field name
[[:word:]][[[:word:]]\.]*
Expand All @@ -152,7 +156,10 @@ impl Directive {
)
# trailing comma or EOS
(?:,\s?|$)
"#).unwrap());
",
)
.unwrap()
});

let caps = DIRECTIVE_RE.captures(from).ok_or_else(ParseError::new)?;

Expand Down
12 changes: 8 additions & 4 deletions tracing-subscriber/src/fmt/format/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,8 @@ pub struct FieldFnVisitor<'a, F> {
/// The compact format includes fields from all currently entered spans, after
/// the event's fields. Span fields are ordered (but not grouped) grouped by
/// span, and span names are not shown.A more compact representation of the
/// event's [`Level`](tracing::Level) is used, and additional information, such
/// as the event's target, is disabled by default (but can be enabled
/// explicitly).
/// event's [`Level`] is used, and additional information, such as the event's
/// target, is disabled by default (but can be enabled explicitly).
///
/// # Example Output
///
Expand Down Expand Up @@ -1067,7 +1066,12 @@ where

let dimmed = writer.dimmed();
if self.display_target {
write!(writer, "{}{}", dimmed.paint(meta.target()), dimmed.paint(":"))?;
write!(
writer,
"{}{}",
dimmed.paint(meta.target()),
dimmed.paint(":")
)?;
}

if self.display_filename {
Expand Down
14 changes: 9 additions & 5 deletions tracing-subscriber/src/fmt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,7 @@ where

/// Sets the collector being built to use a less verbose formatter.
///
/// See [`format::Compact`].
/// See [`format::Compact`] for details.
pub fn compact(self) -> CollectorBuilder<N, format::Format<format::Compact, T>, F, W>
where
N: for<'writer> FormatFields<'writer> + 'static,
Expand All @@ -758,7 +758,7 @@ where

/// Sets the collector being built to use a JSON formatter.
///
/// See [`format::Json`](super::fmt::format::Json)
/// See [`format::Json`] for details.
#[cfg(feature = "json")]
#[cfg_attr(docsrs, doc(cfg(feature = "json")))]
pub fn json(self) -> CollectorBuilder<format::JsonFields, format::Format<format::Json, T>, F, W>
Expand All @@ -777,7 +777,7 @@ where
impl<T, F, W> CollectorBuilder<format::JsonFields, format::Format<format::Json, T>, F, W> {
/// Sets the json collector being built to flatten event metadata.
///
/// See [`format::Json`](super::fmt::format::Json)
/// See [`format::Json`] for details.
pub fn flatten_event(
self,
flatten_event: bool,
Expand All @@ -791,7 +791,7 @@ impl<T, F, W> CollectorBuilder<format::JsonFields, format::Format<format::Json,
/// Sets whether or not the JSON subscriber being built will include the current span
/// in formatted events.
///
/// See [`format::Json`](super::fmt::format::Json)
/// See [`format::Json`] for details.
pub fn with_current_span(
self,
display_current_span: bool,
Expand All @@ -805,7 +805,7 @@ impl<T, F, W> CollectorBuilder<format::JsonFields, format::Format<format::Json,
/// Sets whether or not the JSON subscriber being built will include a list (from
/// root to leaf) of all currently entered spans in formatted events.
///
/// See [`format::Json`](super::fmt::format::Json)
/// See [`format::Json`] for details.
pub fn with_span_list(
self,
display_span_list: bool,
Expand Down Expand Up @@ -1287,6 +1287,10 @@ mod test {
Self { buf }
}

// this is currently only used by the JSON formatter tests. if we need
// it elsewhere in the future, feel free to remove the `#[cfg]`
// attribute!
#[cfg(feature = "json")]
pub(crate) fn buf(&self) -> MutexGuard<'_, Vec<u8>> {
self.buf.lock().unwrap()
}
Expand Down
11 changes: 4 additions & 7 deletions tracing-subscriber/src/fmt/writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use tracing_core::Metadata;
/// This trait is already implemented for function pointers and
/// immutably-borrowing closures that return an instance of [`io::Write`], such
/// as [`io::stdout`] and [`io::stderr`]. Additionally, it is implemented for
/// [`std::sync::Mutex`][mutex] when the type inside the mutex implements
/// [`std::sync::Mutex`] when the type inside the mutex implements
/// [`io::Write`].
///
/// The [`MakeWriter::make_writer_for`] method takes [`Metadata`] describing a
Expand Down Expand Up @@ -79,7 +79,7 @@ use tracing_core::Metadata;
/// ```
///
/// A single instance of a type implementing [`io::Write`] may be used as a
/// `MakeWriter` by wrapping it in a [`Mutex`][mutex]. For example, we could
/// `MakeWriter` by wrapping it in a [`Mutex`]. For example, we could
/// write to a file like so:
///
/// ```
Expand All @@ -101,7 +101,6 @@ use tracing_core::Metadata;
/// [`Event`]: tracing_core::event::Event
/// [`io::stdout`]: std::io::stdout()
/// [`io::stderr`]: std::io::stderr()
/// [mutex]: std::sync::Mutex
/// [`MakeWriter::make_writer_for`]: MakeWriter::make_writer_for
/// [`Metadata`]: tracing_core::Metadata
/// [levels]: tracing_core::Level
Expand Down Expand Up @@ -339,7 +338,7 @@ pub trait MakeWriterExt<'a>: MakeWriter<'a> {

/// Wraps `self` with a predicate that takes a span or event's [`Metadata`]
/// and returns a `bool`. The returned [`MakeWriter`]'s
/// [`MakeWriter::make_writer_for`][mwf] method will check the predicate to
/// [`MakeWriter::make_writer_for`] method will check the predicate to
/// determine if a writer should be produced for a given span or event.
///
/// If the predicate returns `false`, the wrapped [`MakeWriter`]'s
Expand Down Expand Up @@ -486,7 +485,6 @@ pub trait MakeWriterExt<'a>: MakeWriter<'a> {
/// requires the `Writer` type to implement [`io::Write`], it's necessary to add
/// a newtype that forwards the trait implementation.
///
/// [`io::Write`]: https://doc.rust-lang.org/std/io/trait.Write.html
/// [`MutexGuard`]: https://doc.rust-lang.org/std/sync/struct.MutexGuard.html
/// [`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.html
/// [`MakeWriter`]: trait.MakeWriter.html
Expand Down Expand Up @@ -540,13 +538,12 @@ pub struct TestWriter {
/// ```
///
/// [`Collect`]: tracing::Collect
/// [`io::Write`]: std::io::Write
pub struct BoxMakeWriter {
inner: Box<dyn for<'a> MakeWriter<'a, Writer = Box<dyn Write + 'a>> + Send + Sync>,
name: &'static str,
}

/// A [writer] that is one of two types implementing [`io::Write`][writer].
/// A [writer] that is one of two types implementing [`io::Write`].
///
/// This may be used by [`MakeWriter`] implementations that may conditionally
/// return one of two writers.
Expand Down
6 changes: 2 additions & 4 deletions tracing-subscriber/src/registry/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,9 @@ pub trait SpanData<'a> {

/// A reference to [span data] and the associated [registry].
///
/// This type implements all the same methods as [`SpanData`][span data], and
/// provides additional methods for querying the registry based on values from
/// the span.
/// This type implements all the same methods as [`SpanData`], and provides
/// additional methods for querying the registry based on values from the span.
///
/// [span data]: SpanData
/// [registry]: LookupSpan
#[derive(Debug)]
pub struct SpanRef<'a, R: LookupSpan<'a>> {
Expand Down
9 changes: 4 additions & 5 deletions tracing-subscriber/src/subscribe/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1388,11 +1388,10 @@ pub trait Filter<S> {
/// multiple invocations of this method. However, note that changes in the
/// maximum level will **only** be reflected after the callsite [`Interest`]
/// cache is rebuilt, by calling the
/// [`tracing_core::callsite::rebuild_interest_cache`][rebuild] function.
/// [`tracing_core::callsite::rebuild_interest_cache`] function.
/// Therefore, if the `Filter will change the value returned by this
/// method, it is responsible for ensuring that
/// [`rebuild_interest_cache`][rebuild] is called after the value of the max
/// level changes.
/// method, it is responsible for ensuring that [`rebuild_interest_cache`]
/// is called after the value of the max level changes.
///
/// ## Default Implementation
///
Expand All @@ -1402,7 +1401,7 @@ pub trait Filter<S> {
/// [level]: tracing_core::metadata::Level
/// [`LevelFilter`]: crate::filter::LevelFilter
/// [`Interest`]: tracing_core::collect::Interest
/// [rebuild]: tracing_core::callsite::rebuild_interest_cache
/// [`rebuild_interest_cache`]: tracing_core::callsite::rebuild_interest_cache
fn max_level_hint(&self) -> Option<LevelFilter> {
None
}
Expand Down
2 changes: 1 addition & 1 deletion tracing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -902,7 +902,7 @@
//! [event]: Event
//! [events]: Event
//! [`collect`]: collect::Collect
//! [Collect::event]: collect::Collect::event
//! [Collect::event]: fn@collect::Collect::event
//! [`enter`]: collect::Collect::enter
//! [`exit`]: collect::Collect::exit
//! [`enabled`]: collect::Collect::enabled
Expand Down

0 comments on commit bf05c61

Please sign in to comment.