From f8a74f19ab465025d43b6031578e820e893b5d3b Mon Sep 17 00:00:00 2001 From: Daniel Parks Date: Wed, 25 Jan 2023 21:22:25 -0800 Subject: [PATCH] Document `cargo-clippy` feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is possible to use conditional compilation to prevent Clippy from evaluating certain code at all. Unfortunately, it was no longer documented anywhere. This adds a brief explanation of how to use the feature with conditional compilation, and mentions a few downsides. Fixes ##10220 — Ability to skip files or blocks entirely --- book/src/configuration.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/book/src/configuration.md b/book/src/configuration.md index 87f4a697af9f..cfe89d8f3f37 100644 --- a/book/src/configuration.md +++ b/book/src/configuration.md @@ -73,6 +73,27 @@ interested in: cargo clippy -- -A clippy::all -W clippy::useless_format -W clippy::... ``` +### Disabling evaluation of certain code + +Rarely, you may wish to prevent Clippy from evaluating certain sections of code entirely. Clippy sets the `cargo-clippy` +feature when it compiles your code, so you can use [conditional +compilation](https://doc.rust-lang.org/reference/conditional-compilation.html) to prevent files or blocks from being +parsed at all. Note that since the code is not evaluated you cannot turn evaluation or lints back on within the code. +Also, if the code is referenced from elsewhere in your crate, you may need to provide a stub so that the code compiles: + +```rust +#[cfg(not(feature = "cargo-clippy"))] +include!(concat!(env!("OUT_DIR"), "/my_big_function-generated.rs")); + +#[cfg(feature = "cargo-clippy")] +fn my_big_function(_input: &str) -> Option { + None +} +``` + +This feature is not actually part of your crate, so specifying `--all-features` to other tools, e.g. `cargo test +--all-features`, will not disable it. + ### Specifying the minimum supported Rust version Projects that intend to support old versions of Rust can disable lints pertaining to newer features by specifying the