]> git.eshelyaron.com Git - emacs.git/commitdiff
Warn about bad defcustom :local keyword at compile time
authorStefan Kangas <stefankangas@gmail.com>
Wed, 2 Oct 2024 00:28:52 +0000 (02:28 +0200)
committerEshel Yaron <me@eshelyaron.com>
Thu, 3 Oct 2024 06:42:03 +0000 (08:42 +0200)
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare): Warn about
invalid values for the defcustom :local keyword.
* test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-test-defcustom-local): New test.

(cherry picked from commit fb42a253bdcbdc9f8af5f934cab4aa24d5b541bd)

lisp/emacs-lisp/bytecomp.el
test/lisp/emacs-lisp/bytecomp-tests.el

index 4e2b842d9df459ee7710df76904dacca88ee0232..48a473cd37503a839654162b8f8ce779eefd40c4 100644 (file)
@@ -5475,7 +5475,13 @@ FORM is used to provide location, `bytecomp--cus-function' and
       (when (and name
                  byte-compile-current-file  ; only when compiling a whole file
                 (eq fun 'custom-declare-group))
-       (setq byte-compile-current-group name))))
+        (setq byte-compile-current-group name))
+
+      ;; Check :local
+      (when-let ((val (and (eq fun 'custom-declare-variable)
+                           (plist-get keyword-args :local)))
+                 (_ (not (memq val '(t permanent permanent-only)))))
+        (bytecomp--cus-warn form ":local keyword does not accept %S" val))))
 
   (byte-compile-normal-call form))
 
index ca9849f351b70c33eece7369504b645a20b99285..69918e9c0c3aeccbf788f7acd790c83e5d302d58 100644 (file)
@@ -1985,6 +1985,14 @@ EXPECTED-POINT BINDINGS (MODES \\='\\='(ruby-mode js-mode python-mode)) \
      (dc 'integerp))
     ))
 
+(ert-deftest bytecomp-test-defcustom-local ()
+  (cl-flet ((dc (local) `(defcustom mytest nil "doc" :type 'sexp :local ',local :group 'test)))
+    (bytecomp--with-warning-test
+     (rx ":local keyword does not accept 'symbol") (dc 'symbol))
+    (bytecomp--with-warning-test
+     (rx ":local keyword does not accept \"string\"") (dc "string"))
+    ))
+
 (ert-deftest bytecomp-test-defface-spec ()
   (cl-flet ((df (spec) `(defface mytest ',spec "doc" :group 'test)))
     (bytecomp--with-warning-test