Block a user
🔴 P0 | 所有 #[uniffi::export] 函数迁移到 out-pointer FFI 方式
Swift 侧完成 (2026-06-06)
修改
iOS zx_document.swift 全部 Swift 函数已更新为 out-pointer FFI:
- detectMaterialType、readImageMeta、readTextStats、parseText →…
🔴 P0 | 所有 #[uniffi::export] 函数迁移到 out-pointer FFI 方式
🟡 P2 | search.rs 文本搜索每次循环创建新子串
🟢 P3 | ComrakOptions<'static> 生命周期强制转换过于脆弱
🟢 P3 | parse_markdown_separate 多余的 String clone
审查结论 (2026-06-06)
结论
to_string() 是必要的:crate::parse_markdown() 的 FFI 签名要求 String(UniFFI #[uniffi::export] 不允许 &str)。新增内部函数…
🟢 P3 | parse_markdown_separate 多余的 String clone
🟡 P2 | epub.rs / pdf.rs 空模块 — 仅注释无实现
审查结论 (2026-06-06)
结论
epub.rs: EPUB 解析已在 M5 里程碑规划中,当前是占位模块pdf.rs: iOS 已有 PDFKit/QuickLook 做平台预览,PDF 文本提取不…
🟡 P2 | epub.rs / pdf.rs 空模块 — 仅注释无实现
🟡 P2 | 两套 DocumentBlock 类型 + 双向手动 From impl
审查结论 (2026-06-06)
结论
两套 DocumentBlock 的 From impl 是 UniFFI 的常见模式(core 使用 named fields for Serialize, FFI 使用 tuple variants for UniFFI…
🟡 P2 | 两套 DocumentBlock 类型 + 双向手动 From impl
🟡 P2 | search.rs 文本搜索每次循环创建新子串
审查结论 (2026-06-06)
结论
search_text 的 lower[start..].find() 每次迭代创建新子串,在极长文档中可能有性能影响。但对于知识库场景的典型文本长…
🟡 P2 | events.rs Mutex 投毒后静默丢事件
修复完成 (2026-06-06)
实现
push_reading_event 改用 match 替代 if let,Mutex poison 时通过 into_inner() 恢复缓冲区。
状态
✅ 已修复。
🟢 P3 | ComrakOptions<'static> 生命周期强制转换过于脆弱
审查结论 (2026-06-06)
结论
gfm_options() 已显式标注 ComrakOptions<'static>,由于 broker_link_callback 为 None,生命周期强制转换安全。即使 comrak…