Merge pull request #51 from Fuco1/debug-decl

Debug declarations, better indent & if changed to &rest else
master
Magnar Sveen 13 years ago
commit 9936885588
  1. 8
      README.md
  2. 28
      dash.el

@ -142,8 +142,8 @@ To get function combinators:
* [-when-let](#-when-let-var-val-rest-body) `(var-val &rest body)` * [-when-let](#-when-let-var-val-rest-body) `(var-val &rest body)`
* [-when-let*](#-when-let-vars-vals-rest-body) `(vars-vals &rest body)` * [-when-let*](#-when-let-vars-vals-rest-body) `(vars-vals &rest body)`
* [-if-let](#-if-let-var-val-then-optional-else) `(var-val then &optional else)` * [-if-let](#-if-let-var-val-then-rest-else) `(var-val then &rest else)`
* [-if-let*](#-if-let-vars-vals-then-optional-else) `(vars-vals then &optional else)` * [-if-let*](#-if-let-vars-vals-then-rest-else) `(vars-vals then &rest else)`
### Side-effects ### Side-effects
@ -1019,7 +1019,7 @@ If all `vals` evaluate to true, bind them to their corresponding
(-when-let* ((x 5) (y nil) (z 7)) (+ x y z)) ;; => nil (-when-let* ((x 5) (y nil) (z 7)) (+ x y z)) ;; => nil
``` ```
#### -if-let `(var-val then &optional else)` #### -if-let `(var-val then &rest else)`
If `val` evaluates to non-nil, bind it to `var` and do `then`, If `val` evaluates to non-nil, bind it to `var` and do `then`,
otherwise do `else`. `var-val` should be a (`var` `val`) pair. otherwise do `else`. `var-val` should be a (`var` `val`) pair.
@ -1029,7 +1029,7 @@ otherwise do `else`. `var-val` should be a (`var` `val`) pair.
(--if-let (even? 4) it nil) ;; => t (--if-let (even? 4) it nil) ;; => t
``` ```
#### -if-let* `(vars-vals then &optional else)` #### -if-let* `(vars-vals then &rest else)`
If all `vals` evaluate to true, bind them to their corresponding If all `vals` evaluate to true, bind them to their corresponding
`vars` and do `then`, otherwise do `else`. `vars-vals` should be a list `vars` and do `then`, otherwise do `else`. `vars-vals` should be a list

@ -797,6 +797,7 @@ in in second form, etc."
(defmacro -when-let (var-val &rest body) (defmacro -when-let (var-val &rest body)
"If VAL evaluates to non-nil, bind it to VAR and execute body. "If VAL evaluates to non-nil, bind it to VAR and execute body.
VAR-VAL should be a (VAR VAL) pair." VAR-VAL should be a (VAR VAL) pair."
(declare (debug ((symbolp form) body)))
(let ((var (car var-val)) (let ((var (car var-val))
(val (cadr var-val))) (val (cadr var-val)))
`(let ((,var ,val)) `(let ((,var ,val))
@ -807,6 +808,7 @@ VAR-VAL should be a (VAR VAL) pair."
"If all VALS evaluate to true, bind them to their corresponding "If all VALS evaluate to true, bind them to their corresponding
VARS and execute body. VARS-VALS should be a list of (VAR VAL) VARS and execute body. VARS-VALS should be a list of (VAR VAL)
pairs (corresponding to bindings of `let*')." pairs (corresponding to bindings of `let*')."
(declare (debug ((&rest (symbolp form)) body)))
(if (= (length vars-vals) 1) (if (= (length vars-vals) 1)
`(-when-let ,(car vars-vals) `(-when-let ,(car vars-vals)
,@body) ,@body)
@ -817,42 +819,46 @@ VAR-VAL should be a (VAR VAL) pair."
(defmacro --when-let (val &rest body) (defmacro --when-let (val &rest body)
"If VAL evaluates to non-nil, bind it to `it' and execute "If VAL evaluates to non-nil, bind it to `it' and execute
body." body."
(declare (debug (form body)))
`(let ((it ,val)) `(let ((it ,val))
(when it (when it
,@body))) ,@body)))
(defmacro -if-let (var-val then &optional else) (defmacro -if-let (var-val then &rest else)
"If VAL evaluates to non-nil, bind it to VAR and do THEN, "If VAL evaluates to non-nil, bind it to VAR and do THEN,
otherwise do ELSE. VAR-VAL should be a (VAR VAL) pair." otherwise do ELSE. VAR-VAL should be a (VAR VAL) pair."
(declare (debug ((symbolp form) form body)))
(let ((var (car var-val)) (let ((var (car var-val))
(val (cadr var-val))) (val (cadr var-val)))
`(let ((,var ,val)) `(let ((,var ,val))
(if ,var ,then ,else)))) (if ,var ,then ,@else))))
(defmacro -if-let* (vars-vals then &optional else) (defmacro -if-let* (vars-vals then &rest else)
"If all VALS evaluate to true, bind them to their corresponding "If all VALS evaluate to true, bind them to their corresponding
VARS and do THEN, otherwise do ELSE. VARS-VALS should be a list VARS and do THEN, otherwise do ELSE. VARS-VALS should be a list
of (VAR VAL) pairs (corresponding to the bindings of `let*')." of (VAR VAL) pairs (corresponding to the bindings of `let*')."
(declare (debug ((&rest (symbolp form)) form body)))
(let ((first-pair (car vars-vals)) (let ((first-pair (car vars-vals))
(rest (cdr vars-vals))) (rest (cdr vars-vals)))
(if (= (length vars-vals) 1) (if (= (length vars-vals) 1)
`(-if-let ,first-pair ,then ,else) `(-if-let ,first-pair ,then ,@else)
`(-if-let ,first-pair `(-if-let ,first-pair
(-if-let* ,rest ,then ,else) (-if-let* ,rest ,then ,@else)
,else)))) ,@else))))
(defmacro --if-let (val then &optional else) (defmacro --if-let (val then &rest else)
"If VAL evaluates to non-nil, bind it to `it' and do THEN, "If VAL evaluates to non-nil, bind it to `it' and do THEN,
otherwise do ELSE." otherwise do ELSE."
(declare (debug (form form body)))
`(let ((it ,val)) `(let ((it ,val))
(if it ,then ,else))) (if it ,then ,@else)))
(put '-when-let 'lisp-indent-function 1) (put '-when-let 'lisp-indent-function 1)
(put '-when-let* 'lisp-indent-function 1) (put '-when-let* 'lisp-indent-function 1)
(put '--when-let 'lisp-indent-function 1) (put '--when-let 'lisp-indent-function 1)
(put '-if-let 'lisp-indent-function 1) (put '-if-let 'lisp-indent-function 2)
(put '-if-let* 'lisp-indent-function 1) (put '-if-let* 'lisp-indent-function 2)
(put '--if-let 'lisp-indent-function 1) (put '--if-let 'lisp-indent-function 2)
(defun -distinct (list) (defun -distinct (list)
"Return a new list with all duplicates removed. "Return a new list with all duplicates removed.

Loading…
Cancel
Save