(defvar scope-counter nil)
+(defvar scope-local-functions nil)
+
(defvar scope--local nil)
(defvar scope-callback #'ignore)
;; 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
(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)))
;; 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
(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)
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.