casoon/judge
GitHub: casoon/judge
judge 是一个面向 Rust 工作区的代码库智能分析 Cargo 子命令,在跨 crate、跨 git 历史等维度上提供可复现的代码质量评估与 CI 判定。
Stars: 0 | Forks: 0
# judge
## 概述
`judge` 用于分析 Rust 工作区(workspace)的复杂度、代码重复、依赖规范性、架构边界、所有权、冗余信号(slop signals)以及基于 git 的高频修改区域(hotspots)。它被构建为一个 Cargo 子命令(二进制文件 `cargo-judge`),既可以作为 `cargo judge` 运行,也可以作为独立的 `cargo-judge` 运行。
其指导原则是:任何编译器或 Clippy 已经提示过的内容,`judge` 都不会重复。它涵盖了 crate 边界之上、跨 git 历史的维度,或者是聚合了多种工具的综合内容。
## 状态
早期阶段。Fast Tier(无需构建,基于 `syn` 和 `gix`)以及 Deep Tier 的第一部分(基于 rust-analyzer,在 `deep` Cargo feature 之后)已经实现:
- `cargo judge` — 汇总所有无需额外配置的检测器的发现结果,按严重程度由高到低排序
- `cargo judge inspect` — 通过 `cargo metadata` 检测到的 crate、源文件和入口点
- `cargo judge health [--score]` — 圈复杂度(cyclomatic complexity)、git 热点区域、语法级别的冗余信号,以及可选的健康评分(见下文)
- `cargo judge dupes --mode strict|mild|weak|semantic` — 将重复的 token 跨度分组为克隆家族
- `cargo judge deps [--check-crates-io]` — 依赖类型的规范性检查以及本地命名冲突检查;crates.io 查询(`phantom-crate`、`phantom-version`、`fresh-low-reputation-dep`)是可选的(opt-in),因为 judge 默认不进行任何网络调用
- `cargo judge boundaries` — 基于可选的 `judge.toml` 配置的 crate 边界,以及依赖循环检测
- `cargo judge distribution` — 基于 git blame 的所有权和巴士因子(bus-factor)分析发现
- `cargo judge audit --since REF` — 限定于某个提交之后引入的发现结果的 pass/warn/fail 判定;需要预先保存的 baseline
- `cargo judge dead-code [--include-tests]` — Deep Tier 功能,需要 `--features deep`(见下文)
- `cargo judge explain --why-live` — Deep Tier 功能,需要 `--features deep`(见下文)
- `--format json|sarif|markdown` — 所有报告命令均支持带版本控制的 JSON,生成报告的命令支持 SARIF 2.1.0,`audit`/`--baseline` 的差异比较支持 Markdown(适用于 PR 评论)
- `--save-baseline` / `--baseline PATH` — 保存发现结果,或将其与 baseline 进行比较
尚未实现:模块级别的边界(目前仅有 crate 级别)、几项计划中的可维护性和依赖规范性规则,以及 MCP 服务器。
## 健康评分
`cargo judge health --score` 会打印一个 0–100 的分数以及字母等级(A ≥90,B ≥80,C ≥70,D ≥60,F 为 60 以下)。扣分基于严重程度进行加权,并根据原创代码行数(authored-LOC)密度进行标准化;每个 crate 的加权配置可通过 `judge.toml` 开启。
客观局限性:
- 该分数是一个可配置的趋势指标,而不是客观的质量排名。相对于 baseline 的变化量(delta)才是核心信息,而不是绝对的数值。
- 只有在使用 `--baseline PATH` 时才会显示趋势,并且只有当 baseline 是使用相同的评分公式版本和相同的 crate 配置生成时才会显示。否则,系统会明确报告为“不可比较”,而不会显示错误的偏差值。
- 当没有计算评分的依据时(例如没有原创代码行),该分数将被报告为不可用,并且 judge 会以退出码 2 退出 —— 绝不会给出虚假的满分。
## 深度 Tier (`--features deep`)
Deep Tier 会将工作区加载到 rust-analyzer(`ra_ap_ide`、`ra_ap_load-cargo`)中,以处理真实的引用数据,而不是基于语法的猜测。构建它会编译 `ra_ap_*` crate,这比默认构建耗时明显更长。
- `cargo judge dead-code [--include-tests]` — 报告 `unused-pub-workspace`:即那些没有被其他工作区 crate 引用,**且**没有从自身 crate 的已识别入口点可达的 `pub` 项。这意味着“在当前检查视图中未发现使用”,并不代表已被证明是死代码。`--include-tests` 会将仅在 `#[test]` 中的引用算作使用(默认关闭)。发现结果会带有证据(根集大小、已搜索的 crate、置信度原因),以便您自行判断其可信度。
- `cargo judge explain --why-live` — 从已识别的入口点(二进制文件/示例中的 `fn main`;带 `--include-tests` 时的测试和基准测试;以及始终作为入口的 `#[no_mangle]`/`#[export_name]`/`#[wasm_bindgen]`)到目标项的最短且带证据的调用路径。每条边都被分类为 `static`/`dynamic`/`macro`/`generated`/`unknown`。
已知限制:加载工作区时没有使用 proc-macro 服务器,也没有运行构建脚本,因此由 proc macro 或 `build.rs` 生成的代码对分析是不可见的。通用注册宏也无法被识别 —— 一个只能通过此类宏触达的项可能会被报告为未使用。
## 为什么选择 judge
- 确定性的发现结果,不仅对人类易读,对编程代理(coding agents)同样友好
- 不是 linter,不是 formatter,也不是安全扫描器 —— 它是对 Clippy/cargo-audit 的补充,而不是替代
- 无 SaaS,无遥测,无需账号
## 安装
需要 Rust 1.95+(2024 edition)。
### 从源码构建
```
git clone https://github.com/casoon/judge.git
cd judge
cargo build --release
./target/release/cargo-judge --help
```
### cargo install (本地路径)
```
cargo install --path . --force
```
## 用法
```
cargo judge # combined findings, worst first
cargo judge inspect # crates, entry points, detected tiers
cargo judge dupes --mode mild # duplicated token spans (clone families)
cargo judge deps --format json # dependency findings as JSON
cargo judge health --score # health score, 0-100 + letter grade
cargo judge --save-baseline # save .judge/baseline.json
cargo judge --baseline .judge/baseline.json
cargo judge audit --since origin/main # pass/warn/fail verdict for a PR
cargo judge dead-code # Deep Tier — binary must be built with --features deep
```
## 来源归属 (Provenance Attribution)
`cargo judge provenance` 将代码变动(churn)、重复和抑制债务(suppression debt)进行细分
根据启发式分类的作者类别(如提交尾注/标记
如 `Co-authored-by: Claude`,或配置的 `[[provenance_label]]`)。它是
可选的(opt-in) — 不是纯粹的 `cargo judge` 的一部分 — 并且总是会打印以下警告:
## 开发
```
cargo build
cargo test
cargo test --features deep # includes the Deep Tier (slow first build)
```
可选的 Cargo feature:
| Feature | 增加的功能 | 构建命令 |
|---|---|---|
| `deep` | 基于 rust-analyzer 的深度分析层(`ra_ap_ide`、`ra_ap_load-cargo`) | `cargo build --features deep` |
## 许可证
MIT,详见 [LICENSE](LICENSE)。
标签:Rust, 云安全监控, 代码复杂度, 依赖管理, 可视化界面, 死代码检测, 网络流量审计, 通知系统, 静态分析