emacs-devel
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]