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

Loading…
Cancel
Save