design expand gfm parser migration checklist
This commit is contained in:
+83
@@ -201,3 +201,86 @@
|
||||
- AST -> block / inline 映射接口冻结。
|
||||
- 当前手写 parser 的临时补丁有对应回归测试。
|
||||
- 浏览器 smoke 能稳定证明 task list 和 inline mark 真正渲染出来。
|
||||
|
||||
## 11. 详细 checklist
|
||||
|
||||
### 11.1 选型与边界冻结
|
||||
|
||||
- [ ] 确认 Rust 侧 Markdown AST 解析器选型。
|
||||
- [ ] 明确是否需要 GitHub Flavored Markdown 全集,还是只保留当前本地链路所需的 GFM 子集。
|
||||
- [ ] 冻结 frontmatter 处理方式:解析器只解析正文,还是 frontmatter 也由同一模块统一处理。
|
||||
- [ ] 冻结 AST 输出到中间 IR 的边界,不直接在 AST 层拼 `PageAggregate`。
|
||||
- [ ] 明确 table、task list、inline mark、fenced code、attachment link 的优先级。
|
||||
- [ ] 明确不支持语法的降级策略,要求可解释且可测试。
|
||||
|
||||
### 11.2 AST -> 中间 IR
|
||||
|
||||
- [ ] 建立 `MarkdownAstDocument` / 等价中间结构。
|
||||
- [ ] 建立 block 级节点映射:paragraph / heading / list / task / quote / code / divider / table / media。
|
||||
- [ ] 建立 inline 级节点映射:text / code / bold / italic / strike / underline / link。
|
||||
- [ ] 保证 task list 的 checked 状态进入正确的 task item 节点,而不是外层 list 节点。
|
||||
- [ ] 保证表格单元格内的 inline mark 不丢失。
|
||||
- [ ] 保证空段落、空表格单元格、空引用块的处理规则固定。
|
||||
- [ ] 统一处理标题优先级:frontmatter title > H1 > 文件名。
|
||||
|
||||
### 11.3 中间 IR -> PageAggregate / block document
|
||||
|
||||
- [ ] 把 AST 到 `PageAggregate.body.content` 的映射集中到单一模块。
|
||||
- [ ] 消除 `local_folder_source.rs` 里散落的手写语法分支。
|
||||
- [ ] 让 block document 输出保持与 `web_shell.rs` 兼容。
|
||||
- [ ] 保留 block id 稳定性,避免刷新后整篇文档重建导致的局部状态抖动。
|
||||
- [ ] 保留 frontmatter 原文和页面设置写回边界。
|
||||
- [ ] 对 unsupported 节点采用明确降级,而不是静默丢语义。
|
||||
|
||||
### 11.4 Inline mark 双向转换
|
||||
|
||||
- [ ] `code` 解析为 inline code mark。
|
||||
- [ ] `bold` 解析为 strong mark。
|
||||
- [ ] `italic` 解析为 emphasis mark。
|
||||
- [ ] `strike` 解析为 strike mark。
|
||||
- [ ] `link` 解析为带 href 的 link mark。
|
||||
- [ ] 保存回写时按同一映射反向输出 Markdown。
|
||||
- [ ] 确保 table cell 内的 inline mark 在读写两端都保留。
|
||||
- [ ] 确保 legacy block -> Tiptap -> legacy block 不再丢 marks。
|
||||
|
||||
### 11.5 Task list 双向转换
|
||||
|
||||
- [ ] `- [x]` / `- [X]` 进入 checked task item。
|
||||
- [ ] `- [ ]` 进入未勾选 task item。
|
||||
- [ ] task item 文本内容走 inline IR,不走纯文本拼接。
|
||||
- [ ] Tiptap 的 `taskList` / `taskItem` 与 legacy `todo` 对应关系固定。
|
||||
- [ ] 保存回写时 task item 重新输出为标准 Markdown checkbox 语法。
|
||||
- [ ] 浏览器 smoke 断言 checked / unchecked 两种状态都出现。
|
||||
|
||||
### 11.6 Table 处理
|
||||
|
||||
- [ ] 统一 pipe table 解析规则。
|
||||
- [ ] 单元格内容通过 inline IR 输出,不再只保留纯文本。
|
||||
- [ ] 表头 / 普通单元格类型在 AST 映射中保持稳定。
|
||||
- [ ] 保存回写时保留表格分隔行和列数对齐。
|
||||
- [ ] 列对齐、空单元格、带 mark 单元格的降级策略要写入测试。
|
||||
|
||||
### 11.7 保存回写
|
||||
|
||||
- [ ] 保存链路只依赖 block document / editor document,不依赖 Markdown 手写规则。
|
||||
- [ ] 前端编辑器保存路径仍能写回 `.md`。
|
||||
- [ ] task list、inline mark、table 的回写结果可再次被 AST 解析器读回。
|
||||
- [ ] 保留 frontmatter `title` / `mnote_id` / 页面设置写回逻辑。
|
||||
- [ ] 保存失败时保留编辑器状态并给出可解释错误。
|
||||
|
||||
### 11.8 回归测试
|
||||
|
||||
- [ ] `local_markdown` 测试组覆盖基础块、task list、inline marks、table、附件链接。
|
||||
- [ ] 新增 AST 解析器单测,验证解析结果和当前手写 parser 预期一致或更强。
|
||||
- [ ] 新增保存回写单测,验证 round-trip 不丢 task / marks。
|
||||
- [ ] 新增 web shell 单测,验证 legacy <-> Tiptap 转换不丢 marks。
|
||||
- [ ] 新增浏览器 smoke,验证 checkbox、code、strong、em、strike、link、table cell marks。
|
||||
- [ ] 确认本地 `.md` 读写 smoke 不影响 file tree / page tree / page aggregate 路由。
|
||||
|
||||
### 11.9 清理与迁移收尾
|
||||
|
||||
- [ ] 把手写 parser 标记为过渡实现。
|
||||
- [ ] 移除 `local_folder_source.rs` 中不再需要的临时解析函数。
|
||||
- [ ] 移除 `web_shell.rs` 中只为补丁存在的临时适配分支。
|
||||
- [ ] 保留回归测试和兼容层,不删除验证资产。
|
||||
- [ ] 迁移完成后把设计稿状态从 `process` 移到 `done`。
|
||||
|
||||
Reference in New Issue
Block a user