1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-29 07:58:28 +00:00

Warn about overly long docstring in lambda

* lisp/emacs-lisp/bytecomp.el
(byte-compile-docstring-length-warn): Warn about overly long
docstring in lambda.  (Bug#44858)

(byte-compile--wide-docstring-p): Improve comment.
* test/lisp/emacs-lisp/bytecomp-tests.el
("warn-wide-docstring-defun.el"): Update to test for the above new
warning.
This commit is contained in:
Stefan Kangas 2021-09-24 19:10:46 +02:00
parent 89bac05aaa
commit c51b1c02db
2 changed files with 9 additions and 16 deletions

View File

@ -1666,7 +1666,10 @@ URLs."
(seq "(" (* (not ")")) ")"))) (seq "(" (* (not ")")) ")")))
")"))) ")")))
"" ""
;; Heuristic: assume these substitutions are of some length N. ;; Heuristic: We can't reliably do `subsititute-command-keys'
;; substitutions, since the value of a keymap in general can't be
;; known at compile time. So instead, we assume that these
;; substitutions are of some length N.
(replace-regexp-in-string (replace-regexp-in-string
(rx "\\" (or (seq "[" (* (not "]")) "]"))) (rx "\\" (or (seq "[" (* (not "]")) "]")))
(make-string byte-compile--wide-docstring-substitution-len ?x) (make-string byte-compile--wide-docstring-substitution-len ?x)
@ -1686,13 +1689,6 @@ value, it will override this variable."
"Warn if documentation string of FORM is too wide. "Warn if documentation string of FORM is too wide.
It is too wide if it has any lines longer than the largest of It is too wide if it has any lines longer than the largest of
`fill-column' and `byte-compile-docstring-max-column'." `fill-column' and `byte-compile-docstring-max-column'."
;; This has some limitations that it would be nice to fix:
;; 1. We don't try to handle defuns. It is somewhat tricky to get
;; it right since `defun' is a macro. Also, some macros
;; themselves produce defuns (e.g. `define-derived-mode').
;; 2. We assume that any `subsititute-command-keys' command replacement has a
;; given length. We can't reliably do these replacements, since the value
;; of the keymaps in general can't be known at compile time.
(when (byte-compile-warning-enabled-p 'docstrings) (when (byte-compile-warning-enabled-p 'docstrings)
(let ((col (max byte-compile-docstring-max-column fill-column)) (let ((col (max byte-compile-docstring-max-column fill-column))
kind name docs) kind name docs)
@ -1703,12 +1699,10 @@ It is too wide if it has any lines longer than the largest of
(setq kind (nth 0 form)) (setq kind (nth 0 form))
(setq name (nth 1 form)) (setq name (nth 1 form))
(setq docs (nth 3 form))) (setq docs (nth 3 form)))
;; Here is how one could add lambda's here: ('lambda
;; ('lambda (setq kind "") ; can't be "function", unfortunately
;; (setq kind "") ; can't be "function", unfortunately (setq docs (and (stringp (nth 2 form))
;; (setq docs (and (stringp (nth 2 form)) (nth 2 form)))))
;; (nth 2 form))))
)
(when (and (consp name) (eq (car name) 'quote)) (when (and (consp name) (eq (car name) 'quote))
(setq name (cadr name))) (setq name (cadr name)))
(setq name (if name (format " `%s'" name) "")) (setq name (if name (format " `%s'" name) ""))

View File

@ -937,10 +937,9 @@ byte-compiled. Run with dynamic binding."
"warn-wide-docstring-define-obsolete-variable-alias.el" "warn-wide-docstring-define-obsolete-variable-alias.el"
"defvaralias .foo. docstring wider than .* characters") "defvaralias .foo. docstring wider than .* characters")
;; TODO: We don't yet issue warnings for defuns.
(bytecomp--define-warning-file-test (bytecomp--define-warning-file-test
"warn-wide-docstring-defun.el" "warn-wide-docstring-defun.el"
"wider than .* characters" 'reverse) "wider than .* characters")
(bytecomp--define-warning-file-test (bytecomp--define-warning-file-test
"warn-wide-docstring-defvar.el" "warn-wide-docstring-defvar.el"