tracing
tracing copied to clipboard
fix: `level!` macros with constant field names in the first position
Motivation
#2837
Const argumetns in level!
macros do not work when in the first positoin.
This also seems to have fixed #2748 where literals for fields names like info!("foo" = 2)
could not be used outside the event!
macro.
Solution
Previsously, level!($(args:tt))
was forwarded to event!(target: ..., level: ..., { $(args:tt) })
but the added curly braces seem to have prevented the event
macro from correctly understanding the arguments and it tried to pass them to format!
.
With this change there may have some performance impact when expanding the macros in most cases where the braces could have been added as it will take one more step.
These are the two relevant event!
blocks I believe, the new tests used to expand to the first one (with empty fields), now they expand to the latter:
(target: $target:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
$crate::event!(
target: $target,
$lvl,
{ message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
)
);
(target: $target:expr, $lvl:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, $lvl, { $($arg)+ })
);