Function: cl--generic-describe

cl--generic-describe is a byte-compiled function defined in cl-generic.el.gz.

Signature

(cl--generic-describe FUNCTION)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-generic.el.gz
(defun cl--generic-describe (function)
  ;; Supposedly this is called from help-fns, so help-fns should be loaded at
  ;; this point.
  (declare-function help-fns-short-filename "help-fns" (filename))
  (let ((generic (if (symbolp function) (cl--generic function))))
    (when generic
      (require 'help-mode)              ;Needed for `help-function-def' button!
      (save-excursion
        ;; Ensure that we have two blank lines (but not more).
        (unless (looking-back "\n\n" (- (point) 2))
          (insert "\n"))
        (insert "This is a generic function.\n\n")
        (insert (propertize "Implementations:\n\n" 'face 'bold))
        ;; Loop over fanciful generics
        (dolist (method (cl--generic-method-table generic))
          (let* ((info (cl--generic-method-info method)))
            ;; FIXME: Add hyperlinks for the types as well.
            (insert (format "%s%S" (nth 0 info) (nth 1 info)))
            (let* ((met-name (cl--generic-load-hist-format
                              function
                              (cl--generic-method-qualifiers method)
                              (cl--generic-method-specializers method)))
                   (file (find-lisp-object-file-name met-name 'cl-defmethod)))
              (when file
                (insert (substitute-command-keys " in `"))
                (help-insert-xref-button (help-fns-short-filename file)
                                         'help-function-def met-name file
                                         'cl-defmethod)
                (insert (substitute-command-keys "'.\n"))))
            (insert "\n" (or (nth 2 info) "Undocumented") "\n\n")))))))