haruhi
d990c10e59
feat(diff): 折叠行异步展开状态机与内容切片
- src/client/api.ts: 仿 gitCommitDiff 新增 gitShow 封装,走既有 git.show 服务路由(payload {rev, path},返回 content 或 null),服务端零改动
- src/client/diff/rows.ts: 新增 foldRowsFromContents 纯函数——old 侧按 fold 行号切片为 context 行(new 侧经区间偏移映射,落界才带行号),new 侧补纯增行;越界截断、\r 保留
- src/client/diff/DiffRows.tsx: 新增 resolveFold prop;foldData/foldLoading/foldFailed 三态,加载中不可点,失败降级静态标记;foldEpoch 使 segments 重置后 in-flight 回调失效
- src/client/diff/DiffFiles.tsx: resolveFold 下传各文件 DiffRows,fold 级 Promise 缓存去重并发点击与重挂载
- tests/diff-rows.spec.ts: foldRowsFromContents 六用例(对称/纯删/纯增/\r\n/空内容/越界)
背景:git -U3 不输出 hunk 间未改动行,gap fold 只有行号范围没有 rows,渲染复用「点击展开」文案却无交互;展开能力建为独立状态机(含 api 封装),git lens 只需注入取数 loader。
设计 docs/plans/2026-09-07-git-fold-expand-design.md §4.1-4.4。
2026-09-07 23:51:06 +08:00
..
2026-09-03 20:00:08 +08:00
2026-09-06 23:48:25 +08:00
2026-09-01 16:01:34 +08:00
2026-09-07 23:51:06 +08:00
2026-09-04 20:28:35 +08:00
2026-09-03 20:18:10 +08:00
2026-09-07 23:51:06 +08:00
2026-08-11 11:16:36 +08:00
2026-08-21 23:49:13 +08:00
2026-08-15 01:37:39 +08:00
2026-08-24 18:40:04 +08:00
2026-08-29 15:31:05 +08:00
2026-09-03 20:29:59 +08:00
2026-09-03 19:59:00 +08:00
2026-09-03 20:00:08 +08:00
2026-08-08 01:02:24 +08:00
2026-08-21 01:28:17 +08:00
2026-08-31 01:31:22 +08:00
2026-08-11 11:16:36 +08:00
2026-09-04 22:08:02 +08:00
2026-08-31 01:31:22 +08:00
2026-09-04 22:08:02 +08:00
2026-08-22 22:50:13 +08:00
2026-09-04 20:28:35 +08:00
2026-09-06 10:37:53 +08:00
2026-08-31 17:52:59 +08:00
2026-08-10 16:54:13 +08:00
2026-09-04 22:08:02 +08:00
2026-09-03 20:29:59 +08:00
2026-09-02 23:13:57 +08:00
2026-09-03 12:05:29 +08:00
2026-08-21 23:41:33 +08:00
2026-09-04 22:08:02 +08:00
2026-09-03 20:00:08 +08:00
2026-08-15 15:05:06 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-06 23:06:18 +08:00
2026-09-02 23:15:19 +08:00
2026-08-24 12:05:14 +08:00
2026-09-03 20:00:08 +08:00
2026-08-30 23:42:16 +08:00
2026-09-06 23:06:18 +08:00
2026-09-03 09:56:31 +08:00
2026-09-04 20:28:35 +08:00
2026-08-24 12:05:14 +08:00
2026-09-02 09:14:59 +08:00
2026-08-18 01:22:28 +08:00
2026-08-28 04:20:36 +08:00
2026-09-03 19:59:00 +08:00
2026-08-14 14:53:03 +08:00
2026-08-22 23:19:17 +08:00
2026-08-22 23:19:17 +08:00
2026-09-02 23:13:57 +08:00
2026-08-11 11:22:28 +08:00
2026-09-03 12:05:29 +08:00
2026-08-10 16:46:01 +08:00
2026-09-03 20:00:08 +08:00
2026-08-26 21:40:32 +08:00
2026-08-22 23:19:17 +08:00
2026-09-03 19:59:00 +08:00
2026-09-03 19:59:00 +08:00
2026-09-03 19:59:00 +08:00
2026-09-01 15:58:44 +08:00
2026-08-24 01:36:29 +08:00
2026-09-06 23:46:46 +08:00
2026-08-14 18:29:31 +08:00
2026-08-11 19:28:48 +08:00
2026-08-13 01:39:59 +08:00
2026-09-03 20:00:08 +08:00
2026-09-03 20:00:08 +08:00
2026-08-16 16:24:28 +08:00
2026-09-03 19:59:00 +08:00
2026-09-04 22:08:02 +08:00
2026-09-03 21:09:20 +08:00
2026-08-22 23:19:17 +08:00
2026-09-03 20:18:10 +08:00
2026-09-01 16:01:34 +08:00
2026-08-31 23:28:20 +08:00
2026-09-03 20:35:59 +08:00
2026-08-26 18:33:02 +08:00
2026-09-02 23:26:04 +08:00
2026-09-03 12:05:41 +08:00
2026-09-03 12:05:41 +08:00
2026-09-03 12:05:41 +08:00
2026-08-13 09:06:55 +08:00
2026-09-03 20:35:59 +08:00
2026-08-26 21:40:32 +08:00
2026-09-04 20:28:35 +08:00
2026-08-29 15:49:35 +08:00
2026-09-03 20:00:08 +08:00
2026-09-03 19:59:00 +08:00
2026-09-06 22:59:56 +08:00
2026-08-16 16:37:11 +08:00
2026-08-21 01:28:17 +08:00
2026-09-04 22:08:02 +08:00
2026-09-04 22:08:02 +08:00
2026-08-20 18:28:57 +08:00
2026-08-20 18:28:57 +08:00
2026-09-03 20:35:59 +08:00
2026-08-21 01:28:17 +08:00