2 个版本
0.0.2 | 2022 年 1 月 19 日 |
---|---|
0.0.1 | 2022 年 1 月 19 日 |
#20 in #macro-expansion
6KB
95 代码行
inline-mod
宏展开时的内联模块!
注意
初始声明需要 相对于项目根目录 的 path
属性,因为在稳定版本中,无法获取宏调用文件的位置。
每个具有路径属性的嵌套模块也将相对于项目根目录进行处理,尽管 这可能在未来的更新中改变。
如果一个嵌套的非内联模块没有路径属性,则宏将尝试以 Rust 编译器相同的方式进行解析 - 相对于当前模块查找 module_name.rs
或 module_name/mod.rs
文件。
为什么?
目前,即使在 nightly 版本中,即使可以在非内联模块上使用属性宏,也无法完成任何事情,因为项目在宏展开后会被内联。这个宏会为你内联模块,这样你就可以在非内联(甚至是嵌套)的模块上使用宏。
示例
// main.rs
use inline_mod::inline_mod;
inline_mod! {
#[my_attr]
#[path = "src/foo.rs"]
mod foo;
}
// foo.rs
struct Bar(i32);
pub mod baz;
// foo/baz/mod.rs
pub struct Hi;
将展开为
#[my_attr]
mod foo {
struct Bar(i32);
pub mod baz {
pub struct Hi;
}
}
在执行 my_attr
之前。
依赖项
~1.5MB
~35K SLoC