問題タブ [rust-proc-macros]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 2 クレート ライブラリの proc-macro クレートを実装の詳細として扱い、セマンティック バージョニングに従わないことは問題ありませんか?
手続き型マクロを含む多くのライブラリは、2 つのクレートで構成されていますproc-macro
。実際のマクロを実装するクレートと、proc マクロを再エクスポートまたはラップする通常の「メイン」クレートです。これは、proc-macro
crate が proc マクロ以外のものを公にエクスポートできないためです。メインクレートが と呼ばれると仮定するとfoo
、マクロクレートは通常foo-derive
orと呼ばれfoo-macros
ます。
proc-macro
これにより、クレートのバージョン管理方法に関するいくつかの質問が発生します。もちろん、メインクレートはセマンティックバージョニングに従います。しかし、マクロクレートもそれに続くべきでしょうか? マクロクレートを直接使用するのではなく、メインクレートのみを使用してもらいたいです。proc-macro クレートの説明ではっきりと述べました。マクロ クレートを実装の詳細として扱いたい。
その場合、セマンティック バージョニングに従う必要はありませんよね? メインのクレートは、foo-macro = "=0.0.4"
.
これでいいですか?それとも、このアプローチで何かが壊れる可能性がありますか? コミュニティで確立されたベスト プラクティスはありますか?
parsing - proc マクロ派生で属性を識別子に変換する
私は最初の proc マクロを書いていますが、thiserror、structopt、deliver_more のソースを読み込もうとしても、探しているものを正確に見つけることができないようです。これを変換したい:
これに:
私は proc マクロを書き始めましたが、属性を解析しようとして失敗しました:
私が抱えている問題は、実際に属性リストを使用可能な形式にする方法ですか? 私が知る限り、「foo」と「bar」を解析して取得する必要があるため&[Attribute]
、メソッド識別子と「SomeType」および「OtherType」識別子を構築できます。これらは最終的にquote!
. TokenStream
コンソールに出力すると、すべての情報が表示されます。
しかし、私は実際にそれを手に入れる方法がありません。への行き方はtokens[0].stream.ident
?