問題タブ [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 - 手続き型マクロで、文字列が有効な変数名であり、キーワードではないかどうかを確認するにはどうすればよいですか?
手続き型マクロで、文字列が有効な変数名であり、キーワードではないことを確認できるようにしたいと考えています。
proc_macro2::Ident
無効な変数名を使用しようとするとパニックになりますが、許可したくないキーワードを許可します。パニックに陥る前に、適切で便利なエラー メッセージを表示してエラーを処理することもできます。
文字列が変数名に関する規則に従っていることを確認するマクロまたは関数 (クレート内またはその他) はありますか? おそらく正規表現でそれを行うことができますが、ドラゴンは正規表現に住んでいます。
これの使用例は、ガベージ文字列を含む可能性があるユーザー入力文字列の処理です。
rust - 識別子 (`proc_macro::Ident`) を定数として格納して、繰り返しを避けるにはどうすればよいですか?
手続き型マクロを作成していて、非常に長い識別子を複数回発行する必要があります (たとえば、衛生上の理由による可能性があります)。以前は sをquote!
作成してTokenStream
いましたが、長い識別子を何度も繰り返したくありません。
たとえば、次のコードを生成したいとします。
Ident
を作成して補間できることを知っていますquote!
:
ここまでは順調ですが、コード ベース全体の多くの関数でその識別子を使用する必要があります。const
どこでも使えるものにしたい。ただし、これは失敗します。
このエラーで:
const
これらの関数がすぐにマークされるとは思えません。
文字列自体を定数にすることができます。
しかし、識別子を使用したい場合はどこでも を呼び出す必要がありIdent::new(IDENT, Span::call_site())
、これはかなり面倒です。呼び出しに書きたいだけです#IDENT
。quote!
どうにかして機能させることはできますか?
rust - 手続き型マクロ属性で呼び出し元のソース コードの場所を取得できますか?
すべてのメソッドの呼び出し元のソースの場所を取得する必要があります。proc_macro_attribute
場所をキャプチャして印刷するを作成しようとしています。