From bb0224c1201366c61abb71bfceba13ebd97258c7 Mon Sep 17 00:00:00 2001 From: Ashley Mannix Date: Thu, 19 Dec 2019 07:11:56 +1000 Subject: [PATCH 1/2] add test for named format args --- tests/macros.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/macros.rs b/tests/macros.rs index 34c89811f..9478db443 100644 --- a/tests/macros.rs +++ b/tests/macros.rs @@ -26,6 +26,15 @@ fn with_args_expr_context() { }; } +#[test] +fn with_named_args() { + let cats = "cats"; + + info!("hello {cats}", cats = cats); + info!("hello {cats}", cats = cats,); + info!("hello {cats}", cats = cats,); +} + #[test] fn kv() { info!("hello {}", "cats", { From c3a9a14c580e57840d6cf0861774681def5805c5 Mon Sep 17 00:00:00 2001 From: Ashley Mannix Date: Thu, 19 Dec 2019 07:15:14 +1000 Subject: [PATCH 2/2] revert to old macro impl for now --- src/lib.rs | 30 --------------------- src/macros.rs | 70 ++++++------------------------------------------- tests/macros.rs | 18 ------------- 3 files changed, 8 insertions(+), 110 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a7547610e..868b7015a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1365,39 +1365,10 @@ pub fn logger() -> &'static dyn Log { // WARNING: this is not part of the crate's public API and is subject to change at any time #[doc(hidden)] -#[cfg(not(feature = "kv_unstable"))] pub fn __private_api_log( args: fmt::Arguments, level: Level, &(target, module_path, file, line): &(&str, &'static str, &'static str, u32), - kvs: Option<&[(&str, &str)]>, -) { - if kvs.is_some() { - panic!( - "key-value support is experimental and must be enabled using the `kv_unstable` feature" - ) - } - - logger().log( - &Record::builder() - .args(args) - .level(level) - .target(target) - .module_path_static(Some(module_path)) - .file_static(Some(file)) - .line(Some(line)) - .build(), - ); -} - -// WARNING: this is not part of the crate's public API and is subject to change at any time -#[cfg(feature = "kv_unstable")] -#[doc(hidden)] -pub fn __private_api_log( - args: fmt::Arguments<'_>, - level: Level, - &(target, module_path, file, line): &(&str, &'static str, &'static str, u32), - kvs: Option<&[(&str, &dyn kv::ToValue)]>, ) { logger().log( &Record::builder() @@ -1407,7 +1378,6 @@ pub fn __private_api_log( .module_path_static(Some(module_path)) .file_static(Some(file)) .line(Some(line)) - .key_values(&kvs) .build(), ); } diff --git a/src/macros.rs b/src/macros.rs index 008f74e25..ae6080d9b 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -29,75 +29,29 @@ /// ``` #[macro_export(local_inner_macros)] macro_rules! log { - // log!(target: "...", "...") - (target: $target:expr, $lvl:expr, $e:expr) => ( - $crate::log_impl!(target: $target, $lvl, ($e)); - ); - - // log!(target: "...", "...", args...) - (target: $target:expr, $lvl:expr, $e:expr, $($rest:tt)*) => ( - $crate::log_impl!(target: $target, $lvl, ($e) $($rest)*); - ); - - // log!("...", args...) - ($lvl:expr, $($arg:tt)+) => ( - $crate::log!(target: __log_module_path!(), $lvl, $($arg)+); - ) -} - -#[macro_export(local_inner_macros)] -#[doc(hidden)] -macro_rules! log_impl { - // End of macro input - (target: $target:expr, $lvl:expr, ($message:expr)) => {{ + (target: $target:expr, $lvl:expr, $message:expr) => ({ let lvl = $lvl; if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() { + // ensure that $message is a valid format string literal + let _ = __log_format_args!($message); $crate::__private_api_log_lit( $message, lvl, &($target, __log_module_path!(), __log_file!(), __log_line!()), ); } - }}; - (target: $target:expr, $lvl:expr, ($($arg:expr),*)) => {{ + }); + (target: $target:expr, $lvl:expr, $($arg:tt)+) => ({ let lvl = $lvl; if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() { $crate::__private_api_log( - __log_format_args!($($arg),*), + __log_format_args!($($arg)+), lvl, &($target, __log_module_path!(), __log_file!(), __log_line!()), - None, - ); - } - }}; - - // // Trailing k-v pairs containing no trailing comma - (target: $target:expr, $lvl:expr, ($($arg:expr),*) { $($key:ident : $value:expr),* }) => {{ - let lvl = log::Level::Info; - if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() { - $crate::__private_api_log( - __log_format_args!($($arg),*), - lvl, - &(__log_module_path!(), __log_module_path!(), __log_file!(), __log_line!()), - Some(&[$((__log_stringify!($key), &$value)),*]) ); } - }}; - - // Trailing k-v pairs with trailing comma - (target: $target:expr, $lvl:expr, ($($e:expr),*) { $($key:ident : $value:expr,)* }) => ( - $crate::log_impl!(target: $target, $lvl, ($($e),*) { $($key : $value),* }); - ); - - // Last expression arg with no trailing comma - (target: $target:expr, $lvl:expr, ($($e:expr),*) $arg:expr) => ( - $crate::log_impl!(target: $target, $lvl, ($($e,)* $arg)); - ); - - // Expression arg - (target: $target:expr, $lvl:expr, ($($e:expr),*) $arg:expr, $($rest:tt)*) => ( - $crate::log_impl!(target: $target, $lvl, ($($e,)* $arg) $($rest)*); - ) + }); + ($lvl:expr, $($arg:tt)+) => (log!(target: __log_module_path!(), $lvl, $($arg)+)) } /// Logs a message at the error level. @@ -306,11 +260,3 @@ macro_rules! __log_line { line!() }; } - -#[doc(hidden)] -#[macro_export] -macro_rules! __log_stringify { - ($($args:tt)*) => { - stringify!($($args)*) - }; -} diff --git a/tests/macros.rs b/tests/macros.rs index 9478db443..da397c3a5 100644 --- a/tests/macros.rs +++ b/tests/macros.rs @@ -34,21 +34,3 @@ fn with_named_args() { info!("hello {cats}", cats = cats,); info!("hello {cats}", cats = cats,); } - -#[test] -fn kv() { - info!("hello {}", "cats", { - cat_1: "chashu", - cat_2: "nori", - }); -} - -#[test] -fn kv_expr_context() { - match "chashu" { - cat_1 => info!("hello {}", "cats", { - cat_1: cat_1, - cat_2: "nori", - }), - }; -}