| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(editor): 照文档逐条按键,修掉两组静默失效的快捷键 问的是"文档里说的快捷键你能测吗",于是照 src/lib/shortcuts.ts 逐条按了一遍。结论是 25 条都能测——同时发现两组功能一直是死的,根因同一个:按键注册在 Lexical 优先级的 **最后一档**。 1. InsertShortcutPlugin(Ctrl+Alt+1/2/3/U/O/T/Q/C/L/M 共 10 条,文档「编辑器」组)把 KEY_DOWN_COMMAND 注册在 COMMAND_PRIORITY_EDITOR。Lexical 的队列是 CRITICAL > HIGH > NORMAL > LOW > **EDITOR(最后一档)**,而 Lexical 自己那支 $handleKeyDown(由 RichTextPlugin 在 **layout effect** 里装进编辑器)就在那一档, 且对**每一次** keydown 都 return true。插件在 useEffect(被动 effect,永远晚于 layout effect)里注册,于是永远排在它后面——同档的后来者一次都收不到事件。用户按 Ctrl+Alt+1 的表现是"什么都没发生"。改用 COMMAND_PRIORITY_LOW(与已经在用的 SlashMenuPlugin / ImagePastePlugin 一致)。 2. PageLinkSuggestPlugin 踩的是同一个档:[[ 菜单的 ↑/↓/Enter/Esc 全收不到,菜单开着 时按 Enter 不是选中候选而是换行——菜单等于只能用鼠标点。同因同修。 3. 顺手修掉斜杠菜单的分组标题重复:菜单按"同组相邻"推断标题(option.group !== lastGroup 才插一条),而后来追加的「帮助」落在「表格」之后,收尾顺序成了 …嵌入 → 基础 → 嵌入 → 引用,于是菜单里「基础」「嵌入」各出现两次(React 还报 duplicate key)。把这两条挪回 各自的分组块,分组改成连续。 测试(25 条全覆盖,都断言行为而不是"注册成功"): - insertShortcut.test.ts:真编辑器 + 真 dispatchCommand(KEY_DOWN_COMMAND, …),十条逐条 断言 preventDefault 与块类型/标签,外加守卫(带 Shift、缺 Alt 不许抢)。坑记一笔: handled **不能**当作"插件认领了"的证据——Lexical 那支总归会 return true,能区分 "我们认领"与"被吞掉"的只有 defaultPrevented。 - editorInputShortcuts.test.ts:Markdown 行首语法**逐字输入**(一次输入整串会被 Lexical "只处理刚敲的那一个字符"的启发式跳过,探针踩过一次)、/ 斜杠菜单(含分组标题不重复)、 Ctrl+F 查找条、空行空格开 AI(含"有字的行不许抢")、[[ 菜单 ↓/Enter 插入。 - overlayShortcuts.test.ts:Ctrl+K 开合命令面板、Esc 关浮层。 - src/lib/shortcutCoverage.test.ts(闸门):清单每一条都必须指到一个**真存在**的用例 (映射表里的用例标题要去那个文件里真的找得到,且在 it(...) 里);InsertShortcutPlugin 的 if (key === "x") 分支与文档「编辑器」组**双向**一一对应;src/editor/plugins 下不许 再把 KEY_DOWN_COMMAND 注册到 EDITOR 档。三条都用植入式变异实测过:加一条没人测的快捷键、 改掉被指到的用例标题、给插件加一条文档外的分支,闸门逐条报出来。 - src/test/lexicalWarnings.ts:只静音 Lexical dev 构建那条 updateEditorSync 警告(用 只挂 Lexical 自带 MarkdownShortcutPlugin 的探针确认过:不挂本仓库任何插件也照样打), 其余警告原样透出。 为什么此前没拦住:这两组功能**注册成功、清单也一致**,当时的全部检查(vitest 纯函数、 tsc、cargo test、门禁、作者 CLI)都不看它们有没有真的收到事件。 验证:vitest 294(+26,37 文件)、tsc、smoke-web 350、pnpm build、cargo test 165 全绿。 | 1 个月前 | |
test(frontend): markdown→Lexical round-trip 单测 + happy-dom 测试环境(83→88 断言) - mdPreview.markdownToPageContent:5 断言(纯 markdown/列表/代码块/空输入/block HTML 路由)——这是「markdown round-trip 立项」的完整往返(detached editor,经 / ) - vitest 环境 node → happy-dom(import 链含 store 模块级 DOM 副作用) - src/test/setup.ts 兜底 localStorage shim | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 |