2017-06-05 8 views
2

私は自分のクレート全体を手続き型マクロに渡そうとしています。全体の枠を手続き型マクロに渡すにはどうすればいいですか?

私は私の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が全体の木枠を解析する機能を持っていることを知っています)

+2

まだありません:https://github.com/rust-lang/rust/issues/41430 – kennytm

+0

ありがとうございます。それを正式な回答にすると、私はそれを受け入れることをうれしく思います。 – CodeSandwich

答えて

2

feature(extern_absolute_paths)を有効にし、アトリビュートマクロに絶対パスを使用している限り、毎晩1.25.0夜間に可能です。

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

クレートのルートで呼び出さ属性マクロの問題がrust-lang/rust#41430に追跡されています。 RFC 2126の実装がさらに進むにつれて、絶対パスで属性を指定する必要があるという制限がなくなります。特にcrashes the compilerのクレートレベルの手続き型マクロからクレートに関数を挿入しようとすると、他の制限もあります。

関連する問題