From: Stefan Kangas Date: Fri, 24 Sep 2021 17:10:46 +0000 (+0200) Subject: Warn about overly long docstring in lambda X-Git-Tag: emacs-28.0.90~604 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c51b1c02db636ac66402432ed9416f80a4a9b2b5;p=emacs.git 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. --- diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index fc5b092f7dd..0856626b7bb 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -1666,7 +1666,10 @@ URLs." (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 (rx "\\" (or (seq "[" (* (not "]")) "]"))) (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. It is too wide if it has any lines longer than the largest of `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) (let ((col (max byte-compile-docstring-max-column fill-column)) 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 name (nth 1 form)) (setq docs (nth 3 form))) - ;; Here is how one could add lambda's here: - ;; ('lambda - ;; (setq kind "") ; can't be "function", unfortunately - ;; (setq docs (and (stringp (nth 2 form)) - ;; (nth 2 form)))) - ) + ('lambda + (setq kind "") ; can't be "function", unfortunately + (setq docs (and (stringp (nth 2 form)) + (nth 2 form))))) (when (and (consp name) (eq (car name) 'quote)) (setq name (cadr name))) (setq name (if name (format " `%s'" name) "")) diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index 707f597fd46..14df39bfd77 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -937,10 +937,9 @@ byte-compiled. Run with dynamic binding." "warn-wide-docstring-define-obsolete-variable-alias.el" "defvaralias .foo. docstring wider than .* characters") -;; TODO: We don't yet issue warnings for defuns. (bytecomp--define-warning-file-test "warn-wide-docstring-defun.el" - "wider than .* characters" 'reverse) + "wider than .* characters") (bytecomp--define-warning-file-test "warn-wide-docstring-defvar.el"