summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorPhilipp Stephani <phst@google.com>2022-09-13 17:12:57 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2022-09-13 17:12:57 +0200
commitfffa53ff1afe097fe38f7664df5debe9811201d1 (patch)
treecdc34b558e9b4684b8362706a75a5a2d563f1ec8 /lisp/emacs-lisp
parent6d8f5161ead689b7a2e44a7de0a695f0ab4c833b (diff)
downloademacs-fffa53ff1afe097fe38f7664df5debe9811201d1.tar.gz
emacs-fffa53ff1afe097fe38f7664df5debe9811201d1.tar.bz2
emacs-fffa53ff1afe097fe38f7664df5debe9811201d1.zip
Have 'cl-case' warn about suspicious cases
* lisp/emacs-lisp/cl-macs.el (cl-case): Warn if the user passes a nil key list (which would never match). Warn about quoted symbols that should probably be unquoted. * test/lisp/emacs-lisp/cl-macs-tests.el (cl-case-warning): New unit test (bug#51368).
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/cl-macs.el15
1 files changed, 15 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 946d2c09a92..5d330f32d66 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -788,6 +788,21 @@ compared by `eql'.
((eq (car c) 'cl--ecase-error-flag)
`(error "cl-ecase failed: %s, %s"
,temp ',(reverse head-list)))
+ ((null (car c))
+ (macroexp-warn-and-return
+ "Case nil will never match"
+ nil 'suspicious))
+ ((and (consp (car c)) (not (cddar c))
+ (memq (caar c) '(quote function)))
+ (macroexp-warn-and-return
+ (format-message
+ (concat "Case %s will match `%s'. If "
+ "that's intended, write %s "
+ "instead. Otherwise, don't "
+ "quote `%s'.")
+ (car c) (caar c) (list (cadar c) (caar c))
+ (cadar c))
+ `(cl-member ,temp ',(car c)) 'suspicious))
((listp (car c))
(setq head-list (append (car c) head-list))
`(cl-member ,temp ',(car c)))