rust-clippy

rust-clippy

Rust代码静态分析工具 助力提升代码质量

Clippy是Rust语言的静态代码分析工具,提供超过700个lint规则,用于检测常见错误和优化代码。它可作为cargo子命令运行,支持自动修复建议。Clippy将规则分类,允许用户按需调整lint级别。此外,Clippy支持自定义配置和指定最低兼容的Rust版本。作为开源项目,Clippy为Rust开发者提供了有力的代码质量保障工具。

ClippyRust代码检查lint静态分析Github开源项目

Clippy

Clippy 测试 许可证: MIT 或 Apache-2.0

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

该 crate 包含超过 700 个 lint!

Lint 被分为多个类别,每个类别都有默认的 lint 级别。 你可以通过改变每个类别的 lint 级别来选择 Clippy 应该多大程度地烦扰帮助你。

类别描述默认级别
clippy::all所有默认开启的 lint(正确性、可疑、风格、复杂度、性能)warn/deny
clippy::correctness完全错误或无用的代码deny
clippy::suspicious很可能是错误或无用的代码warn
clippy::style应该以更符合惯例的方式编写的代码warn
clippy::complexity以复杂方式完成简单任务的代码warn
clippy::perf可以写得更快的代码warn
clippy::pedantic较为严格或偶尔会有误报的 lintallow
clippy::restriction限制使用语言和库特性的 lint1allow
clippy::nursery仍在开发中的新 lintallow
clippy::cargo针对 cargo manifest 的 lintallow

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

restriction 类别绝对不应整体启用。其中包含的 lint 可能会对完全合理的代码进行检查,可能没有替代建议,并且可能与其他 lint(包括其他类别)相矛盾。在启用之前,应该逐个考虑这些 lint。


目录:

使用

以下是如何将 Clippy 作为 cargo 子命令使用的说明,适用于不使用 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 # 如果你希望在遇到警告时构建作业失败,请使用 - cargo clippy -- -D warnings # 为了同时检查测试和非默认的 crate 特性,使用 - cargo clippy --all-targets --all-features -- -D warnings - cargo test # 等等

注意,添加 -D warnings 将导致在代码中发现任何警告时构建失败。 这包括由 rustc 发现的警告(如 dead_code 等)。如果你想避免这种情况,只对 Clippy 警告引发错误, 请在代码中使用 #![deny(clippy::all)] 或在命令行中使用 -D clippy::all。 (你可以将 clippy::all 替换为你针对的特定 lint 类别。)

配置

允许/拒绝 lint

你可以在代码中添加选项来 allow/warn/deny Clippy lint:

  • 使用 clippy lint 组(#![deny(clippy::all)])来处理整个 Warn lint 集合。 注意 rustc 有额外的 lint 组

  • 使用 clippyclippy::pedantic 两个 lint 组的所有 lint(#![deny(clippy::all)]#![deny(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,对所有启用的 lint 发出警告:

cargo clippy -- -W clippy::pedantic

如果您只关心单个 lint,可以允许所有其他 lint,然后明确对您感兴趣的 lint 发出警告:

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,您可以使用特殊值 ".." 来扩展默认值,而不是替换它们。

# disallowed-names 的默认值为 ["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。

贡献

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

许可证

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

根据 Apache 许可证 2.0 版 <LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0> 或 MIT 许可证 <LICENSE-MIT 或 https://opensource.org/licenses/MIT> 授权, 由您选择。除非符合这些条款,否则不得复制、修改或分发项目中的文件。

Footnotes

  1. restriction lint 的一些使用场景包括:

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多