feat: 0.9.3 单文件视图文本搜索与稳健性收尾 - 工具栏搜索框(Ctrl+F聚焦/大小写不敏感即时命中计数/Enter与Shift+Enter命中行循环跳转复用activeRowId受控定位/行内命中子串高亮含词级segs行/Esc清空;基于全量行与仅看差异独立、折叠命中行跳转toast提示不推进)、扫描缓存落盘promise链串行化(并发读改写不再覆盖丢LRU目录对)、快照对照变迁过滤计数归零自动复位、重新选择扫描中保持可用固化测试(与返回文件对比同类发起新会话作废在途扫描)、依赖patch级升级,新增21单测用例与E2E搜索链路用例(564单测+E2E 24全过,覆盖率98.27/93.47/94.01/98.27),文档四件套同步
This commit is contained in:
+10
-2
@@ -53,8 +53,16 @@ function loadScanCacheStore(): ScanCacheStoreData {
|
||||
/**
|
||||
* 落盘扫描缓存(读-改-写,异步 fire-and-forget):
|
||||
* 失败静默(目录只读/磁盘满等,跨会话增量记忆失效不影响本次结果)。
|
||||
* 写操作经内存 promise 链串行执行(每次追加到链尾):两次扫描近乎同时
|
||||
* 完成时各自的读-改-写按序落盘,避免后写整体覆盖先写丢失 LRU 目录对。
|
||||
*/
|
||||
async function persistScanCache(
|
||||
let scanCacheWrites: Promise<void> = Promise.resolve()
|
||||
|
||||
function persistScanCache(leftDir: string, rightDir: string, cache: ScanCacheEntry[]): void {
|
||||
scanCacheWrites = scanCacheWrites.then(() => writeScanCache(leftDir, rightDir, cache))
|
||||
}
|
||||
|
||||
async function writeScanCache(
|
||||
leftDir: string,
|
||||
rightDir: string,
|
||||
cache: ScanCacheEntry[]
|
||||
@@ -331,7 +339,7 @@ ipcMain.handle(
|
||||
: {})
|
||||
})
|
||||
// 扫描成功且未截断:缓存异步落盘(LRU,失败静默;下次启动同目录对可增量重扫)
|
||||
if (!result.truncated) void persistScanCache(leftDir, rightDir, result.cache)
|
||||
if (!result.truncated) persistScanCache(leftDir, rightDir, result.cache)
|
||||
return result
|
||||
} catch {
|
||||
// 目录不存在/不可读等:转为错误标记,渲染端提示
|
||||
|
||||
Reference in New Issue
Block a user