使用旧Rust 2015
0.1.0 |
|
---|
#10 in #parse-attributes
12KB
80 行
prom-attire

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