]> git.eshelyaron.com Git - emacs.git/commitdiff
* emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Add
authorLeo Liu <sdl.web@gmail.com>
Sat, 13 Sep 2014 16:30:21 +0000 (00:30 +0800)
committerLeo Liu <sdl.web@gmail.com>
Sat, 13 Sep 2014 16:30:21 +0000 (00:30 +0800)
pcase-exhaustive.

* emacs-lisp/pcase.el (pcase--dontwarn-upats): New var.
(pcase--expand): Use it.
(pcase-exhaustive): New macro.

Fixes: debbugs:16567
lisp/ChangeLog
lisp/emacs-lisp/lisp-mode.el
lisp/emacs-lisp/pcase.el

index a05b7b59a278104dbd6f3112f0cf19bd35884128..f0b767886cbbc6f1f6a340a2f141cc784e99ee6e 100644 (file)
@@ -1,3 +1,12 @@
+2014-09-13  Leo Liu  <sdl.web@gmail.com>
+
+       * emacs-lisp/pcase.el (pcase--dontwarn-upats): New var.
+       (pcase--expand): Use it.
+       (pcase-exhaustive): New macro.  (Bug#16567)
+
+       * emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Add
+       pcase-exhaustive.
+
 2014-09-13  Eli Zaretskii  <eliz@gnu.org>
 
        * mail/rmailmm.el (rmail-mime-insert-html): Decode the HTML part
index 31df353321a5486f80eca515d4617ba3ccaf9e74..435730ae0989f918c5225e7cbed490b6119fe0ad 100644 (file)
@@ -197,9 +197,9 @@ It has `lisp-mode-abbrev-table' as its parent."
               (el-vdefs '("defconst" "defcustom" "defvaralias" "defvar-local"
                           "defface"))
               (el-tdefs '("defgroup" "deftheme"))
-              (el-kw '("while-no-input" "letrec" "pcase" "pcase-let"
-                       "pcase-let*" "save-restriction" "save-excursion"
-                       "save-selected-window"
+              (el-kw '("while-no-input" "letrec" "pcase" "pcase-exhaustive"
+                       "pcase-let" "pcase-let*" "save-restriction"
+                       "save-excursion" "save-selected-window"
                        ;; "eval-after-load" "eval-next-after-load"
                        "save-window-excursion" "save-current-buffer"
                        "save-match-data" "combine-after-change-calls"
index 963d6a440414971b13b757e63ab2798799d21ef9..94aedd4339a933d7a53352702ece3780db414d08 100644 (file)
@@ -68,6 +68,8 @@
 
 (defconst pcase--dontcare-upats '(t _ pcase--dontcare))
 
+(defvar pcase--dontwarn-upats '(pcase--dontcare))
+
 (def-edebug-spec
   pcase-UPAT
   (&or symbolp
@@ -148,6 +150,15 @@ like `(,a . ,(pred (< a))) or, with more checks:
         ;; (puthash (car cases) `(,exp ,cases ,@expansion) pcase--memoize-2)
         expansion))))
 
+;;;###autoload
+(defmacro pcase-exhaustive (exp &rest cases)
+  "The exhaustive version of `pcase' (which see)."
+  (declare (indent 1) (debug pcase))
+  (let* ((x (make-symbol "x"))
+         (pcase--dontwarn-upats (cons x pcase--dontwarn-upats)))
+    (pcase--expand
+     exp (append cases `((,x (error "No clause matching `%S'" ,x)))))))
+
 (defun pcase--let* (bindings body)
   (cond
    ((null bindings) (macroexp-progn body))
@@ -280,7 +291,8 @@ of the form (UPAT EXP)."
                              vars))))
                      cases))))
       (dolist (case cases)
-        (unless (or (memq case used-cases) (eq (car case) 'pcase--dontcare))
+        (unless (or (memq case used-cases)
+                    (memq (car case) pcase--dontwarn-upats))
           (message "Redundant pcase pattern: %S" (car case))))
       (macroexp-let* defs main))))