]> git.eshelyaron.com Git - emacs.git/commitdiff
(refactor-backend-read-replacement): Provide live feedback
authorEshel Yaron <me@eshelyaron.com>
Sat, 18 Jan 2025 17:04:55 +0000 (18:04 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sat, 18 Jan 2025 17:04:55 +0000 (18:04 +0100)
lisp/progmodes/refactor.el

index 5ffa83a7f4cdfff41e603e26a2b6152908fe2ba7..c4fc2ec5f8cf85371f36e6258bc5ce1560625cad 100644 (file)
@@ -184,27 +184,42 @@ Otherwise, if the replacement is valid, return nil."
         (push (cons (match-beginning 0) (match-end 0)) regions)))
     regions))
 
+(declare-function track-changes-register "track-changes")
+(declare-function track-changes-fetch    "track-changes")
+
 (cl-defgeneric refactor-backend-read-replacement (backend old scope)
   "Read a replacement for identifier OLD across SCOPE using BACKEND."
-  (pcase-dolist (`(,beg . ,end)
-                 (refactor-backend-rename-highlight-regions backend old scope))
-    (let ((ov (make-overlay beg end)))
-      (overlay-put ov 'refactor-rename-old t)
-      (overlay-put ov 'face 'lazy-highlight)))
-  (unwind-protect
-      (let ((new nil)
-            (invalid nil))
-        (while (not new)
-          (setq new (read-string (format "%sRename \"%s\" across %s to: "
+  (let (ovs)
+    (pcase-dolist (`(,beg . ,end)
+                   (refactor-backend-rename-highlight-regions backend old scope))
+      (let ((ov (make-overlay beg end)))
+        (overlay-put ov 'face 'lazy-highlight)
+        (push ov ovs)))
+    (unwind-protect
+        (let ((new nil) (invalid nil))
+          (while (not new)
+            (setq new
+                  (minibuffer-with-setup-hook
+                      (lambda ()
+                        (require 'track-changes)
+                        (track-changes-register
+                         (lambda (id)
+                           (track-changes-fetch
+                            id (lambda (&rest _)
+                                 (dolist (ov ovs)
+                                   (overlay-put ov 'display
+                                                (minibuffer-contents))))))
+                         :nobefore t))
+                    (read-string (format "%sRename \"%s\" across %s to: "
                                          (or invalid "")
                                          old (or scope "current scope"))
-                                 nil nil old))
-          (when-let ((inv (refactor-backend-invalid-replacement
-                           backend old new scope)))
-            (setq invalid (format "Invalid replacement \"%s\": %s\n" new inv)
-                  new nil)))
-        new)
-    (remove-overlays (point-min) (point-max) 'refactor-rename-old t)))
+                                 nil nil old)))
+            (when-let ((inv (refactor-backend-invalid-replacement
+                             backend old new scope)))
+              (setq invalid (format "Invalid replacement \"%s\": %s\n" new inv)
+                    new nil)))
+          new)
+      (mapc #'delete-overlay ovs))))
 
 (cl-defgeneric refactor-backend-read-new-function-name (_backend)
   "Read a new function name."