You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Rust包项目Clippy配置:生产禁panic,测试允许assert_*

解决方案

1. 对全代码库执行Clippy检查

你的项目属于Rust多包工作区结构,只需完成两步配置,就能用单条命令实现全代码库lint:

步骤1:配置工作区

在根目录的Cargo.toml中添加工作区声明,列出所有子包路径:

[workspace]
members = [
    ".",          # 根目录的Rust库
    "ffi",        # ffi下的C库
    "ffi/common",
    "ffi/python",
    "ffi/ruby",
]

步骤2:执行全量lint命令

运行以下命令,即可覆盖所有包的生产代码、测试代码、示例等所有目标:

cargo clippy --all-targets --all-features
  • --all-targets:包含所有构建目标(库、二进制、测试、示例等)
  • --all-features:启用所有包的特性开关(若无需全特性,可移除该参数)

如果想简化命令,可在根Cargo.toml中添加别名:

[alias]
lint = "clippy --all-targets --all-features"

之后只需运行cargo lint即可完成全量检查。

2. 区分生产/测试代码的panic相关规则

要实现生产代码禁用panic、测试代码允许assert_*宏,无需在代码中添加Clippy属性,只需在根目录集中配置规则:

方式1:通过根Cargo.toml配置

在根目录的Cargo.toml中添加工作区级别的Clippy配置,所有子包会自动继承:

[workspace.clippy]
# 生产代码禁用所有panic相关行为
deny = [
    "panic",
    "unwrap_used",
    "expect_used",
    "panic_in_result_fn",
]

# 测试代码允许这些规则
[workspace.clippy.'cfg(test)']
allow = [
    "panic",
    "unwrap_used",
    "expect_used",
    "panic_in_result_fn",
]

方式2:通过根clippy.toml配置

若偏好独立的lint配置文件,在根目录创建clippy.toml,内容如下:

# 生产代码规则
panic = "deny"
unwrap_used = "deny"
expect_used = "deny"
panic_in_result_fn = "deny"

# 测试代码专属规则
[cfg(test)]
panic = "allow"
unwrap_used = "allow"
expect_used = "allow"
panic_in_result_fn = "allow"

说明

  • assert_*宏本质会触发panic,允许panic规则后,测试代码中的assert_eq!、assert!等宏不会被Clippy报错
  • 上述规则覆盖了常见的panic触发场景:直接调用panic!、使用unwrap/expect、在返回Result的函数中panic

验证

运行cargo clippy --all-targets后:

  • 生产代码中出现panic!、unwrap()等行为会被Clippy拒绝
  • 测试代码中的assert_*宏及测试专属的unwrap/expect操作会被允许

内容的提问来源于stack exchange,提问作者csmathhc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.07 06:12:33