2017-01-05 6 views
3

、私は簡単にこのコマンドを使用して、私のsrcコードにclippyを実行することができます。ビルドスクリプトでclippyを実行する簡単な方法はありますか?貨物プロジェクトで

rustup run nightly cargo clippy 

をしかし、私はbuild scriptを使用している場合は、私もそれにclippyを実行したいと思います。例えば、私のbuild.rsファイルは次のようになります場合:

fn main() { 
    let foo = "Hello, world!"; 
    println!("{}", foo); 
} 

私はclippyを実行したときに、このを見てみたいと思います:

warning: use of a blacklisted/placeholder name `foo`, #[warn(blacklisted_name)] on by default 
--> build.rs:2:9 
    | 
2 |  let foo = "Hello, world!"; 
    |   ^^^ 
    | 
    = help: for further information visit https://github.com/Manishearth/rust-clippy/wiki#blacklisted_name 

私は考えることができる唯一の方法は私のビルドでclippyを実行しますスクリプトをcargo new一時的なプロジェクトにコピーし、clippyを実行し、そこに変更を加えてコピーバックしますが、build dependenciesなどがミックスに追加されると、ひどく不便で、すぐに実行不可能になります。

clippyでビルドスクリプトを解析する簡単な方法はありますか?

+0

@Shepmaster [README](https://raw.githubusercontent.com/Manishearth/rust)の大文字の "C"を持つ "Clippy"の唯一のインスタンスは "Clippy"の代わりに "clippy" -clippy/master/README.md)はタイトルケースの画像記述に含まれています。 –

答えて

3

Clippyを使用するには、cargo clippyコマンドとコンパイラプラグインの2つの方法があります。 cargo clippyは、メインプロジェクトの依存としてビルドスクリプトを検出するため、コンパイラプラグインはロードされません。

したがって、もう1つの選択肢は、コンパイラプラグインを直接使用することです。これを行う手順はclippy's READMEです。ビルドスクリプトでそれを使用するには、いくつかの変更を加える必要があります。

まず、我々はビルド依存関係としてclippyを追加する必要があります。

[build-dependencies] 
clippy = { version = "*", optional = true } 

[features] 
default = [] 

貨物は、コンパイラに依存関係へのパスを渡さないよう代わり[dependencies]にそれを追加すると、(結果はerror[E0463]: can't find crate for `clippy`です)動作しません。ビルドスクリプトをビルドするとき。

はその後、我々はbuild.rsの先頭にこれを追加する必要があります。あなたが上clippyを実行したい場合は

$ cargo build --features clippy 

#![cfg_attr(feature="clippy", feature(plugin))] 
#![cfg_attr(feature="clippy", plugin(clippy))] 

は最後に、我々はclippy機能を有効にして構築する必要があります上記のコマンドを使用するときは、ビルドスクリプトとメインプロジェクトの両方で、[dependencies]に同じの依存関係を追加し、cfg_attr属性をクレートルート(lib.rs,main.rsなど)。

+0

ありがとう!このアプローチの問題( 'Cargo.toml'、' build.rs'、 'lib.rs'または' main.rs'に注釈を付けることに加えて)は、clippyが解析されるファイルがファイルを再コンパイルする必要がない場合でも、 'cargo clippy'は常にclippyを実行します。 'cargo build'を実行する前に' build.rs'を編集するよりも、この動作を実現する良い方法はありますか? –

+0

事前に 'cargo clean --package 'を実行できます。これにより、プロジェクト自体とビルドスクリプトの両方が消去されます。 –

+0

それはうまくいかないようです。私はそのコマンドを実行し、 'rustup run nightly cargo build --features clippy'を再度実行すると、' src'コードのclippy出力を取得しますが、 'build.rs'ファイルは出力しません。 –

関連する問題