Skip to content

fix(converter): Todo 嵌套子项导入丢失与导出未缩进#69

Open
azbh111 wants to merge 1 commit intoriba2534:mainfrom
azbh111:fix/todo-nested-children
Open

fix(converter): Todo 嵌套子项导入丢失与导出未缩进#69
azbh111 wants to merge 1 commit intoriba2534:mainfrom
azbh111:fix/todo-nested-children

Conversation

@azbh111
Copy link
Copy Markdown

@azbh111 azbh111 commented Mar 29, 2026

Summary

  • 修复 Todo 列表项的嵌套子列表导入时丢失(子项未收集为 Children)
  • 修复 Todo 嵌套子项导出时被当作独立顶层块(未缩进)

Background

convertListItem 中 TaskCheckBox 分支直接返回 &BlockNode{Block: block},未收集 ListItem 下嵌套的子列表;导出侧 BlockTypeTodo 未加入子块收集逻辑,convertTodo 不支持缩进递归。

输入 Markdown:

- [ ] 父任务
    - [ ] 子任务 1
    - [ ] 子任务 2

修复前导入:子任务丢失,只有父任务;导出时子任务变成独立顶层块。
修复后:子任务作为 Children 正确嵌套,导出时正确缩进。

Changes

文件 改动说明
internal/converter/markdown_to_block.go 3 处 TaskCheckBox 分支调用新增的 collectNestedChildren 收集嵌套子列表(正确传递 error);extractTextElementsSkipCheckbox 跳过 ast.List 防止子列表文本渗入父项
internal/converter/block_to_markdown.go BlockTypeTodo 加入子块收集逻辑(与 Bullet/Ordered 一致);新增 convertTodoWithDepth 支持缩进递归处理嵌套子项
internal/converter/todo_nesting_test.go 新增 3 个测试用例

Test Plan

常规检查

  • go build ./... 编译通过
  • go vet ./... 静态检查通过
  • go clean -testcache && go test ./... 全部测试通过

新增用例

用例 覆盖场景
TestTodoNestedChildren_Import Todo 嵌套子项导入后正确收集为 Children,独立任务无子项
TestTodoNestedChildren_Export Todo 嵌套子项导出时正确缩进(2 空格)
TestTodoNestedChildren_Roundtrip Todo 嵌套子项 Markdown → Block → Markdown 往返一致性

真实文档验证

使用以下 Markdown 进行真实飞书文档导入/导出验证:

# Todo 嵌套子项测试

- [ ] 父任务1
  - [ ] 子任务1-1
  - [x] 子任务1-2
- [x] 父任务2
  - [ ] 子任务2-1
  - [ ] 子任务2-2
  - [x] 子任务2-3
- [ ] 独立任务(无子项)

验证步骤:

  1. go run . doc import /tmp/todo_test.md --title "Todo 嵌套测试" --verbose 导入
  2. go run . doc blocks <doc_id> --all --output json 检查云端块结构,确认:
    • 父任务1 的 children 包含 子任务1-1(done=false)和 子任务1-2(done=true)
    • 父任务2 的 children 包含 子任务2-1、子任务2-2(done=false)和 子任务2-3(done=true)
    • 独立任务无 children
  3. go run . doc export <doc_id> 导出,确认嵌套缩进和勾选状态与原始 Markdown 一致

验证结果:3 项全部通过。

导入侧:convertListItem 的 TaskCheckBox 分支未收集嵌套子列表,
extractTextElementsSkipCheckbox 未跳过 ast.List 导致子列表文本渗入父项。

导出侧:BlockTypeTodo 未加入子块收集逻辑,convertTodo 不支持缩进递归。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant