問題タブ [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 - 手続き型マクロで構文的に無効な入力を受け入れるにはどうすればよいですか?
手続き型マクロは字句的に有効な入力のみを持っている必要があると思っていましたが、何か間違っていない限り、すべての入力もRust コードとして解析する必要があるようです。
RFC は次のように述べています。
トークンを操作することにより、手続き型マクロに渡されるコードは Rust パーサーを満たす必要はなく、レクサーのみを満たす必要があります。
入力に無効な Rust 構文が含まれているとすぐに、解析エラーが発生します。
次の手続き型マクロを検討してください。
実行時:
エラーが発生します:
cargo-expand
マクロが関数を正しく削除することを示します。したがって、解析エラーを停止するべきではありませんか?
私は何を間違っていますか?
rust - ダーリンを使用して手続き型マクロ属性からタイプを抽出するにはどうすればよいですか?
理想的には、複数の型に対して変換するための繰り返し可能な data_loader 属性を許可する方法で、型 DieselHandler を抽出できる必要があります。
私が使用する場合handler: syn::Type
、エラーがあります:
特性境界
syn::Type: FromMeta
が満たされていない 特性FromMeta
が実装されていないsyn::Type
ここで型を渡して、ラッパー構造をチェックするにはどうすればよいですか?
rust - 「syn::buffer::Cursor」しかないコンテキストから「syn::parse::Parse」(より一般的には「ParseBuffer」) を使用するにはどうすればよいですか?
私はproc_macro2
/syn
マクロに取り組んでおりCursor
、何かの低レベルの解析を行うために使用しています... Rust- like . しかし、私の文法の奥深くでは、 a を解析する必要がありsyn::Type
ます。私の知る限り、これを行う唯一の本当に良い方法は、 for を使用することimpl syn::parse::Parse
ですsyn::Type
。
だから私が本当に見つけたいのは、署名の関数を書く良い方法です
私の質問は、このタイプの関数を実装するための最良の (最も簡単で、問題の少ない) 方法は何ですか?
これが私がこれまでに思いついた最高のものです:
悲惨なことではありませんが、理想的でもありません。
rust - フィールドを削除したり、Rust 構造体の既存のフィールドをマクロに置き換えたりすることは可能ですか?
構造体からフィールドを削除したり、その署名を完全に置き換えたりできる proc-macro の属性マクロを作成しようとしています。
これに似たもの:
結果は次のようになります。
マクロを記述して構造体の impl 部分に追加する方法は知っていますが、これまでのところ、属性マクロでマークされたコードの部分を変更する方法のサンプルを見つけるのに問題があります。
それは可能ですか?もしそうなら、サンプルを提供してもらえますか?