使用旧Rust 2015
0.1.0 |
|
---|
#12 在 #parse-attributes
用于 prom-attire
3KB
55 行
prom-attire

过程 宏 属性
当您需要最佳着装的过程宏时。
开发中
此项目使用 clippy 并在CI构建中否认警告。为了确保您的更改将被接受,请在提交拉取请求之前使用 cargo clippy
(在nightly rust中通过 cargo install clippy
可用)进行检查(以及通常的 cargo test
)。
CI中使用的nightly日期和clippy版本都在 .travis.yml
中固定,因为clippy有时在新nightly发布后会出现几天的问题。在提交拉取请求时,随时可以将其更新为已知的好对。
为什么有三个crate
为什么不只三个crate呢?
当前过程宏的一个问题是,定义过程宏的crates无法使用自己的过程宏。在这种情况下,prom-attire
想要一些属性来控制它如何解析属性(目前,只有顶级 "scope" 属性标识符,即在 attire
中的值 #[attire(scope = shoes)]
中),显然 prom-attire
需要解析这些属性以获取所需的信息,但 prom-attire
整个点在于使解析属性变得轻松,在 prom-attire
中有一个手动解析器意味着任何对 prom-attire
生成的解析代码的升级可能都需要在 prom-attire
中的解析代码中进行重复。
幸运的是,有一个解决方案,通过使用三个crates ;-)
基础是 prom-attire-impl
,它实现了整个过程宏 derive,但本身不定义过程宏 derive 宏。相反,它导出一个函数,该函数接受传递给过程宏 derive 的AST和一些配置,并返回派生的实现。
接下来,prom-attire-bootstrap
定义了一个简单的过程宏 derive 宏 FromAttributesBootstrap
,该宏使用硬编码的配置调用 prom-attire-impl
。
最后,prom-attire
定义了一个稍微复杂的过程宏 derive 宏 (FromAttributes
),它使用 FromAttributesBootstrap
派生的解析器解析一些属性,然后使用从这些解析属性派生的配置调用 prom-attire-impl
。这是crates的 "公开" 入口点,技术上可以使用其他方法,但它们可能不太有用。
因此,最终 prom-attire
是一个定义过程宏 derive 宏的crates,帮助开发者编写过程宏 derive 宏,其实现中使用了过程宏 derive(不,那不是 inception)。
许可证
根据您的选择,许可协议为以下之一:
- Apache License,版本 2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交的任何有意包含在作品中的贡献将根据上述条款进行双重许可,不附加任何额外条款或条件。
依赖项
~5.5MB
~113K SLoC