2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2017年12月22日 |
---|---|
0.1.0 | 2016年6月26日 |
#1503 在 过程宏 中
每月 48 次下载
2KB
Clippy
一组用于捕获常见错误并改进您的 Rust 代码的代码检查。
代码检查分为类别,每个类别都有一个默认的 代码检查级别。您可以通过更改类别中的代码检查级别来选择Clippy应该有多大的帮助。
类别 | 描述 | 默认级别 |
---|---|---|
clippy::all |
默认开启的所有代码检查(正确性、可疑、风格、复杂性、性能) | warn/deny |
clippy::correctness |
完全错误或无用的代码 | deny |
clippy::suspicious |
很可能错误或无用的代码 | warn |
clippy::style |
应该用更符合习惯的方式编写的代码 | warn |
clippy::complexity |
以复杂方式完成简单任务的代码 | warn |
clippy::perf |
可以编写得更快运行的代码 | warn |
clippy::pedantic |
相当严格或有时有误报的代码检查 | allow |
clippy::restriction |
防止使用语言和库特性的代码检查[^限制] | allow |
clippy::nursery |
还在开发中的新代码检查 | allow |
clippy::cargo |
用于cargo清单的代码检查 | allow |
敬请期待,如果您有任何想法,请提交一个issue!
restriction
类别应该绝对不应该整体启用。其中包含的lint可能会对完全合理的代码进行检查,可能没有替代建议,并且可能与任何其他lint(包括其他类别)相矛盾。启用之前,应逐个案例考虑。
[^restrict]:restriction
lint的一些用例包括:- 严格的编码风格(例如clippy::else_if_without_else
)。- CI上的附加限制(例如clippy::todo
)。- 防止某些函数中的panic(例如clippy::unwrap_used
)。- 仅在代码子集上运行lint(例如在模块上使用#[forbid(clippy::float_arithmetic)]
)。
目录
使用方法
以下是作为cargo子命令使用Clippy、在未使用cargo的项目中或Travis CI中的说明。
作为cargo子命令(cargo clippy
)
使用Clippy的一种方法是通过rustup将其作为cargo子命令安装。
步骤1:安装Rustup
您可以在支持的平台上安装Rustup。这将帮助我们安装Clippy及其依赖项。
如果您已经安装了Rustup,请更新以确保您有最新的Rustup和编译器
rustup update
步骤2:安装Clippy
一旦您安装了rustup和最新的稳定版本(至少Rust 1.29),请运行以下命令
rustup component add clippy
如果它说找不到clippy
组件,请运行rustup self update
。
步骤3:运行Clippy
现在您可以通过以下命令调用Clippy
cargo clippy
自动应用Clippy建议
Clippy可以像编译器一样自动应用一些lint建议。请注意,--fix
意味着--all-targets
,因此它可以修复尽可能多的代码。
cargo clippy --fix
工作区
所有常规工作区选项都应与Clippy一起使用。例如,以下命令将在example
crate上运行Clippy
cargo clippy -p example
与cargo check
一样,这包括工作区成员的依赖项,如路径依赖项。如果您只想在指定的crate上运行Clippy,请使用--no-deps
选项,如下所示
cargo clippy -p example -- --no-deps
使用clippy-driver
Clippy也可以在不使用cargo的项目中使用。要这样做,请使用与rustc
相同的参数运行clippy-driver
。例如
clippy-driver --edition 2018 -Cpanic=abort foo.rs
请注意,clippy-driver
是为仅运行Clippy而设计的,不应用作rustc
的一般替代品。clippy-driver
可能产生的工件可能无法按预期优化,例如。
Travis CI
您可以通过与本地使用相同的方式将Clippy添加到Travis CI中
language: rust
rust:
- stable
- beta
before_script:
- rustup component add clippy
script:
- cargo clippy
# if you want the build job to fail when encountering warnings, use
- cargo clippy -- -D warnings
# in order to also check tests and non-default crate features, use
- cargo clippy --all-targets --all-features -- -D warnings
- cargo test
# etc.
请注意,添加 -D 警告
将会导致您的构建失败,如果您的代码中存在任何警告。这包括 rustc 发现的警告(例如,dead_code
等)。如果您想避免这种情况,并且只想对 Clippy 警告引发错误,请在您的代码中使用 #![deny(clippy::all)]
,或在命令行上使用 -D clippy::all
。(您可以将 clippy::all
与您要针对的具体 lint 类别进行交换。)
配置
允许/拒绝 lint
您可以在代码中添加选项来 allow
/ warn
/ deny
Clippy lints
-
使用
clippy
lint 组(#![deny(clippy::all)]
)来允许整个Warn
lints 集合。请注意,rustc
有额外的 lint 组。 -
使用
clippy
和clippy::pedantic
lint 组(#![deny(clippy::all)]
,#![deny(clippy::pedantic)]
)允许所有 lint。注意,clippy::pedantic
包含一些非常激进的 lint,容易出现误报。 -
只允许某些 lint(例如,
#![deny(clippy::single_match, clippy::box_vec)]
等) -
使用
#[allow(...)]
等限制allow
/warn
/deny
到单个函数或模块。
注意:allow
表示抑制您的代码中的 lint。使用 warn
时,lint 将仅发出警告,而使用 deny
时,lint 将在触发您的代码时发出错误。错误会导致 Clippy 以错误代码退出,因此在 CI/CD 等脚本中非常有用。
如果您不想在代码中包含您的 lint 级别,您可以在运行 Clippy 时通过传递额外的标志来全局启用/禁用 lints
要允许 lint_name
,运行
cargo clippy -- -A clippy::lint_name
要警告 lint_name
,运行
cargo clippy -- -W clippy::lint_name
这也可以与lint组一起工作。例如,你可以运行Clippy,对所有lint启用警告
cargo clippy -- -W clippy::pedantic
如果你只关心一个lint,你可以允许所有其他lint,然后明确警告你感兴趣的lint(s)
cargo clippy -- -A clippy::all -W clippy::useless_format -W clippy::...
配置一些lint的行为
一些lint可以在名为clippy.toml
或.clippy.toml
的TOML文件中进行配置。它包含基本的变量 = 值
映射,例如。
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"]
注意
clippy.toml
或.clippy.toml
不能用于允许/拒绝lint。
要禁用“进一步信息请访问 lint-link”消息,你可以定义CLIPPY_DISABLE_DOCS_LINKS
环境变量。
指定最小支持的Rust版本
打算支持旧版Rust的项目可以通过在Clippy配置文件中指定最小支持的Rust版本(MSRV)来禁用与新特性相关的lint。
msrv = "1.30.0"
或者,可以使用Cargo.toml
中的rust-version
字段。
# Cargo.toml
rust-version = "1.30"
MSRV也可以像下面这样作为属性指定。
#![feature(custom_inner_attributes)]
#![clippy::msrv = "1.30.0"]
fn main() {
...
}
在指定MSRV时,你也可以省略补丁版本,所以msrv = 1.30
等同于msrv = 1.30.0
。
注意:custom_inner_attributes
是一个不稳定的功能,因此必须明确启用。
可以在此处找到识别此配置选项的lint:here
贡献
如果你想为Clippy做出贡献,你可以在CONTRIBUTING.md中找到更多信息。
许可证
版权所有 2014-2024 Rust项目开发者
根据Apache许可证第2版(<LICENSE-APACHE或https://www.apache.org/licenses/LICENSE-2.0>)或MIT许可证(<LICENSE-MIT或https://opensource.org/licenses/MIT>)进行许可,由你选择。项目中的文件不得根据这些条款以外的条款进行复制、修改或分发。