]> git.eshelyaron.com Git - emacs.git/commitdiff
(cl--describe-class): Improve based on dicussion in bug#70077
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 8 Apr 2024 17:59:33 +0000 (13:59 -0400)
committerEshel Yaron <me@eshelyaron.com>
Wed, 10 Apr 2024 20:28:36 +0000 (22:28 +0200)
* 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

index 437dea2d6a980625e6cecedc7f2d987d608c1f9a..4660d94ea90f9123228ecaafe6a3bce4ec55b48e 100644 (file)
@@ -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))))