配置 Clippy
注意: 配置文件不稳定,将来可能会被弃用。
一些 lint 可以在名为 clippy.toml
或 .clippy.toml
的 TOML 文件中配置,该文件会在以下位置搜索:
- 由
CLIPPY_CONF_DIR
环境变量指定的目录,或者 - 由 CARGO_MANIFEST_DIR 环境变量指定的目录,或者
- 当前目录。
它包含一个基本的 variable = value
映射,例如:
avoid-breaking-exported-api = false
disallowed-names = ["toto", "tata", "titi"]
配置表包含了所有配置值、它们的默认值以及它们影响的 lint 列表。每个 可配置的 lint 也包含有关这些值的信息。
对于具有默认值的列表类型的配置,例如 disallowed-names,您可以使用唯一值 ".."
来扩展默认值,而不是替换它们。
# default of disallowed-names is ["foo", "baz", "quux"]
disallowed-names = ["bar", ".."] # -> ["bar", "foo", "baz", "quux"]
要禁用“有关更多信息,请访问lint-link”消息,您可以定义 CLIPPY_DISABLE_DOCS_LINKS
环境变量。
允许/拒绝 Lint
代码中的属性
您可以在代码中添加属性来 allow
/warn
/deny
Clippy lint
-
使用
clippy
lint 组禁用所有默认warn
的 lint (#![allow(clippy::all)]
) -
使用
clippy
和clippy::pedantic
lint 组禁用所有 lint (#![warn(clippy::all, clippy::pedantic)]
)。请注意,clippy::pedantic
包含一些非常激进的 lint,容易产生误报。 -
仅禁用一些 lint (
#![deny(clippy::single_match, clippy::box_vec)]
等) -
allow
/warn
/deny
可以使用#[allow(...)]
等限制为单个函数或模块。
注意:allow
表示禁止对您的代码进行 lint 检查。使用 warn
时,lint 只会发出警告,而使用 deny
时,lint 会在触发您的代码时发出错误。错误会导致 Clippy 以错误代码退出,因此在 CI/CD 中使用的脚本中最有用。
命令行标志
如果您不想在代码中包含 lint 级别,您可以通过在运行时向 Clippy 传递额外的标志来全局启用/禁用 lint
要允许 lint_name
,请运行
cargo clippy -- -A clippy::lint_name
要警告 lint_name
,请运行
cargo clippy -- -W clippy::lint_name
这也适用于 lint 组。例如,您可以运行 Clippy 并启用所有 pedantic lint 的警告
cargo clippy -- -W clippy::pedantic
如果您只关心某些 lint,您可以允许所有其他 lint,然后显式警告您感兴趣的 lint
cargo clippy -- -A clippy::all -W clippy::useless_format -W clippy::...
Cargo.toml
中的 Lints 部分
最后,可以使用 Cargo.toml
文件中 lints 部分允许/拒绝 lint
要拒绝 clippy::enum_glob_use
,请在 Cargo.toml
中放入以下内容
[lints.clippy]
enum_glob_use = "deny"
有关更多详细信息和选项,请参阅 Cargo 文档。
指定支持的最低 Rust 版本
打算支持旧版本 Rust 的项目可以通过在 Clippy 配置文件中指定支持的最低 Rust 版本 (MSRV) 来禁用与较新功能相关的 lint。
msrv = "1.30.0"
MSRV 也可以指定为属性,如下所示。
#![feature(custom_inner_attributes)]
#![clippy::msrv = "1.30.0"]
fn main() {
...
}
您还可以在指定 MSRV 时省略补丁版本,因此 msrv = 1.30
等效于 msrv = 1.30.0
。
注意:custom_inner_attributes
是一个不稳定的功能,因此必须显式启用它。
可以识别此配置选项的 lint 可在此处找到
禁用某些代码的评估
注意: 这应该仅在其他解决方案(例如
#[allow(clippy::all)]
)不足时使用。
极少数情况下,您可能希望阻止 Clippy 完全评估代码的某些部分。您可以使用条件编译通过检查是否未设置 clippy
cfg 来执行此操作。您可能需要提供一个存根,以便代码可以编译
#![allow(unused)] fn main() { #[cfg(not(clippy))] include!(concat!(env!("OUT_DIR"), "/my_big_function-generated.rs")); #[cfg(clippy)] fn my_big_function(_input: &str) -> Option<MyStruct> { None } }