]> git.eshelyaron.com Git - emacs.git/commitdiff
Make checkdoc--next-docstring use the doc-string-elt property
authorMauro Aranda <maurooaranda@gmail.com>
Mon, 8 Mar 2021 11:11:38 +0000 (08:11 -0300)
committerMauro Aranda <maurooaranda@gmail.com>
Mon, 8 Mar 2021 11:12:23 +0000 (08:12 -0300)
This follows from a fix for Bug#46918 and a discussion to use
doc-string-elt:
https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00232.html

* lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): Check for a
non-nil doc-string-elt property, instead of hard-coding the
supported symbols.  Use that property to position point at the
doc-string.

lisp/emacs-lisp/checkdoc.el

index 213ab43184f02acca63dc49e7054d6d8a6624650..ee2e77480d53e8efca9f2cea24aeed5e28015a73 100644 (file)
@@ -931,35 +931,20 @@ don't move point."
                            ;; Don't bug out if the file is empty (or a
                            ;; definition ends prematurely.
                            (end-of-file)))
-    (`(,(or 'defun 'defvar 'defcustom 'defmacro 'defconst 'defsubst 'defadvice
-            'cl-defun 'cl-defgeneric 'cl-defmacro)
+    (`(,(and (pred symbolp) def
+             (let (and doc (guard doc)) (function-get def 'doc-string-elt)))
        ,(pred symbolp)
        ;; Require an initializer, i.e. ignore single-argument `defvar'
        ;; forms, which never have a doc string.
        ,_ . ,_)
      (down-list)
-     ;; Skip over function or macro name, symbol to be defined, and
-     ;; initializer or argument list.
-     (forward-sexp 3)
-     (skip-chars-forward " \n\t")
-     t)
-    (`(,'cl-defmethod
-        ,(pred symbolp)
-        . ,rest)
-     (down-list)
-     (forward-sexp (pcase (car rest)
-                     ;; No qualifier, so skip like we would have skipped in
-                     ;; the first clause of the outer `pcase'.
-                     ((pred listp) 3)
-                     (':extra
-                      ;; Skip the :extra qualifier together with its string too.
-                      ;; Skip any additional qualifier.
-                      (if (memq (nth 2 rest) '(:around :before :after))
-                                  6
-                                5))
-                     ;; Skip :before, :after or :around qualifier too.
-                     ((or ':around ':before ':after)
-                      4)))
+     ;; Skip over function or macro name.
+     (forward-sexp 1)
+     ;; And now skip until the docstring.
+     (forward-sexp (1- ; We already skipped the function or macro name.
+                    (cond
+                     ((numberp doc) doc)
+                     ((functionp doc) (funcall doc)))))
      (skip-chars-forward " \n\t")
      t)))