From ab117defbe9f97b81b6af49407311bdb58698268 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 8 Apr 2024 13:59:33 -0400 Subject: [PATCH] (cl--describe-class): Improve based on dicussion in bug#70077 * lisp/emacs-lisp/cl-extra.el (cl--describe-class): Move docstring after the class' slots. (cl--describe-class-slots): Buttonize the types. (cherry picked from commit dc5fe95a48f5bff5dfac8841d05c66b300b09aab) --- lisp/emacs-lisp/cl-extra.el | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 437dea2d6a9..4660d94ea90 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -807,13 +807,19 @@ Call `cl--find-class' to get TYPE's propname `cl--class'" (insert (substitute-command-keys (if ch "', " "'")))) (insert ".\n"))) + ;; Describe all the slots in this class. + ;; Put it before the docstring, since the docstring may want + ;; to refer to the slots. + (cl--describe-class-slots class) + ;; Type's documentation. (let ((doc (cl--class-docstring class))) (when doc - (insert "\n" doc "\n\n"))) - - ;; Describe all the slots in this class. - (cl--describe-class-slots class) + (insert (if (save-excursion + (or (< (skip-chars-backward "\n") -1) (bobp))) + "" + "\n") + doc "\n\n"))) ;; Describe all the methods specific to this class. (let ((generics (cl-generic-all-functions type))) @@ -910,7 +916,12 @@ Outputs to the current buffer." (mapcar (lambda (slot) (list (cl-prin1-to-string (cl--slot-descriptor-name slot)) - (cl-prin1-to-string (cl--slot-descriptor-type slot)) + (let ((type (cl--slot-descriptor-type slot))) + (if (and type (symbolp type) (cl--find-class type)) + (make-text-button (symbol-name type) nil + 'type 'help-type + 'help-args (list type)) + (cl-prin1-to-string type))) (cl-prin1-to-string (cl--slot-descriptor-initform slot)) (let ((doc (alist-get :documentation (cl--slot-descriptor-props slot)))) -- 2.39.5