Skip to content

Commit

Permalink
tracing: fix name clash inside of tracing macros (#806)
Browse files Browse the repository at this point in the history
## Motivation

This commit fixes name clashes that occurred inside of tracing macros when
values with the names `display`, `Value` and `debug` have been used. 

This allows library users to trace variables that have the same name as imported
types inside the `tracing::field` module. 

## Solution
 
Use fully qualified type names for types used inside the `tracing::field`
module. 

Fixes #805.
  • Loading branch information
Sven authored Jul 12, 2020
1 parent 13344fb commit e3b3a3a
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions tracing/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1883,92 +1883,91 @@ macro_rules! valueset {
// };
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = ?$val:expr, $($rest:tt)*) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::debug(&$val) as &$crate::field::Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = %$val:expr, $($rest:tt)*) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&display(&$val) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::display(&$val) as &$crate::field::Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = $val:expr, $($rest:tt)*) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&$val as &Value)) },
@ { $($out),*, (&$next, Some(&$val as &$crate::field::Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+, $($rest:tt)*) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&$($k).+ as &Value)) },
@ { $($out),*, (&$next, Some(&$($k).+ as &$crate::field::Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, ?$($k:ident).+, $($rest:tt)*) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&debug(&$($k).+) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::debug(&$($k).+) as &$crate::field::Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, %$($k:ident).+, $($rest:tt)*) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&display(&$($k).+) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::display(&$($k).+) as &$crate::field::Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = ?$val:expr) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::debug(&$val) as &$crate::field::Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = %$val:expr) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&display(&$val) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::display(&$val) as &$crate::field::Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = $val:expr) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&$val as &Value)) },
@ { $($out),*, (&$next, Some(&$val as &$crate::field::Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&$($k).+ as &Value)) },
@ { $($out),*, (&$next, Some(&$($k).+ as &$crate::field::Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, ?$($k:ident).+) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&debug(&$($k).+) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::debug(&$($k).+) as &$crate::field::Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, %$($k:ident).+) => {
$crate::valueset!(
@ { $($out),*, (&$next, Some(&display(&$($k).+) as &Value)) },
@ { $($out),*, (&$next, Some(&$crate::field::display(&$($k).+) as &$crate::field::Value)) },
$next,
)
};
// Remainder is unparseable, but exists --- must be format args!
(@ { $(,)* $($out:expr),* }, $next:expr, $($rest:tt)+) => {
$crate::valueset!(@ { (&$next, Some(&format_args!($($rest)+) as &Value)), $($out),* }, $next, )
$crate::valueset!(@ { (&$next, Some(&format_args!($($rest)+) as &$crate::field::Value)), $($out),* }, $next, )
};

// === entry ===
($fields:expr, $($kvs:tt)+) => {
{
#[allow(unused_imports)]
use $crate::field::{debug, display, Value};
let mut iter = $fields.iter();
$fields.value_set($crate::valueset!(
@ { },
Expand Down

0 comments on commit e3b3a3a

Please sign in to comment.