94 lines
4.2 KiB
Markdown
94 lines
4.2 KiB
Markdown
# 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` 测试组
|
||
|
||
```bash
|
||
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_parse`
|
||
- `routes::local_markdown_parser::tests::markdown_table_empty_cells_parse`
|
||
|
||
### 命令 2:`web_shell` 测试组
|
||
|
||
```bash
|
||
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 | 未移动 | 以上 [ ] 项全部关闭后执行 |
|
||
|
||
### 风险
|
||
|
||
1. **空单元格解析层 vs 回写层行为可能不一致**:解析层测试已验证空的 `paragraph.content = []`,但回写侧 `editor_blocks_to_markdown_with_rewrite` 对空单元格的处理未覆盖测试(它的流程是 `inline_nodes_to_markdown` → 空字符串 → `.trim().to_string()` → 空 → `replace('\n', " ")` → 保持空)。建议后续补 save 侧空单元格 round-trip 测试。
|
||
2. **过渡注释不产生编译期警告**:当前使用普通 `//` 注释而非 `#[deprecated]`,不会在编译时提醒迁移。如要严格追踪,建议未来 Step 4 前统一加 `#[deprecated(note = "...")]`。
|
||
3. **新加但未整体编译验证**:两个测试组均通过,但未执行 `cargo test -p mnote-web` 全量。局部风险较低。
|