コンパイラプラグイン、ユーザの提供する構文拡張や構文チェックなどのコンパイラの振舞を拡張するライブラリをロード出来ます。関数を持った動的ライブラリのクレートです。クレートアトリビュートでロード出来ます。ように渡された引数があるなら、それらはrustc自身によっては解釈されません。メソッドを通じてプラグインに渡されます。通じて使われるべきではありません。プラグインをリンクするとlibsyntaxとlibrustcの全てをクレートの依存に引き込んでしまいます。これは別のプラグインを作っているのでもない限り一般的には望まぬ挙動です。チェッカによってこのガイドラインは検査されます。マクロやコンシューマが使うライブラリのコードとは分けられます。構文拡張プラグインはRustの構文を様々な方法で拡張出来ます。構文拡張の1つに手続的マクロがあります。これらは普通のマクロと同じように実行されますが展開は任意の構文木をコンパイル時に操作するRustのコードが行います。ローマ数字リテラルを実装するroman_numerals.rsを書いてみましょう。マクロを他の任意のマクロと同じように使えます。対する利点は(任意に複雑な)変換がコンパイル時に行なわれる入力バリデーションもコンパイル時に行なわれるパターンで使えるように拡張出来るので、実質的に任意のデータ型に対して新たなリテラル構文を与えられる手続き的マクロに加えてderiveライクなアトリビュートや他の拡張を書けます。列挙型を参照して下さい。複雑なマクロの例はregex_macrosを参照して下さい。ヒントと小技マクロデバッグのヒントのいくつかが使えます。syntax::parseを使うことでトークン木を式などの高レベルな構文要素に変換出来ます。パーサのコードを見るとパーサの基盤がどのように機能しているかを感られるでしょう。良いエラー報告のために保持しておきましょう。呼ぶとコンパイルは即座に中断されます。返せばコンパイラはさらなるエラーを発見できるのでその方が良いでしょう。使って整数リテラルを作りました。準クォートマクロを提供しています。ドキュメントがない上に荒削りです。その実装は改良版の普通のプラグインライブラリのとっかかりにはほど良いでしょう。構文チェックプラグインプラグインによってRustの構文チェック基盤を拡張してコーディングスタイル、安全性などを検査するようにできます。lint_plugin_test.rsプラグインを書いてみましょう。いう名前のアイテムについて警告を出すものです。}コンパイラの警告を発生させます。構造体が定義されます。get_lintsを通じて登録すべきです。構文チェックパスは構文巡回ですが、型情報が得られる、コンパイルの終盤で走ります。組み込み構文チェックは殆どプラグインと同じ基盤を使っており、どうやって型情報にアクセスするかの例になっています。よってコントロールされます。第一引数に由来しており、適切な名前に変換されます。内で定義されたコンパイラ構文チェックをロード出来ます。