< 返回版块

ZihanType 发表于 2023-03-13 13:43

Tags:声名式宏, 可见性

macro-v

Rust 中声名式宏的可见性和其他的诸如函数、结构体并不一样,不是用 pubpub(crate),而是用 #[macro_use]#[macro_export],说实话,我经常搞不懂这两个要怎么用,平常用不到,用到了就是临时抱佛脚看看。

我在社区里看到了一个 crate,macro-vis,能用属性宏将声名式宏的可见性写起来和其他的 item 的可见性一样,但是有两个小小的问题:

  1. 你必须加上 #![allow(uncommon_codepoints)]。我对这种禁止编译器警告的方式有点抗拒,我还是挺享受编译器的各种警告的,而且我比较懒,不想写这个属性。

  2. 生成的宏在文档里会被显示成函数,而不是宏,而且函数的名字有个 ! 的后缀,像是一个宏一样,这个特殊符号的存在也是为什么第一个问题存在的原因。我感觉这种显示方式不太好,我希望宏能像宏一样显示。

所以我重新实现了一个属性宏,解决了这两个问题。代码很简单,文档注释的行数都比代码行数多,各位大佬一看就会。

地址在这里,macro-v

唯一有个小小的问题,就是如果要手动重新导出宏,就必须在 pub use 上加上 #[doc(inline)],不然宏就不会在文档里显示出来,这个问题是实现方式导致的,暂时无解,要彻底解决这个问题,只能等官方的声名式宏 2.0 版本出来了。

欢迎各位使用,有问题欢迎提 issue,如果觉得好用,欢迎 star。

评论区

写评论

还没有评论

1 共 0 条评论, 1 页