]> git.eshelyaron.com Git - emacs.git/commitdiff
Warn about `ignore-error` with quoted condition argument
authorMattias Engdegård <mattiase@acm.org>
Wed, 28 Dec 2022 13:40:19 +0000 (14:40 +0100)
committerMattias Engdegård <mattiase@acm.org>
Thu, 29 Dec 2022 11:24:15 +0000 (12:24 +0100)
* lisp/subr.el (ignore-error):
Clarify condition argument in doc string and add warning.
* test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-warn-quoted-condition): New test.

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

index f0081de0619bec7104cc7d62e32cd52b8d9ea391..5e8f3c82a2acfe45058b170f01cbec35721e17d7 100644 (file)
@@ -380,9 +380,18 @@ without silencing all errors."
   "Execute BODY; if the error CONDITION occurs, return nil.
 Otherwise, return result of last form in BODY.
 
-CONDITION can also be a list of error conditions."
+CONDITION can also be a list of error conditions.
+The CONDITION argument is not evaluated.  Do not quote it."
   (declare (debug t) (indent 1))
-  `(condition-case nil (progn ,@body) (,condition nil)))
+  (if (and (eq (car-safe condition) 'quote)
+           (cdr condition) (null (cddr condition)))
+      (macroexp-warn-and-return
+       (format "`ignore-error' condition argument should not be quoted: %S"
+               condition)
+       `(condition-case nil (progn ,@body) (,(cadr condition) nil))
+       nil t condition)
+    `(condition-case nil (progn ,@body) (,condition nil))))
+
 \f
 ;;;; Basic Lisp functions.
 
index 47200de7a02b91470a89810830cf6479840a0d85..0d62283c04af917c20c6199a2e26ae615a66ad9e 100644 (file)
@@ -922,6 +922,11 @@ byte-compiled.  Run with dynamic binding."
   (bytecomp--with-warning-test "defvar.*foo.*wider than.*characters"
     `(defvar foo t ,bytecomp-tests--docstring)))
 
+(ert-deftest bytecomp-warn-quoted-condition ()
+  (bytecomp--with-warning-test
+      "Warning: `ignore-error' condition argument should not be quoted: 'error"
+    '(ignore-error 'error (abc))))
+
 (ert-deftest bytecomp-warn-dodgy-args-eq ()
   (dolist (fn '(eq eql))
     (cl-flet ((msg (type arg)