tracing icon indicating copy to clipboard operation
tracing copied to clipboard

fix: `level!` macros with constant field names in the first position

Open mladedav opened this issue 4 months ago • 0 comments

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)+ })
    );

mladedav avatar Feb 18 '24 11:02 mladedav