branch: elpa/spell-fu
commit 74d2701d78c1759074566f150d96a3596072359a
Author: Campbell Barton <ideasma...@gmail.com>
Commit: Campbell Barton <ideasma...@gmail.com>

    Cleanup: sanity checks for with-advice macro
---
 spell-fu.el | 48 +++++++++++++++++++++++++++++-------------------
 1 file changed, 29 insertions(+), 19 deletions(-)

diff --git a/spell-fu.el b/spell-fu.el
index 4543a54f88..5792612fdb 100644
--- a/spell-fu.el
+++ b/spell-fu.el
@@ -393,28 +393,38 @@ PROMPT is shown to the users completing read."
 Advice are triplets of (SYMBOL HOW FUNCTION),
 see `advice-add' documentation."
   (declare (indent 1))
-  (let ((body-let nil)
+  (let ((advice-list advice)
+        (body-let nil)
         (body-advice-add nil)
         (body-advice-remove nil)
         (item nil))
-    (while (setq item (pop advice))
-      (let ((fn-sym (gensym))
-            (fn-advise (pop item))
-            (fn-advice-ty (pop item))
-            (fn-body (pop item)))
-        ;; Build the calls for each type.
-        (push (list fn-sym fn-body) body-let)
-        (push (list 'advice-add fn-advise fn-advice-ty fn-sym) body-advice-add)
-        (push (list 'advice-remove fn-advise fn-sym) body-advice-remove)))
-    (setq body-let (nreverse body-let))
-    (setq body-advice-add (nreverse body-advice-add))
-    ;; Compose the call.
-    `(let ,body-let
-       (unwind-protect
-           (progn
-             ,@body-advice-add
-             ,@body)
-         ,@body-advice-remove))))
+    (unless (listp advice-list)
+      (error "Advice must be a list"))
+    (cond
+     ((null advice-list)
+      (error "Advice must be a list containing at least one item"))
+     (t
+      (while (setq item (pop advice-list))
+        (unless (and (listp item) (eq 3 (length item)))
+          (error "Each advice must be a list of 3 items"))
+        (let ((fn-sym (gensym))
+              (fn-advise (pop item))
+              (fn-advice-ty (pop item))
+              (fn-body (pop item)))
+          ;; Build the calls for each type.
+          (push (list fn-sym fn-body) body-let)
+          (push (list 'advice-add fn-advise fn-advice-ty fn-sym) 
body-advice-add)
+          (push (list 'advice-remove fn-advise fn-sym) body-advice-remove)))
+      (setq body-let (nreverse body-let))
+      (setq body-advice-add (nreverse body-advice-add))
+
+      ;; Compose the call.
+      `(let ,body-let
+         (unwind-protect
+             (progn
+               ,@body-advice-add
+               ,@body)
+           ,@body-advice-remove))))))
 
 (defmacro spell-fu--with-message-prefix (prefix &rest body)
   "Add text before the message output.

Reply via email to