Clippy 检查
cargo xtask clippy 是 axbuild 对整个 TGOSKits workspace 执行静态检查的统一入口。它不是简单地 cargo clippy --workspace:因为 workspace 中混合了 host 端 bin 工具、#![no_std] 内核 crate 和需要特定 target/feature 的 OS 包,直接全量 clippy 会大量误报。clippy 模块针对每个包按其声明的 feature 矩阵和 docs.rs metadata.targets 展开成多个 ClippyCheck,再以 fail-fast 方式逐一运行,把结果收敛成可读报告。
1. 执行架构
Clippy 先从 workspace metadata 选择 package,再将 package 的 target 与 feature 展开为独立 check;每个 check 最终以 -D warnings 执行。下图描述 run_workspace_clippy_command() 到进程执行器的调用关系。
2. 模块职责
Clippy 的代码按选择、展开、执行和报告划分,避免参数解析与 Cargo 调用耦合。下表给出维护某类行为时应修改的模块。
| 代码位置 | 作用 |
|---|---|
scripts/axbuild/src/clippy/mod.rs | CLI 入口、模块级常量(如 AXSTD_STD_*、AX_HAL_PACKAGE) |
scripts/axbuild/src/clippy/selection.rs | 参数校验、包选择(全量 / --package / --since 增量)、不支持的包过滤 |
scripts/axbuild/src/clippy/check.rs | ClippyCheck / ClippyCheckKind / ClippyDepsMode 数据模型与 cargo_args 构造 |
scripts/axbuild/src/clippy/configurations.rs | 解析并校验 package metadata 中声明的命名 target 配置 |
scripts/axbuild/src/clippy/expand.rs | 把每个包按 feature × target 展开为 ClippyCheck 列表 |
scripts/axbuild/src/clippy/env.rs | 为特殊 check 计算所需环境变量;普通包当前不额外注入环境变量 |
scripts/axbuild/src/clippy/targets.rs | 从 docs.rs metadata 提取包支持的 target,以及 feature↔target 兼容性判断 |
scripts/axbuild/src/clippy/runner.rs | CargoRunner trait 与 ProcessCargoRunner,fail-fast 执行 |
scripts/axbuild/src/clippy/report.rs | ClippyRunReport 聚合与人类可读报告 |
scripts/axbuild/src/clippy/timing.rs | 起止时间记录与耗时打印 |
scripts/axbuild/src/clippy/tests.rs, tests/ | 展开与选择逻辑的回归测试 |
3. 包选择
ClippyArgs 提供三种互斥的包选择模式,由 validate_clippy_args 强制约束: