fix: batch quick-win fixes for #54 #30 #23#76
Conversation
修复 3 个独立 bug:Edit 工具 tab 缩进文件、AskUser 弹窗高度估算偏小、 HITL 弹窗光标移动不滚动。 修改内容: - peri-middlewares/src/tools/filesystem/edit.rs 新增 convert_leading_spaces_to_tabs 和 try_tab_fallback:精确匹配失败 + 文件含 tab 缩进 + 把 old_string 行首 4 空格转 tab 后能在文件中至少匹配一处时启用。new_string 同步转换以保持 文件 tab 风格。replace_all 和单次替换两条路径都接入(issue #54) - peri-tui/src/ui/main_ui/popups/ask_user_height.rs ask_user_content_height 返回前 +3 safety margin:div_ceil 字符级换行 vs ratatui 词级换行的差异 在英文长文本场景经常多 1-2 行;issue #30 已记录 4 次精确估算尝试失败, safety margin 是最稳妥的兜底 - peri-tui/src/app/hitl_prompt.rs HitlBatchPrompt 新增 last_visible_height 和 scroll_offset 字段。move_cursor 内根据 cursor*2(每项 2 行)计算实际 行号,钳位到 [vis/3, vis-1] 区间滚动让光标大致保持在中间(issue #23 症状二) - peri-tui/src/ui/main_ui/popups/hitl.rs render_hitl_popup 改 &mut App, 闭包内读完不可变数据后 drop 借用,写入 last_visible_height;Paragraph ::scroll((scroll_offset, 0)) 应用滚动偏移 特性/影响: - Edit tab fallback 仅在精确匹配失败时启用,命中后用转换字符串走原流程, unique 校验保持不变 - AskUser +3 margin 仅扩大面板不收缩,不破坏现有布局 - HITL scroll 只对光标越界生效,光标在可视区中间时 scroll_offset 不动 - 3 个修复互相独立 Co-Authored-By: Claude claude-sonnet-4.6 <noreply@anthropic.com>
PR Review: fix: batch quick-win fixes for #54 #30 #23总体评价3 个修复都干净,测试覆盖充分。没有发现 bug,有两个小问题。 🟢 #54 Edit 工具 tab fallback — 正确
测试覆盖了:单次替换、replace_all、文件无 tab 不触发、ambiguous 报错、纯函数单测。完整。 🟡 小问题:comment 与代码不一致
let lower = vis / 3;
let upper = vis.saturating_sub(1); // 不是 vis * 2 / 3vis=10 时,注释暗示目标区间 [3, 6],实际是 [3, 9]。代码行为更合理(允许光标在底部 2/3 区域自由移动再触发滚动),但注释会误导后续维护者。建议改注释为"钳位到 [vis/3, vis-1] 区间"。 🟢 #30 AskUser 高度 +3 safety margin — 可接受注释诚实:"多次精确估算尝试均失败,safety margin 是最稳妥的兜底"。 🟢 #23 HITL 弹窗滚动 — 正确borrow split 做法干净:block 内不可变读取 → block 外写入 总结LGTM,可以合入。建议修一下 |
cc-claws review #76 指出:注释写"钳位到 [vis/3, vis*2/3] 区间", 但实际 upper = vis.saturating_sub(1),所以区间是 [vis/3, vis-1]。 vis=10 时注释暗示 [3, 6],实际是 [3, 9]。代码行为合理但注释误导。 修改内容: - peri-tui/src/app/hitl_prompt.rs 改注释为"钳位到 [vis/3, vis-1] 区间" 特性/影响: - 仅注释修正,无行为变化 Co-Authored-By: Claude claude-sonnet-4.6 <noreply@anthropic.com>
|
@cc-claws 已修,commit
|
Summary
3 个独立 UI/工具 bug quick-win 修复:Edit 工具 tab 缩进文件、AskUser 弹窗高度估算偏小、HITL 弹窗光标移动不滚动。
convert_leading_spaces_to_tabs和try_tab_fallback。精确匹配失败 + 文件含 tab 缩进 + 把old_string行首 4 空格转 tab 后能在文件中至少匹配一处时启用 fallback;new_string同步转换以保持文件 tab 风格。replace_all和单次替换两条路径都接入。ask_user_content_height返回前 +3 safety margin。div_ceil字符级换行 vs ratatui 词级换行的差异在英文长文本场景经常多 1-2 行;issue 已记录 4 次精确估算尝试失败,safety margin 是最稳妥的兜底。HitlBatchPrompt新增last_visible_height和scroll_offset字段。move_cursor根据cursor*2(每项渲染 2 行:tool 名 + 参数预览)计算实际行号,钳位到[vis/3, vis-1]区间滚动让光标大致保持在中间。render_hitl_popup渲染时记录inner.height到 prompt,应用Paragraph::scroll((scroll_offset, 0))。Test plan
cargo check -p peri-tui -p peri-middlewares通过cargo test -p peri-middlewares --lib tools::filesystem::edit— 21/21 passed(含 5 个新增 tab fallback 测试)cargo test -p peri-middlewares --lib tools::filesystem— 109/109 passedcargo test -p peri-tui --lib hitl::— 2/2 passedFixes #54
Fixes #30
Fixes #23