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

时间:2017-06-05 19:32:13

标签: rust

我试图将整个箱子传递给程序宏。

我已尝试将此代码置于我的lib.rs

之上
#![my_macro]
#![feature(proc_macro)]
extern crate my_macro;
use my_macro::{my_macro};

并失败: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]

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

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

1 个答案:

答案 0 :(得分:2)

只要启用feature(extern_absolute_paths)并使用属性宏的绝对路径,就可以从Rust 1.25.0开始每晚使用。

#![::my_crate::my_macro]
#![feature(extern_absolute_paths, proc_macro)]

rust-lang/rust#41430正在跟踪在包根处调用的属性宏问题。随着RFC 2126的实现进一步发展,我们希望消除必须使用绝对路径指定属性的限制。您也可能遇到其他限制,特别是尝试将函数从当前的crate级过程宏注入包中{。{3}}。