Skip to content

feat: add diff preview for MultiEdit, Write, and ApplyPatch in TUI#69

Merged
yishuiliunian merged 1 commit intomainfrom
feat/tool-display-diff-preview
Apr 3, 2026
Merged

feat: add diff preview for MultiEdit, Write, and ApplyPatch in TUI#69
yishuiliunian merged 1 commit intomainfrom
feat/tool-display-diff-preview

Conversation

@yishuiliunian
Copy link
Copy Markdown
Contributor

Summary

  • Add colored diff previews for MultiEdit (iterate edits array), Write (content preview as green + lines), and ApplyPatch (parse patch text for ***/+/- lines)
  • Extract diff_style.rs (shared diff visualization primitives: DiffResult, semantic colors, removed_line/added_line, fold_indicator)
  • Extract output_format.rs from mod.rs to separate dispatch from output formatting, freeing 34 lines of headroom

Changes

  • crates/loopal-tui/src/views/progress/tool_display/diff_style.rsnew (91 lines)
  • crates/loopal-tui/src/views/progress/tool_display/output_format.rsnew (38 lines)
  • crates/loopal-tui/src/views/progress/tool_display/apply_patch.rsnew (80 lines)
  • crates/loopal-tui/src/views/progress/tool_display/edit.rs — refactored to use diff_style, added render_multi_edit_body
  • crates/loopal-tui/src/views/progress/tool_display/write.rs — enhanced with content preview via render_diff_lines
  • crates/loopal-tui/src/views/progress/tool_display/mod.rs — register new modules, split Edit/MultiEdit dispatch

Test plan

  • bazel build //crates/loopal-tui:loopal-tui passes
  • bazel build //crates/loopal-tui:loopal-tui --config=clippy zero warnings
  • bazel build //crates/loopal-tui:loopal-tui --config=rustfmt passes
  • bazel test //crates/loopal-tui:loopal-tui_test passes
  • CI passes

Previously only the Edit tool rendered colored diff previews in the
tool display. MultiEdit read top-level old_string/new_string (missing
for its edits-array schema), Write showed only bytes written, and
ApplyPatch fell through to the default renderer.

- Extract diff visualization primitives into diff_style.rs (DiffResult,
  semantic colors, removed_line/added_line, fold_indicator)
- Extract generic output formatting into output_format.rs to free
  mod.rs headroom for future tool dispatch
- MultiEdit: iterate edits array with shared budget, aggregate diff
- Write: content preview via render_diff_lines("", content, max)
- ApplyPatch: parse patch text for ***/+/- lines, colored rendering
@yishuiliunian yishuiliunian merged commit e6b6072 into main Apr 3, 2026
3 checks passed
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