#identifier #proc-macro #macro #concatenation #compiler-plugin

nightly interpolate_idents

可用的宏标识符连接插件

29 个版本

使用旧的 Rust 2015

0.2.9 2018年11月8日
0.2.7 2018年8月27日
0.2.5 2018年6月16日
0.2.4 2018年3月26日
0.0.1 2015年3月22日

#16 in #concatenation

Download history 230/week @ 2024-04-01 7/week @ 2024-04-08 5/week @ 2024-04-15 13/week @ 2024-04-22 4/week @ 2024-04-29 7/week @ 2024-05-06 7/week @ 2024-05-13 58/week @ 2024-05-20 6/week @ 2024-05-27 8/week @ 2024-06-03 17/week @ 2024-06-10 17/week @ 2024-06-17 6/week @ 2024-06-24 168/week @ 2024-07-01 3/week @ 2024-07-08 14/week @ 2024-07-15

191 每月下载量
4 crates 中使用

MIT 许可证

11KB
188

interpolate_idents

弃用警告

由于 Rust 1.30.0 中引入了稳定的过程宏支持,现在可以使用完全稳定的代码实现这个包最初的目标。请尝试使用 @dtolnay 的 paste 包来查看它是否可以满足您当前的所有用例。 paste 可以在稳定的生产环境中使用,并且不太可能在 Rust 版本之间出现破坏。

理想情况下,我们将弃用 interpolate_idents,一旦我们确信没有用户在过渡到 paste 时被落下。请在 问题 #45 上发表评论或创建一个新问题,提出任何担忧和个人经验。谢谢!

摘要

Travis-CI Status

警告! 此包使用过程宏(如今称为 编译器插件)并且只能与 Rust 的 nightly 发行版 一起使用。

由于 Rust 编译器解析宏的方式,您目前无法使用 concat_idents! 定义结构体、枚举、函数或字段。这可能在将来得到改变,但 interpolate_idents! 粗略地解决了目前缺乏宏系统的一些副作用。

#![feature(plugin)]
#![plugin(interpolate_idents)]

macro_rules! make_fn {
    ($x:ident) => ( interpolate_idents! {
        fn [my_ $x _fn]() -> u32 { 1000 }
    } )
}

现在 make_fn!(favorite); 等同于 fn my_favorite_fn() -> u32 { 1000 }

简而言之,将多个用空格分隔的标识符(或宏标识符变量)用方括号括起来以连接标识符。请检查 tests/tests.rs 以获取另一个示例。

这个插件很快就被匆忙拼凑在一起了。它可能性能不佳,并且肯定不可读。

仓库维护

我并没有积极地在夜间版本上开发,所以我没有太频繁地使用这个插件。我明白 libsyntax 是一个变幻莫测的生物,所以如果 interpolate_idents 在最新的夜间版本上无法编译,请提交一个问题或PR!

无运行时依赖