4.2 KiB
4.2 KiB
Batch C Worker B:GFM AST 尾项小包
执行日期:2026-05-21 执行人:Reasonix Code (deepseek-v4-flash)
修改文件列表
| 文件 | 操作 | 说明 |
|---|---|---|
rust/crates/mnote-web/src/routes/local_markdown_parser.rs |
编辑 | 新增 2 个解析测试 |
rust/crates/mnote-web/src/routes/local_folder_source.rs |
编辑 | 给 3 个写侧函数加过渡注释 |
rust/crates/mnote-web/src/routes/web_shell.rs |
编辑 | 测试断言扩展 + JS 适配层过渡注释 |
design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md |
编辑 | 更新 checklist 状态 |
.codex/reasonix-tasks/results/batch-c-worker-b-gfm-tail.md |
新建 | 本报告文件 |
关闭/追认的 3-13 尾项
✅ 11.2 空表格单元格 / 空引用块处理规则
- 追加测试
markdown_empty_blockquote_parse:验证>/>输出type=quote, content=[] - 追加测试
markdown_table_empty_cells_parse:验证空表头/数据单元格的paragraph.content为[] - 行为固定为 comrak 默认输出,不再无规则
✅ 11.4 legacy→Tiptap→legacy marks 不丢 marks
document_shell_bootstrap_preserves_inline_mark_conversion原仅断言code/link- 已扩展断言:
bold,italic,underline,strike,code,link全部 6 种 core marks 的 JS 生成代码均存在于 HTML 中
✅ 11.8 web shell 单测:legacy↔Tiptap 不丢 marks
- 同上 — 测试名称不变但断言已补全
✅ 11.9 手写 parser 标记为过渡实现
inline_nodes_to_markdown(local_folder_source.rs:7004):加中文过渡注释editor_blocks_to_markdown_for_file(local_folder_source.rs:6221):加中文过渡注释editor_blocks_to_markdown_with_rewrite(local_folder_source.rs:6393):加中文过渡注释
📌 11.9 web_shell.rs 临时适配分支
- 未删除,但加了过渡注释
// 过渡适配(TODO step-4) - 完整标记了
legacyStylesToTiptapMarks/legacyMarkArrayToTiptapMarks/mergeTiptapMarks/legacyInlineContentToTiptap四函数组的迁移计划
验证命令与结果
命令 1:local_markdown 测试组
cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown -- --test-threads=1
结果:30 passed, 0 failed
新测试确认通过:
routes::local_markdown_parser::tests::markdown_empty_blockquote_parseroutes::local_markdown_parser::tests::markdown_table_empty_cells_parse
命令 2:web_shell 测试组
cargo test --manifest-path rust/Cargo.toml -p mnote-web web_shell -- --test-threads=1
结果:10 passed, 0 failed
核心测试确认通过:
routes::web_shell::tests::document_shell_bootstrap_preserves_inline_mark_conversion
未完成项与风险
未完成项(保持 [ ] 状态)
| 项 | 说明 | 原因 |
|---|---|---|
| 11.2 标题优先级 frontmatter > H1 > 文件名 | 任务明确排除 | 本包不做 frontmatter title 优先级修复 |
| 11.6 降级策略测试 | 仅部分完成 | 列对齐已追认、空单元格已补测试;但 unsupported → paragraph 等降级策略无专项测试 |
| 11.7 保存失败状态保留 | 未触及 | 需要前端侧 error handler + 状态保留测试,属不同责任域 |
| 11.9 web_shell.rs 临时适配分支移除 | 未删除 | 仅加过渡注释 — JS 侧函数仍需等 Step 4 才能移除 |
| 11.9 process→done | 未移动 | 以上 [ ] 项全部关闭后执行 |
风险
- 空单元格解析层 vs 回写层行为可能不一致:解析层测试已验证空的
paragraph.content = [],但回写侧editor_blocks_to_markdown_with_rewrite对空单元格的处理未覆盖测试(它的流程是inline_nodes_to_markdown→ 空字符串 →.trim().to_string()→ 空 →replace('\n', " ")→ 保持空)。建议后续补 save 侧空单元格 round-trip 测试。 - 过渡注释不产生编译期警告:当前使用普通
//注释而非#[deprecated],不会在编译时提醒迁移。如要严格追踪,建议未来 Step 4 前统一加#[deprecated(note = "...")]。 - 新加但未整体编译验证:两个测试组均通过,但未执行
cargo test -p mnote-web全量。局部风险较低。