7 个版本
0.1.6 | 2023 年 8 月 21 日 |
---|---|
0.1.5 | 2023 年 8 月 20 日 |
#473 在 开发工具
每月 161 次下载
8KB
log_macro 
宏以优雅的方式打印变量(从发布构建中移除)
安装
cargo add log_macro
使用
将此添加到文件顶部
#[macro_use]
extern crate log_macro;
可能的用途和输出
// print string only
log!("hello"); // -> hello
// print variable
let animals = vec!["cat", "dog"];
log!(animals); // -> animals: ["cat", "dog"]
// print multiple variables
let animals = vec!["cat", "dog"];
let fish = vec!["salmon", "tuna"];
log!(animals, fish);
// each variable logged on new line
// -> animals: ["cat", "dog"]
// -> fish: ["salmon", "tuna"]
变量将以绿色显示以突出显示。
实现
导出的宏代码如下
#[macro_export]
macro_rules! log {
// Single literal string case
( $val:expr $(,)? ) => {{
#[cfg(debug_assertions)]
{
if ::std::stringify!($val).starts_with("\"") {
// Remove quotes for string literals
::std::eprintln!("{}", ::std::stringify!($val).trim_matches('\"'));
} else {
// Print using a reference to avoid moving the value
::std::eprintln!("\x1B[32m{}\x1B[0m: {:?}", ::std::stringify!($val), &$val);
}
}
}};
// Multiple variables case
( $($val:expr),+ $(,)? ) => {{
#[cfg(debug_assertions)]
{
$(
$crate::log!($val);
)+
}
}};
}
运行
将在 src/lib.rs 中运行测试。
cargo watch -q -- sh -c "tput reset && cargo test -q --lib"
贡献
要完成的任务概述在 现有问题 和以下 任务 中(按优先级排序)。
欢迎任何改进代码/文档的 PR。 ✨
加入 Discord 进行更多关于此仓库和其他仓库的深入讨论。
任务
- 修复宏导出的文档集,没有显示任何内容
- 在运行
cargo test --doc --package log_macro -- log --nocapture
之后出现了一些错误。修复它们
- 在运行
- 修复测试
- 目前它们失败了,因为我不知道如何实际测试日志是否正确
- GPT 建议尝试使用 duct,但这给出了一些问题
- 添加对多个值或不同格式化方式的支持
- 不确定作者的意思,进行调查
- 获得与 Python 格式化字符串字面量相同的工具级别
> print(f”操作: {2+1=}”)
->操作: 2+1=3
- 判断宏是否应该从发布构建中去除
- 目前与
dbg!
类似被去除 - 是否可以提供一个近似的宏以保留类似的日志,同时在发布模式下使用?
- 目前与
♥️
在GitHub上支持或查看其他项目。