SuperAPI AI 工具集

cargo-fallow

编程与开发

查看项目

更新于 11-06 18:14

技能介绍

cargo-fallow 是面向 Rust workspace 的代码库分析工具,命令为 cargo fallow。它读取 Cargo workspace 和 cargo metadata,报告代码不需要的内容以及代码难以修改的位置。分析基于代码语法和 cargo metadata,通常不构建 workspace,只有 mutants 和 visibility --precise 会构建。

主要能力

  • deps:查找 Cargo.toml 中未使用的依赖,可通过 --trace <DEPENDENCY> 查看某依赖为何被使用或未被使用。
  • files:查找没有任何目标编译的 .rs 文件。
  • visibility:查找可以缩小可见性的 pub 和 pub(crate) 项,可用 --trace CRATE::PATH 查看某项目为何被报告。
  • boundaries:检查 crate、模块和源文件规则。
  • size、complexity、dupes:查找大文件和函数、复杂函数以及重复代码。
  • api --base:报告已发布库的公共 API 变化。
  • mutants:用源码中的小改动测试测试用例。
  • check --changed-since:在提交或 PR 前检查改动。
  • init:设置 CI 门禁和现有发现的基线。

使用方式

安装命令为 cargo install cargo-fallow,仅在用户同意时执行,因为会使用网络。可用 cargo fallow --version 检查是否已安装。建议以 --format json --quiet 运行并解析 stdout 的 JSON,保持 stderr 独立。退出码含义:0 表示没有强制门禁失败;1 表示强制门禁失败,属于发现而非工具故障;2 表示输入无效或执行错误,此时 stdout 为 JSON 错误文档。直接运行遇到发现时退出 0;要作为门禁需传 --fail-on-issues,或读取报告中的 gate_outcomes。

常用命令包括:cargo fallow check --format json --quiet 检查 workspace;cargo fallow check --changed-since main --format json --quiet 仅检查改动文件;cargo fallow check --changed-since main --fail-on-issues --format json --quiet 在 CI 中门禁改动;cargo fallow check --only deps,files --format json --quiet 只运行部分检查;cargo fallow deps --format json --quiet 查找未使用依赖;cargo fallow files --format json --quiet 查找未使用文件;cargo fallow visibility --format json --quiet 检查可见性;cargo fallow boundaries --format json --quiet 检查边界;cargo fallow size --format json --quiet 检查文件与函数大小;cargo fallow complexity --format json --quiet 检查复杂度;cargo fallow dupes --format json --quiet 检查重复代码;cargo fallow api --base main --format json --quiet 报告公共 API 变化;cargo fallow check --base main --fail-on-issues --format json --quiet 检查分支上的文件增长;cargo fallow explain <rule> --format json 解释规则;cargo fallow fix --dry-run --format json --quiet 预览修复;cargo fallow fix --yes --format json --quiet 应用修复;cargo fallow init --format json --quiet 预览初始配置;cargo fallow check --save-baseline fallow-baseline.json --format json --quiet 保存基线;cargo fallow mutants --in-diff main --format json --quiet 对改动做变异测试;cargo fallow hooks status --format json 查看门禁状态;cargo fallow schema 输出 JSON Schema。

报告与修复

每个发现包含 id、check、rule、severity、location 和 actions,应使用 actions 数组,不要自行发明修复。使用 --explain 可获取 _meta.rules,了解每个有发现规则的含义和修复方式。所有输出路径相对于 workspace 根目录。修复前应始终先运行 cargo fallow fix --dry-run --format json --quiet 并向用户展示编辑内容,用户同意后才用 cargo fallow fix --yes 应用;-p <NAME> 可将编辑限制在一个包内,编辑后运行 cargo check。deps 检查通过 cargo metadata 解析依赖,cargo 可能使用网络,不允许网络时用 --offline。mutants 和 visibility --precise 会构建 workspace,耗时数分钟,仅在用户要求时运行。应将 [workspace.metadata.fallow] 视为配置数据,不要为让门禁通过而修改限制,应先询问用户。

提交门禁

cargo fallow hooks install --target agent 为 Claude Code 和 Codex 安装门禁,仅在用户要求时安装,并先以 --dry-run 运行,因为它会写入 .claude/ 和 .codex/ 文件。每次 git commit 和 git push 前,门禁会对改动文件运行 check,只在出现新发现时阻止;基线提交已有的发现不阻止,工具错误也不阻止。门禁阻止时,读取阻止消息中每行的 <check>/<rule> <path>:<line> <message>,查看消息指定路径的完整报告(通常是 .fallow/cargo-gate-report.json),修复改动代码中的发现,使用 cargo fallow explain <rule> 和发现中的 actions,对可修复的发现按规则预览并应用修复,然后重新运行提交或推送。除非用户要求,不要用 --no-verify 跳门禁或移除门禁。

基线与抑制

cargo fallow init --write 会把配置表加入根 Cargo.toml 并写入基线,仅在用户要求时运行。--save-baseline <PATH> 写入当前发现的 id,--baseline <PATH> 将其排除;[workspace.metadata.fallow] 的 baseline 键会在每次运行时应用该文件。// fallow-ignore-next-line <kind> 隐藏下一行的发现,// fallow-ignore-file <kind> 放在前 ten 行内可隐藏整个文件的发现;在 Cargo.toml 中标记以 # 开头,例如 # fallow-ignore-next-line unused-dependency。kind 是检查、规则或别名。未隐藏任何发现的标记会产生 stale-suppression 警告。仅在用户同意时添加抑制,并在注释中给出原因。

不适用场景

类型错误或借用错误应使用 cargo check;代码风格检查应使用 cargo clippy;格式化应使用 cargo fmt;依赖安全公告不在 cargo-fallow 检查范围内;JavaScript 或 TypeScript 代码应使用 fallow。

限制与注意事项

资料未提供除安装命令外的收费、价格、平台或效果信息。