diff options
author | Stefan Kangas <stefankangas@gmail.com> | 2022-12-09 10:58:22 +0100 |
---|---|---|
committer | Stefan Kangas <stefankangas@gmail.com> | 2023-09-01 22:05:35 +0200 |
commit | 7d60d1652fc107c81c95cc7f7406a720996f3b8e (patch) | |
tree | 37a90f903f18251866532062cbc22083e325de62 /lisp/emacs-lisp | |
parent | 05a7c91b91c02c34ec6527119a465e5408dea2b1 (diff) | |
download | emacs-7d60d1652fc107c81c95cc7f7406a720996f3b8e.tar.gz emacs-7d60d1652fc107c81c95cc7f7406a720996f3b8e.tar.bz2 emacs-7d60d1652fc107c81c95cc7f7406a720996f3b8e.zip |
Make checkdoc warn if not using lexical-binding
* lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
Warn if there is no lexical-binding cookie. (Bug#59920)
(checkdoc-lexical-binding-flag): New user option.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/checkdoc.el | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index 3c4b6baca53..e918ec1eebd 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -128,6 +128,14 @@ ;; simple style rules to follow which checkdoc will auto-fix for you. ;; `y-or-n-p' and `yes-or-no-p' should also end in "?". ;; +;; Lexical binding: +;; +;; We recommend always using lexical binding in new code, and +;; converting old code to use it. Checkdoc warns if you don't have +;; the recommended string "-*- lexical-binding: t -*-" at the top of +;; the file. You can disable this check with the user option +;; `checkdoc-lexical-binding-flag'. +;; ;; Adding your own checks: ;; ;; You can experiment with adding your own checks by setting the @@ -339,6 +347,12 @@ See Info node `(elisp) Documentation Tips' for background." :type 'boolean :version "28.1") +(defcustom checkdoc-lexical-binding-flag t + "Non-nil means generate warnings if file is not using lexical binding. +See Info node `(elisp) Converting to Lexical Binding' for more." + :type 'boolean + :version "30.1") + ;; This is how you can use checkdoc to make mass fixes on the Emacs ;; source tree: ;; @@ -2377,6 +2391,31 @@ Code:, and others referenced in the style guide." (point-min) (save-excursion (goto-char (point-min)) (line-end-position)))) nil)) + (when checkdoc-lexical-binding-flag + (setq + err + ;; Lexical binding cookie. + (if (not (save-excursion + (save-restriction + (goto-char (point-min)) + (narrow-to-region (point) (pos-eol)) + (re-search-forward + (rx "-*-" (* (* nonl) ";") + (* space) "lexical-binding:" (* space) "t" (* space) + (* ";" (* nonl)) + "-*-") + nil t)))) + (let ((pos (save-excursion (goto-char (point-min)) + (goto-char (pos-eol)) + (point)))) + (if (checkdoc-y-or-n-p "There is no lexical-binding cookie! Add one?") + (progn + (goto-char pos) + (insert " -*- lexical-binding: t -*-")) + (checkdoc-create-error + "The first line should end with \"-*- lexical-binding: t -*-\"" + pos (1+ pos) t))) + nil))) (setq err (or |