留下决定12 / 20
看见意图覆盖
本页内容
这个软件,你心里有数的部分有多少?意图覆盖用一张图回答:每个代码文件一个方块,按模块排开,颜色越深,被说明引用的行越多。哪里还是空白、哪里的说明已经过时,一眼就能看到。指向一篇意图,它覆盖的文件就亮起来。
打开意图覆盖
新建一个对话,发送第一条消息之前,消息区显示的就是意图覆盖卡片。也可以打开“设置 → 意图覆盖”(在当前项目一组里),卡片会铺满整个页面,看大项目更方便。
意图覆盖需要实现文件夹是一个 Git 仓库。项目还没有覆盖结果时,卡片显示“尚未计算”,提供两个入口:“解释”先让 Agent 写出说明,“现在计算”按现有的说明立即计算。大仓库需要读取全部文件,可能要等一会儿。
之后每次解释结束,卡片自动更新。标题行右侧显示最近一次解释结束的时间和当时的提交号,旁边的按钮可以重新计算。
读懂卡片
卡片最上方是一个大数字:被说明引用到的行,占范围内全部代码行的比例。旁边的“3 / 6 文件”是有意图对应的文件数和文件总数。
下面的进度条分三段,图例写在下方:
- 被引用的行:实心段,长度和比例一致。
- 解释已过时:斜纹段,这些文件在说明写成之后改过。
- 没有意图对应:空白,没有任何说明引用这些文件。
按模块看
“模块”区默认以点阵显示:一个文件一个点,按目录分组成行。有意图对应的点,被引用的行占比越高,颜色越深;解释已过时的点带斜纹;没有意图对应的点是空的。指向一个点,显示文件名和被引用的比例。
右上角可以切换为条形:每个模块一行,条长按行数等比,条内按三种状态分段。
点击一个模块进入它的下一层,标题行出现上一级按钮和路径。比如订阅服务里 billing、jobs、notify、web 四行排开,notify 一行几乎全空:通知邮件的规则还没有写进意图。
按意图看
模块区下方是意图列表,每篇意图文档一行,按文档树缩进,后面一条短线表示它对应的文件数。还没有任何代码对应的文档,名字变灰,短线为空。
- 指向一篇文档:模块区里与它无关的行变淡,布局不变。
- 点选一篇文档:无关的行收起,进度条和点阵只显示这篇意图对应的代码,模块标题下方出现带 × 的文档名芯片。
- 再点一次、点芯片的 ×,或按
Esc,取消点选。
例如点选《续费》,模块区只剩 billing/grace.ts、jobs/renewal-job.ts 和几个测试文件。你立刻知道,改续费规则会动到哪里。
怎样理解这个数字
覆盖率说的是说明引用了多少代码,不是代码质量,也不是测试覆盖率。它帮你回答两个问题:
- 哪里还没有意图:空白的模块,要么是不重要的代码,要么是你还没想清楚、却已经在运行的规则。后者值得写一段意图,再让 Agent 解释。
- 哪里的说明过时了:斜纹多的地方,最近改动多、说明没跟上,见代码变了之后。
覆盖率不必追求 100%。从你最在意的部分开始,让它们先变深。
Parnas Index
“设置 → Parnas Index”从另一面看同一件事:代码改动牵动了多少意图。名字来自 David Parnas 的模块划分原则:好的模块把一项可能变化的决策藏在自己内部。在 Noea 里,一段意图近似一项决策,一个代码文件近似一个模块。
页面顶部的大数字,是平均每改动一个文件,要重新核对的意图段数,旁边写着完整检查了多少段、其中多少没有变化。数字越大,说明一处改动牵连的决策越多。时间窗可选 7 天、30 天或 90 天。
页面有两个视图:
| 视图 | 层级 | 列 |
|---|---|---|
| 这段代码牵动多少意图 | 文件、定义 | 牵动意图、改动、每次牵动、没有变化 |
| 这部分意图被多少代码牵动 | 文档、片段 | 引用文件、代码改动、意图改动、没有变化 |
点击一行就地展开:文件行显示它被说明引用的比例、牵动最多的意图,以及“在意图覆盖中查看”;意图行显示它引用了几个文件、最常牵动它的代码,以及打开这段意图的入口。
第一个视图的文件层级下方有一张“覆盖与牵动”散点图:横轴是被说明引用的行占比,纵轴是每次改动牵动的意图段数。右上角的文件被引用得很密,又常被改动,一改就要核对很多意图,值得想想能否拆开。覆盖越高不一定越好。
项目还没有关联实现文件夹时,这两个页面都会提示先到“设置 → 项目”关联。