#clippy #lint #configuration #style #suggestions #improve #catch

nightly scout-audit-clippy-config

Clippy 配置重新发布,以供 scout-audit-clippy-utils 使用

1 个不稳定版本

0.1.76 2024 年 3 月 18 日

1082开发工具

Download history 628/week @ 2024-04-07 593/week @ 2024-04-14 307/week @ 2024-04-21 293/week @ 2024-04-28 911/week @ 2024-05-05 426/week @ 2024-05-12 47/week @ 2024-05-19 34/week @ 2024-05-26 19/week @ 2024-06-02 192/week @ 2024-06-09 51/week @ 2024-06-16 65/week @ 2024-06-23 83/week @ 2024-06-30 153/week @ 2024-07-07 65/week @ 2024-07-14 15/week @ 2024-07-21

每月 321 次下载
2 个 crate 中使用(通过 scout-audit-clippy-utils

MIT/Apache

47KB
786

Clippy

Clippy Test License: MIT OR Apache-2.0

一个用于捕捉常见错误并改进你的 Rust 代码的代码检查集合。

此 crate 包含超过 700 个代码检查!

代码检查分为类别,每个类别都有一个默认的 代码检查级别。您可以通过按类别更改代码检查级别来选择 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 防止使用语言和库功能的代码检查[^restrict] allow
clippy::nursery 仍在开发中的新代码检查 allow
clippy::cargo cargo 清单的代码检查 allow

更多功能即将推出,如果您有想法,请 提交一个 issue

应明确不整体启用 restriction 类别。包含的代码检查可能针对完全合理的代码进行检查,可能没有替代建议,并且可能与其他代码检查(包括其他类别)冲突。在启用之前应逐个考虑代码检查。

【限制】以下是一些使用 restriction 检查的用例:- 严格的编码风格(例如 clippy::else_if_without_else)。- CI 的附加限制(例如 clippy::todo)。- 防止某些函数中发生恐慌(例如 clippy::unwrap_used)。- 仅在代码子集上运行检查(例如,在模块上运行 #[forbid(clippy::float_arithmetic)])。


目录

使用方法

以下是关于如何在项目中使用 Clippy 作为 cargo 子命令、在不使用 cargo 的项目中或是在 Travis CI 中使用的说明。

作为 cargo 子命令(cargo clippy

使用 Clippy 的方法之一是通过 rustup 安装 Clippy 作为 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 可以像编译器一样自动应用一些检查建议。请注意,--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.

请注意,如果您的代码中存在任何警告(包括由 rustc 检测到的警告,例如 dead_code 等),添加 -D warnings 会导致构建失败。如果您想避免这种情况,并且只想为 Clippy 警告产生错误,请在您的代码中使用 #![deny(clippy::all)] 或在命令行中使用 -D clippy::all。 (您可以将 clippy::all 与您要针对的具体 lint 类别进行交换。)

配置

允许/拒绝 lint

您可以通过向您的代码中添加选项来允许/警告/拒绝 Clippy 的 lint

  • 使用 clippy lint 组(#![deny(clippy::all)])允许整个 Warn lint 组。请注意,rustc 还有额外的 lint 组

  • 使用 clippyclippy::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 时传递额外的标志来全局启用/禁用 lint。

要允许 lint_name,运行

cargo clippy -- -A clippy::lint_name

要警告 lint_name,运行

cargo clippy -- -W clippy::lint_name

这同样适用于 lint 组。例如,您可以在所有启用 lint 的警告下运行 Clippy。

cargo clippy -- -W clippy::pedantic

如果您只关心单个代码风格问题,您可以允许所有其他问题,然后显式地警告您感兴趣的问题。

cargo clippy -- -A clippy::all -W clippy::useless_format -W clippy::...

配置某些代码风格问题的行为

一些代码风格问题可以在名为 clippy.toml.clippy.toml 的 TOML 文件中进行配置。它包含基本的 变量 = 映射,例如:

avoid-breaking-exported-api = false
disallowed-names = ["toto", "tata", "titi"]

配置表 包含所有配置值、它们的默认值以及它们影响的代码风格问题列表。每个 可配置的代码风格问题 也包含有关这些值的信息。

对于具有默认值的列表类型配置,如 禁止的名称,您可以使用唯一的值 ".." 来扩展默认值,而不是替换它们。

# default of disallowed-names is ["foo", "baz", "quux"]
disallowed-names = ["bar", ".."] # -> ["bar", "foo", "baz", "quux"]

注意

clippy.toml.clippy.toml 不能用于允许或拒绝代码风格问题。

要禁用“更多信息请访问 lint-link”消息,您可以定义 CLIPPY_DISABLE_DOCS_LINKS 环境变量。

指定最低支持的 Rust 版本

旨在支持旧版 Rust 的项目可以通过在 Clippy 配置文件中指定最低支持的 Rust 版本(MSRV)来禁用与较新功能相关的代码风格问题。

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.30msrv = 1.30.0 等效。

注意:custom_inner_attributes 是一个不稳定的功能,因此必须显式启用。

可以在此 找到识别此配置选项的代码风格问题。

贡献

如果您想为 Clippy 做出贡献,您可以在 CONTRIBUTING.md 中找到更多信息。

许可协议

版权所有 2014-2024 Rust 项目开发者

根据 Apache License 2.0 <LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0> 或 MIT 许可证 <LICENSE-MIT 或 https://opensource.org/licenses/MIT> 授权,您可选择其一。项目中的文件不得根据这些条款进行复制、修改或分发。

依赖关系

~0.6–1.2MB
~27K SLoC