Skip to content

Commit c8cf30b

Browse files
committed
Fix rewrite for smaller new-tests
1 parent c7b1f27 commit c8cf30b

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

eca-rewrite.el

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ MODEL is the LLM model used."
133133
(overlay-put ov 'eca-rewrite--id id)
134134
(overlay-put ov 'eca-rewrite--original-text text)
135135
(overlay-put ov 'eca-rewrite--new-text nil)
136+
(overlay-put ov 'eca-rewrite--new-text-acc "")
136137
(overlay-put ov 'eca-rewrite--temp-buffer (generate-new-buffer "*eca-rewrite*"))
137138
(overlay-put ov 'eca-rewrite--path path)
138139
(overlay-put ov 'eca-rewrite--prompt prompt)
@@ -287,7 +288,7 @@ MODEL is the model used."
287288
(pcase eca-rewrite-diff-tool
288289
('simple-diff (eca-rewrite--simple-diff ov))
289290
('ediff (eca-rewrite--ediff ov))
290-
(_ (user-error (format "Unknown diff tool for `eca-rewrite-diff-tool': %s" eca-rewrite-diff-tool)))))
291+
(_ (user-error (concat "Unknown diff tool: " eca-rewrite-diff-tool)))))
291292

292293
(defun eca-rewrite--retry (ov session)
293294
"Retry rewrite overlay OV for SESSION."
@@ -346,25 +347,27 @@ PATH is the optional file path."
346347

347348
(defun eca-rewrite--add-text (ov text)
348349
"Add TEXT as the rewritten content to overlay OV.
349-
This updates the overlay's associated temporary buffer with the new text,
350-
sets overlay properties, and ensures display reflects the latest content."
351-
(let ((ov-buf (overlay-buffer ov))
352-
(temp-buf (overlay-get ov 'eca-rewrite--temp-buffer)))
350+
This replaces the overlay preview entirely with the accumulated new text,
351+
so shorter rewrites don't leave leftover original text in the overlay."
352+
(let* ((ov-buf (overlay-buffer ov))
353+
(temp-buf (overlay-get ov 'eca-rewrite--temp-buffer))
354+
(mode (and ov-buf (buffer-local-value 'major-mode ov-buf)))
355+
(acc (concat (overlay-get ov 'eca-rewrite--new-text-acc) text)))
356+
(overlay-put ov 'eca-rewrite--new-text-acc acc)
353357
(with-current-buffer temp-buf
354-
(let ((inhibit-modification-hooks nil)
355-
(inhibit-read-only t))
356-
(when (= 0 (buffer-size))
357-
(buffer-disable-undo)
358-
(insert-buffer-substring ov-buf (overlay-start ov) (overlay-end ov))
359-
(delay-mode-hooks (funcall (buffer-local-value 'major-mode ov-buf)))
360-
(add-text-properties (point-min) (point-max) '(face shadow font-lock-face shadow))
361-
(goto-char (point-min)))
362-
(insert text)
363-
(unless (eobp)
364-
(ignore-errors (delete-char (length text))))
358+
(let ((inhibit-read-only t)
359+
(inhibit-modification-hooks t))
360+
(erase-buffer)
361+
(insert acc)
362+
(when mode
363+
(delay-mode-hooks (funcall mode)))
365364
(font-lock-ensure))
366-
(overlay-put ov 'eca-rewrite--new-text (buffer-string))
367-
(overlay-put ov 'display (buffer-string)))))
365+
(let ((plain (buffer-substring-no-properties (point-min) (point-max)))
366+
(propertized (buffer-substring (point-min) (point-max))))
367+
(overlay-put ov 'eca-rewrite--new-text plain)
368+
;; Display only the rewritten content; the overlay spans the entire
369+
;; original region, so any leftover original text is fully hidden.
370+
(overlay-put ov 'display propertized)))))
368371

369372
;; Public
370373

0 commit comments

Comments
 (0)