2017-03-04 3 views
1

Rustはプラグインを書くさまざまな方法を提供します。錆コードのチェックを拡張するため、開発者はLint Pluginsを書くことができます。プラグインを使用する一般的な方法は、このプラグインの使用を示すソースコードに行を追加することです:ソースコードを変更せずにRustコンパイラプラグインをロードするには?

#![plugin(myplugin)] 

ます。またdependenciesセクションでプラグインのプロジェクトが含まれるようにCargo.tomlファイルを編集する必要があります。

あなたが大規模なプロジェクトを分析する場合
myplugin = {path = "/path/to/myproject"} 

はしかし、これらの変更は、cargo buildまたはrustcは、ソースコードを変更せずに、私のプラグインをロードする方法を提供する場合、私は疑問に思う、厄介であるように見えます。

答えて

2

rustcには、追加のプラグインをロードするためのコマンドラインパラメータ-Z extra-plugins=<plugins>があります。ただし、コンパイル済みのプラグインライブラリへのパスをコンパイラに渡す必要があります。プラグインライブラリがCargo.tomlの依存関係として宣言されている場合、これは自動的に行われます。 Cargo.tomlに含まれていない場合は、それを個別にコンパイルして、オプションに加えて、--extern my_plugin=/path/to/plugin.rlibで手動で参照することができます。

別のオプションがあります。 Clippyは、Rustの一般的なリントの大きなコレクションで、cargo clippyとして呼び出すことができるプログラムを提供しています。そのプログラムは、基本的には、コンパイラのフロントエンド(rustcで使用される内部クレートを使用)を実装して、コンパイラのプラグインレジストリ(プロジェクトの依存関係ではなくメインプロジェクトのみ)に直接ロードする偽のrustcとして機能します。 You can see the code on GitHub (licensed under MPLv2).このアプローチの利点は、プラグインがフロントエンドで構築されているため、プラグインへのパスを与える必要がないことです。これにより、プラグインのユーザーに便利に使用できます。欠点は、そのようなプログラムが不安定なコンパイラ内部に依存していることです。これは、rustcの不安定なAPIの変更が壊れたために、いつでもあなたのプログラムがコンパイルを停止できることを意味します。

+0

ありがとう、非常に素晴らしい! – Qoros

関連する問題