Clippy 的 Lint

Clippy 提供了一系列额外的 lint,以帮助其用户编写更正确和符合 Rust 惯例的代码。可以在 Clippy lint 文档中找到所有 lint 的完整列表,该列表可以按类别、lint 级别或关键字进行过滤。

本章将概述不同的 lint 类别,它们提供哪些类型的 lint,以及当您看到该类别中的 lint 时建议采取的措施。有关示例,请参阅Clippy lint 文档并按类别进行筛选。

不同的 lint 分组在 Clippy 1.0 RFC 中定义。

正确性

clippy::correctness 组是 Clippy 中唯一默认拒绝且在触发时中止编译的 lint 组。这样做是有充分理由的:如果您看到 correctness lint,则表示您的代码完全错误或无用,您应该尝试修复它。

此类别中的 lint 经过仔细挑选,应避免出现误报。因此,不建议简单地使用 #[allow] 来忽略这些 lint。

可疑

clippy::suspicious 组与 correctness lint 类似,它包含在代码确实可疑并且应该修复时触发的 lint。与 correctness lint 相反,可能会出现被 lint 的代码是故意这样编写的情况。

仍然建议修复此组中 lint 标记的代码,而不是使用 #[allow] 来忽略 lint。如果您有意编写了违反 lint 的代码,则应专门且局部地使用 #[allow] 忽略该 lint,并说明为什么代码按编写方式是正确的。

复杂性

clippy::complexity 组提供的 lint 会为您提供有关如何简化代码的建议。它主要关注可以用更短、更易读的方式编写的代码,同时保留语义。

如果您看到复杂性 lint,通常表示您可以删除或替换某些代码,建议这样做。但是,如果您出于某种表达原因需要更复杂的代码,则建议在具体情况下允许复杂性 lint。

性能

clippy::perf 组会为您提供有关如何提高代码性能的建议。这些 lint 主要关于编译器无法轻松优化的代码,但必须以稍微不同的方式编写才能使优化器更容易工作。

性能 lint 通常很容易应用,建议这样做。

风格

clippy::style 组主要关注编写符合惯例的代码。由于风格是主观的,因此此 lint 组是 Clippy 中最主观的默认警告组。

如果您看到风格 lint,应用建议通常会使您的代码更具可读性和符合惯例。但是,由于我们知道这是主观的,因此可以在您的代码中自由使用 #[allow] 来忽略风格 lint,或者如果您完全不同意建议的风格,则可以在整个 crate 中使用 #![allow] 来忽略风格 lint。

吹毛求疵

clippy::pedantic 组使 Clippy 更加吹毛求疵。您可以在 crate 的 lib.rs/main.rs 中使用 #![warn(clippy::pedantic)] 启用整个组。此 lint 组适用于想要深入检查其代码的 Clippy 高级用户。

注意: 您可能希望从 pedantic 组中挑选 lint,而不是启用整个组(例如 Clippy 本身所做的)。

如果您启用此组,请准备好在整个代码中大量使用 #[allow] 属性。此组中的 lint 被设计为吹毛求疵,有时为了防止漏报而故意出现误报。

限制

clippy::restriction 组包含将限制您使用 Rust 语言某些部分的 lint。建议启用整个组,而是挑选对您的代码库和用例有用的 lint。

注意: 如果 Clippy 在您的代码中找到 #![warn(clippy::restriction)] 属性,它将生成一个警告!

此组中的 lint 将以某种方式限制您。如果您为您的 crate 启用了一个限制 lint,建议同时修复此 lint 触发的代码。但是,这些 lint 在设计上非常严格,您可能希望在某些特殊情况下使用 #[allow] 来忽略它们,并提供注释说明原因。

Cargo

clippy::cargo 组为您提供有关如何改进 Cargo.toml 文件的建议。如果您想发布您的 crate 并且不确定您的 Cargo.toml 中是否包含所有有用的信息,这可能会特别有趣。