Skip to content

Commit a148289

Browse files
authored
attributes: Globally qualify attribute paths (#3126)
Avoid ambiguities with any user-defined `tracing` modules by globally qualifying types used in the attribute-generated code e.g., `::tracing::Level`.
1 parent 5dc722a commit a148289

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

tracing-attributes/src/attr.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ impl ToTokens for Field {
365365
// `instrument` produce empty field values, so changing it now
366366
// is a breaking change. agh.
367367
let name = &self.name;
368-
tokens.extend(quote!(#name = tracing::field::Empty))
368+
tokens.extend(quote!(#name = ::tracing::field::Empty))
369369
} else {
370370
self.kind.to_tokens(tokens);
371371
self.name.to_tokens(tokens);
@@ -441,11 +441,11 @@ impl Parse for Level {
441441
impl ToTokens for Level {
442442
fn to_tokens(&self, tokens: &mut TokenStream) {
443443
match self {
444-
Level::Trace => tokens.extend(quote!(tracing::Level::TRACE)),
445-
Level::Debug => tokens.extend(quote!(tracing::Level::DEBUG)),
446-
Level::Info => tokens.extend(quote!(tracing::Level::INFO)),
447-
Level::Warn => tokens.extend(quote!(tracing::Level::WARN)),
448-
Level::Error => tokens.extend(quote!(tracing::Level::ERROR)),
444+
Level::Trace => tokens.extend(quote!(::tracing::Level::TRACE)),
445+
Level::Debug => tokens.extend(quote!(::tracing::Level::DEBUG)),
446+
Level::Info => tokens.extend(quote!(::tracing::Level::INFO)),
447+
Level::Warn => tokens.extend(quote!(::tracing::Level::WARN)),
448+
Level::Error => tokens.extend(quote!(::tracing::Level::ERROR)),
449449
Level::Path(ref pat) => tokens.extend(quote!(#pat)),
450450
}
451451
}

tracing-attributes/src/expand.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ fn gen_block<B: ToTokens>(
199199
})
200200
.map(|(user_name, (real_name, record_type))| match record_type {
201201
RecordType::Value => quote!(#user_name = #real_name),
202-
RecordType::Debug => quote!(#user_name = tracing::field::debug(&#real_name)),
202+
RecordType::Debug => quote!(#user_name = ::tracing::field::debug(&#real_name)),
203203
})
204204
.collect();
205205

@@ -223,7 +223,7 @@ fn gen_block<B: ToTokens>(
223223

224224
let custom_fields = &args.fields;
225225

226-
quote!(tracing::span!(
226+
quote!(::tracing::span!(
227227
target: #target,
228228
#(parent: #parent,)*
229229
#level,
@@ -241,10 +241,10 @@ fn gen_block<B: ToTokens>(
241241
let level_tokens = event_args.level(Level::Error);
242242
match event_args.mode {
243243
FormatMode::Default | FormatMode::Display => Some(quote!(
244-
tracing::event!(target: #target, #level_tokens, error = %e)
244+
::tracing::event!(target: #target, #level_tokens, error = %e)
245245
)),
246246
FormatMode::Debug => Some(quote!(
247-
tracing::event!(target: #target, #level_tokens, error = ?e)
247+
::tracing::event!(target: #target, #level_tokens, error = ?e)
248248
)),
249249
}
250250
}
@@ -256,10 +256,10 @@ fn gen_block<B: ToTokens>(
256256
let level_tokens = event_args.level(args_level);
257257
match event_args.mode {
258258
FormatMode::Display => Some(quote!(
259-
tracing::event!(target: #target, #level_tokens, return = %x)
259+
::tracing::event!(target: #target, #level_tokens, return = %x)
260260
)),
261261
FormatMode::Default | FormatMode::Debug => Some(quote!(
262-
tracing::event!(target: #target, #level_tokens, return = ?x)
262+
::tracing::event!(target: #target, #level_tokens, return = ?x)
263263
)),
264264
}
265265
}
@@ -320,7 +320,7 @@ fn gen_block<B: ToTokens>(
320320
let __tracing_instrument_future = #mk_fut;
321321
if !__tracing_attr_span.is_disabled() {
322322
#follows_from
323-
tracing::Instrument::instrument(
323+
::tracing::Instrument::instrument(
324324
__tracing_instrument_future,
325325
__tracing_attr_span
326326
)
@@ -344,7 +344,7 @@ fn gen_block<B: ToTokens>(
344344
// regression in case the level is enabled.
345345
let __tracing_attr_span;
346346
let __tracing_attr_guard;
347-
if tracing::level_enabled!(#level) || tracing::if_log_enabled!(#level, {true} else {false}) {
347+
if ::tracing::level_enabled!(#level) || ::tracing::if_log_enabled!(#level, {true} else {false}) {
348348
__tracing_attr_span = #span;
349349
#follows_from
350350
__tracing_attr_guard = __tracing_attr_span.enter();
@@ -724,7 +724,7 @@ impl<'block> AsyncInfo<'block> {
724724
let async_attrs = &async_expr.attrs;
725725
if pinned_box {
726726
quote! {
727-
Box::pin(#(#async_attrs) * async move { #instrumented_block })
727+
::std::boxed::Box::pin(#(#async_attrs) * async move { #instrumented_block })
728728
}
729729
} else {
730730
quote! {

tracing-attributes/tests/instrument.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,3 +310,21 @@ fn target_name_ident() {
310310

311311
handle.assert_finished();
312312
}
313+
314+
#[test]
315+
fn user_tracing_module() {
316+
use ::tracing::field::Empty;
317+
318+
// Reproduces https://github.com/tokio-rs/tracing/issues/3119
319+
#[instrument(fields(f = Empty))]
320+
fn my_fn() {
321+
assert_eq!("test", tracing::my_other_fn());
322+
}
323+
324+
mod tracing {
325+
#[allow(dead_code)]
326+
pub fn my_other_fn() -> &'static str {
327+
"test"
328+
}
329+
}
330+
}

0 commit comments

Comments
 (0)