[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: master fd92023: Make checkdoc work with qualified methods
From: |
Mauro Aranda |
Subject: |
Re: master fd92023: Make checkdoc work with qualified methods |
Date: |
Fri, 05 Mar 2021 08:28:41 -0300 |
Hi Stefan,
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Make checkdoc work with qualified methods
>>
>> * lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): Handle
>> cl-defmethod in a case of its own. Check for the presence of
>> qualifiers, and skip them accordingly until the docstring.
>
> Any chance we could use the `doc-string-elt` property (which I just
> fixed for `cl-defmethod`) for `checkdoc--next-docstring`?
>
>
> Stefan
Something along these lines?
(defun checkdoc--next-docstring ()
"When looking at a definition with a doc string, find it.
Move to the next doc string after point, and return t. When not
looking at a definition containing a doc string, return nil and
don't move point."
(pcase (save-excursion (condition-case nil
(read (current-buffer))
;; Conservatively skip syntax errors.
(invalid-read-syntax)
;; Don't bug out if the file is empty (or a
;; definition ends prematurely.
(end-of-file)))
(`(,(and
(or 'defun 'defvar 'defcustom 'defmacro 'defconst 'defsubst
'defadvice 'cl-defun 'cl-defgeneric 'cl-defmacro 'cl-defmethod)
def)
,(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.
(forward-sexp 1)
;; And now skip until the docstring.
(forward-sexp (1- ; We already skipped the function or macro name.
(pcase (function-get def 'doc-string-elt)
((and (pred numberp) num) num)
((and (pred functionp) fn) (funcall fn)))))
(skip-chars-forward " \n\t")
t)))
Note that I need to do (forward-sexp 1) so the requirements of
cl--defmethod-doc-pos are fulfilled. It may get messy if other defining
forms declare a doc-string-elt function that assumes a different point
position.
BTW, I've noticed that I forgot to add the Bug tag to my commit, I'm
sorry. This commit was part of Bug#46918.