#proc-macro #frame #within #wrap #output #text #procedural

function-frame

过程宏,用于将任何函数的输出封装在文本框中

2个版本

0.1.1 2020年5月18日
0.1.0 2019年10月12日

#686过程宏

MIT 协议

17KB
166

函数框

一个过程宏,用于在文本框中封装任何函数的输出。

问题

您是否经常使用 println! 进行调试?如果是这样,那么您可能已经体验过在您完成其他项目工作一周后尝试调试程序时的痛苦。突然,您无法回忆起代码的确切结构,您在终端中看到了一些输出,但不知道它们可能来自哪里。如果这种情况发生在您身上,请不要担心,我为您(以及我自己)构建了这个crate。

然而,如果我要说实话,这个crate的主要用途是学习。您知道,我喜欢通过在函数内编写自己的紧凑示例并在调用这些函数来查看是否得到预期的行为来学习如何使用库。您可以想象,这种方法在复杂库中会迅速增加示例数量时会产生影响。因此,我经常会发现自己编写如下代码:

fn example_one() {
    let title = "Example One";
    let width = 50;
    let header_sep = "=".repeat(width);
    let footer_sep = "=".repeat(2 * (width + 1) + title.len());
    println!("{} {} {}", header_sep, title, header_sep);
    // some code here...
    println!("{}", footer_sep);
}

为了得到如下输出:

================= Example One =================
// example output
===============================================

问题是我必须为每个创建的示例编写相同的6行代码。这不仅使几个示例之后变得单调乏味,我还发现这些行混淆了示例中的代码,因为它们并没有做任何有意义的工作。它们只是出于美观而存在!

解决方案

因此,我决定创建一个过程宏来处理完全相同的行为。现在,使用这个crate,我只需编写以下代码:

#[frame(title = "Example One", sep = "=", width = 50)]
fn example_one() {
    // some code here...
}

这是一个巨大的改进,不仅减少了我要编写的代码量,还保留了示例中的代码!目前它只能打印到 stdout,但在将来如果需要,我会考虑添加将内容写入文件的功能。

许可证

MIT许可证。

依赖项

~1.5MB
~35K SLoC