#proc-macro #attributes #derive #macro-derive #parse-attributes

已撤回 prom-attire

用于解析属性的程序宏

使用旧Rust 2015

0.1.0 2017年4月29日

#10 in #parse-attributes

MIT/Apache

12KB
80

prom-attire travis-badge cargo-badge license-badge rust-version-badge

程序 属性

当你需要最佳着装的程序宏时。

开发

此项目使用 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,以帮助开发者编写过程推导宏,其实现中使用了过程推导(不,这并不是无限循环)。

许可证

根据您选择以下之一授权:

任选其一。

贡献

除非您明确声明,否则您提交的任何贡献均应双许可,如上所述,没有任何附加条款或条件。

依赖关系

~5.5MB
~113K SLoC