使用旧的Rust 2015
| 0.1.0 |
|
|---|
#11 在 #parse-attributes
用于 2 crate
34KB
909 行
prom-attire

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