]> git.eshelyaron.com Git - emacs.git/commitdiff
Use Emacs Lisp xref backend in Lisp Help buffers
authorDmitry Gutov <dmitry@gutov.dev>
Thu, 3 Oct 2024 00:04:46 +0000 (03:04 +0300)
committerEshel Yaron <me@eshelyaron.com>
Thu, 3 Oct 2024 06:47:21 +0000 (08:47 +0200)
* lisp/help-fns.el (help-fns--setup-xref-backend):
New function (bug#69462).
(describe-function, describe-variable): Use it here.

* lisp/emacs-lisp/cl-extra.el (cl-describe-type): And here.

* lisp/progmodes/elisp-mode.el (xref-backend-definitions):
Only infer namespace in emacs-lisp-mode (use 'any' otherwise).

(cherry picked from commit c8ecd7fa0da8a597250989430ac2b2465419f18e)

lisp/emacs-lisp/cl-extra.el
lisp/help-fns.el
lisp/progmodes/elisp-mode.el

index 1b95b272c25c6bcd3d7392bc4986b33e37665490..ecd35c9137c545cf9421ff6720580556eefdf7fa 100644 (file)
@@ -733,6 +733,8 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
 Call `cl--find-class' to get TYPE's propname `cl--class'"
   (cl--find-class type))
 
+(declare-function help-fns--setup-xref-backend "help-fns" ())
+
 ;;;###autoload
 (defun cl-describe-type (type &optional _buf _frame)
   "Display the documentation for type TYPE (a symbol)."
@@ -754,6 +756,7 @@ Call `cl--find-class' to get TYPE's propname `cl--class'"
             ;; cl-deftype).
             (user-error "Unknown type %S" type))))
       (with-current-buffer standard-output
+        (help-fns--setup-xref-backend)
         ;; Return the text we displayed.
         (buffer-string)))))
 
index 1aa9778da43ccc465be626451d40cf875f08fff4..32a55e15e630dca84a576a855c4ea1c74bafa3ae 100644 (file)
@@ -255,6 +255,11 @@ interactive command."
                   fn))
     (list fn)))
 
+(defun help-fns--setup-xref-backend ()
+  (add-hook 'xref-backend-functions #'elisp--xref-backend nil t)
+  (setq-local project-vc-external-roots-function #'elisp-load-path-roots)
+  (setq-local grep-filepattern-alist '((help-mode "*.el"))))
+
 ;;;###autoload
 (defun describe-function (function)
   "Display the full documentation of FUNCTION (a symbol).
@@ -289,6 +294,8 @@ handling of autoloaded functions."
         (princ " is ")
         (describe-function-1 function)
         (with-current-buffer standard-output
+          (help-fns--setup-xref-backend)
+
           ;; Return the text we displayed.
           (buffer-string))))))
 
@@ -1516,6 +1523,7 @@ it is displayed along with the global value."
                     (delete-char 1)))))
 
            (with-current-buffer standard-output
+              (help-fns--setup-xref-backend)
              ;; Return the text we displayed.
              (buffer-string))))))))
 
index 0d6d9eac26aeee0aa3e46d9ebb10677c3846c0c0..9ac52a21dcd5a19459c33dbdad21468bf84cceab 100644 (file)
@@ -1003,7 +1003,9 @@ namespace but with lower confidence."
       (let ((sym (intern-soft identifier)))
         (when sym
           (let* ((pos (get-text-property 0 'pos identifier))
-                 (namespace (if pos
+                 (namespace (if (and pos
+                                     ;; Reusing it in Help Mode.
+                                     (derived-mode-p 'emacs-lisp-mode))
                                 (elisp--xref-infer-namespace pos)
                               'any))
                  (defs (elisp--xref-find-definitions sym)))