如何将整个箱子传递给程序宏?

Cod*_*ich 5 rust

我正在尝试将整个箱子传递给程序宏。

我尝试将此代码放在我的之上lib.rs

#![my_macro]
#![feature(proc_macro)]
extern crate my_macro;
use my_macro::{my_macro};
Run Code Online (Sandbox Code Playgroud)

并失败了:error: cannot find attribute macro 'my_macro' in this scope

我也尝试将宏调用放在子句下面use

#![feature(proc_macro)]
extern crate my_macro;
use mock_macro::{my_macro};
#![my_macro]
Run Code Online (Sandbox Code Playgroud)

但也失败了:error: an inner attribute is not permitted in this context

有可能做到吗?(我知道syn有一个解析整个箱子的功能)

dto*_*nay 5

从 Rust 1.25.0-nightly 开始,只要您feature(extern_absolute_paths)为属性宏启用并使用绝对路径,就可以实现这一点。

#![::my_crate::my_macro]
#![feature(extern_absolute_paths, proc_macro)]
Run Code Online (Sandbox Code Playgroud)

在rust-lang/rust#41430中跟踪在 crate 根调用的属性宏的问题。随着RFC 2126实现的进一步推进,我们希望消除必须使用绝对路径指定属性的限制。您也可能会遇到其他限制,特别是尝试从当前的板条箱级过程宏将函数注入到板条箱中会导致编译器崩溃