🐛 修复网站匹配/排除重置后清空列表(应回落脚本自带规则)#1579
Conversation
|
PR 当前针对“重置匹配规则”的修复方向是正确的。 当 不过审查时发现,同一根因下还有一条遗漏路径:逐条删除规则,直到列表为空。 原来的实现中,删除最后一项后会调用: setMatchList(kind, [])这里传给后端的是空数组,而不是 但前端此时仍显示空列表,并写入 已在 const override = next?.length ? next : undefined这样,无论是点击重置,还是逐条删除到空列表,都会走相同的“删除覆盖并回落原始 metadata”逻辑。 修复过程按照仓库的 TDD 规范进行:先补充失败用例,复现“删除最后一项后前端显示为空,但后端已经回落原始规则”的问题,再修改实现。新增测试为:
另外还发现几处同类问题,但与本 PR 的修改范围关系较弱,因此没有一并处理,只建议后续单独跟进:
|
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@CodFrm 那4个交给你了 |
Checklist / 检查清单
Description / 描述
脚本设置 → 网站匹配 / 排除,点击「重置」时列表被整个清空,连脚本自带的
@match/@exclude规则也一并消失。根因(
SettingsPane.tsx的setMatchList):重置按钮调用setMatchList(kind, undefined)。后端resetMatch/resetExclude(uuid, undefined)会删除用户覆盖(selfMetadataUpdate传空集即删除该 key),使生效列表回落到脚本自带的metadata.match/metadata.exclude。但前端用next ?? [],重置时把可见列表置空并写入selfMetadata[kind] = [],与后端持久化结果不一致,导致脚本自带规则也被隐藏。修复:前端乐观更新对齐后端
selfMetadataUpdate语义——重置时把可见列表回落到脚本自带的metadata值并删除覆盖,而非置空为[]。新增 / 删除路径(传入真实数组)行为不变。测试(TDD,先写失败用例再修):
SettingsPane.test.tsx全量 27/27 通过;ESLint、tsc --noEmit均无报错。Screenshots / 截图
N/A(逻辑修复,无 UI 视觉变化)