]> git.eshelyaron.com Git - emacs.git/commitdiff
Recognize extracted functions as such
authorEshel Yaron <me@eshelyaron.com>
Tue, 25 Feb 2025 19:57:48 +0000 (20:57 +0100)
committerEshel Yaron <me@eshelyaron.com>
Tue, 25 Feb 2025 19:57:48 +0000 (20:57 +0100)
lisp/emacs-lisp/scope.el
lisp/progmodes/refactor-elisp.el
lisp/progmodes/refactor.el

index d37db1e64f0322edc75910989fd0ce384ed8079c..9c8c5a247482ac250cd0dd4bf22355ab68a1606f 100644 (file)
@@ -30,6 +30,8 @@
 
 (defvar scope-counter nil)
 
+(defvar scope-local-functions nil)
+
 (defvar scope--local nil)
 
 (defvar scope-callback #'ignore)
@@ -1530,7 +1532,6 @@ a (possibly empty) list of safe macros.")
           ;; Hence we cannot interpret their arguments.
           )
          ((setq this (function-get bare 'scope-analyzer)) (apply this local form))
-         ((functionp      bare) (scope-report-s f 'function)     (scope-n local forms))
          ((special-form-p bare) (scope-report-s f 'special-form) (scope-n local forms))
          ((macrop bare) (scope-report-s f 'macro)
           (cond
@@ -1539,11 +1540,14 @@ a (possibly empty) list of safe macros.")
             (let* ((warning-minimum-log-level :emergency)
                    (macroexp-inhibit-compiler-macros t)
                    (symbols-with-pos-enabled t)
+                   (message-log-max nil)
+                   (inhibit-message t)
                    (macroexpand-all-environment
                     (append (mapcar #'list scope-unsafe-macros) macroexpand-all-environment))
                    (expanded (ignore-errors (macroexpand-1 form macroexpand-all-environment))))
               (scope-1 local expanded)))))
-         (scope-assume-func-p (scope-report-s f 'function) (scope-n local forms))))))
+         ((or (functionp bare) (memq bare scope-local-functions) scope-assume-func-p)
+          (scope-report-s f 'function) (scope-n local forms))))))
    ((symbol-with-pos-p form) (scope-s local form))))
 
 (defun scope-n (local body) (dolist (form body) (scope-1 local form)))
index 1d0688178b8bafb2db46676a814d6da6ead82dec..9e41d07ba0ba7eb93bf97c8784599f9604ab397f 100644 (file)
            ;; Replace `beg'-`end' region with call to `new' function.
            (,beg ,end ,(concat "(" new (when bound " ") vstr ")"))))))))
 
+(defvar scope-local-functions)
+
+(cl-defmethod refactor-backend-extract-done ((_backend (eql elisp)) new)
+  (let ((sym (intern new)))
+    (unless (memq sym scope-local-functions)
+      (setq-local scope-local-functions (cons sym scope-local-functions)))))
+
 (provide 'refactor-elisp)
 ;;; refactor-elisp.el ends here
index 24e8bdf2d650d3100b52bd0baa921f8121e326db..d02c4df2d10a3fe463d5a96de21e2e5204dc5dec 100644 (file)
@@ -123,10 +123,11 @@ operations that BACKEND supports.")
     (when-let ((err (refactor-backend-extract-validate-region backend beg end)))
       (user-error "Cannot extract region: %s" err))
     (deactivate-mark)
-    (refactor-apply-edits
-     (refactor-backend-extract-edits
-      backend (region-beginning) (region-end)
-      (refactor-backend-read-new-function-name backend)))))
+    (let ((new (refactor-backend-read-new-function-name backend)))
+      (refactor-apply-edits
+       (refactor-backend-extract-edits
+        backend (region-beginning) (region-end) new))
+      (refactor-backend-extract-done backend new))))
 
 ;;;###autoload
 (defun refactor-rename (backend)
@@ -238,6 +239,8 @@ region is not valid.")
 
 See `refactor-apply-edits' for the format of the return value.")
 
+(cl-defgeneric refactor-backend-extract-done (backend new))
+
 (cl-defgeneric refactor-backend-rename-edits (backend old new scope)
   "Return alist of edits for renaming OLD to NEW across SCOPE using BACKEND.