Improve check for misleading 'cl-case' cases (Bug#57915).

* lisp/emacs-lisp/cl-macs.el (cl-case): Check that the case is of the
form (quote FOO), not just (quote).
* test/lisp/emacs-lisp/cl-macs-tests.el (cl-case-no-warning): New unit test.
This commit is contained in:
Philipp Stephani 2022-09-19 13:34:51 +02:00
parent f735aa0f39
commit a71de4b52d
2 changed files with 12 additions and 1 deletions

View file

@ -792,7 +792,7 @@ compared by `eql'.
(macroexp-warn-and-return
"Case nil will never match"
nil 'suspicious))
((and (consp (car c)) (not (cddar c))
((and (consp (car c)) (cdar c) (not (cddar c))
(memq (caar c) '(quote function)))
(macroexp-warn-and-return
(format-message

View file

@ -792,4 +792,15 @@ constructs."
(should (equal messages
(concat "Warning: " message "\n"))))))))))
(ert-deftest cl-case-no-warning ()
"Test that `cl-case' and `cl-ecase' don't warn in some valid cases.
See Bug#57915."
(dolist (case '(quote (quote) function (function)))
(dolist (macro '(cl-case cl-ecase))
(let ((form `(,macro val (,case 1))))
(ert-info ((prin1-to-string form) :prefix "Form: ")
(ert-with-message-capture messages
(macroexpand form)
(should (string-empty-p messages))))))))
;;; cl-macs-tests.el ends here