From 2a1054794f49e060689e5ebd2c7c917f941913e7 Mon Sep 17 00:00:00 2001 From: HKey Date: Sun, 24 Jan 2021 22:21:27 +0900 Subject: [PATCH] Fix handling nils of -some--> * dash.el (-some-->): Fix handling nils in arguments. * dev/examples.el (-some-->): Add a test case. * README.md: * dash.texi: Regenerate docs. Copyright-paperwork-exempt: yes --- README.md | 4 ++-- dash.el | 8 ++++---- dash.texi | 2 +- dev/examples.el | 3 ++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4f137b2..f5c116c 100644 --- a/README.md +++ b/README.md @@ -316,7 +316,7 @@ Functions pretending lists are trees. * [-as->](#-as--value-variable-rest-forms) `(value variable &rest forms)` * [-some->](#-some--x-optional-form-rest-more) `(x &optional form &rest more)` * [-some->>](#-some--x-optional-form-rest-more) `(x &optional form &rest more)` -* [-some-->](#-some---x-optional-form-rest-more) `(x &optional form &rest more)` +* [-some-->](#-some---x-rest-forms) `(x &rest forms)` * [-doto](#-doto-init-rest-forms) `(init &rest forms)` ### Binding @@ -2321,7 +2321,7 @@ and when that result is non-nil, through the next form, etc. (-some->> '(2 4 6) (-last 'even?) (+ 100)) ;; => 106 ``` -#### -some--> `(x &optional form &rest more)` +#### -some--> `(x &rest forms)` When expr is non-nil, thread it through the first form (via [`-->`](#---x-rest-forms)), and when that result is non-nil, through the next form, etc. diff --git a/dash.el b/dash.el index b5398c2..7f23a71 100644 --- a/dash.el +++ b/dash.el @@ -1751,16 +1751,16 @@ and when that result is non-nil, through the next form, etc." (->> ,result ,form)) ,@more)))) -(defmacro -some--> (x &optional form &rest more) +(defmacro -some--> (x &rest forms) "When expr is non-nil, thread it through the first form (via `-->'), and when that result is non-nil, through the next form, etc." (declare (debug ->) (indent 1)) - (if (null form) x + (if (null forms) x (let ((result (make-symbol "result"))) `(-some--> (-when-let (,result ,x) - (--> ,result ,form)) - ,@more)))) + (--> ,result ,(car forms))) + ,@(cdr forms))))) (defmacro -doto (init &rest forms) "Evaluate INIT and pass it as argument to FORMS with `->'. diff --git a/dash.texi b/dash.texi index 43222f2..ab5469f 100644 --- a/dash.texi +++ b/dash.texi @@ -3601,7 +3601,7 @@ and when that result is non-nil, through the next form, etc. @end defmac @anchor{-some-->} -@defmac -some--> (x &optional form &rest more) +@defmac -some--> (x &rest forms) When expr is non-nil, thread it through the first form (via @code{-->} (@pxref{-->})), and when that result is non-nil, through the next form, etc. diff --git a/dev/examples.el b/dev/examples.el index 82f5ebb..3d3dd5f 100644 --- a/dev/examples.el +++ b/dev/examples.el @@ -1284,7 +1284,8 @@ value rather than consuming a list to produce a single value." (-some--> "def" (concat "abc" it "ghi")) => "abcdefghi" (-some--> nil (concat "abc" it "ghi")) => nil (-some--> '(1 3 5) (-filter 'even? it) (append it it) (-map 'square it)) => nil - (-some--> '(2 4 6) (-filter 'even? it) (append it it) (-map 'square it)) => '(4 16 36 4 16 36)) + (-some--> '(2 4 6) (-filter 'even? it) (append it it) (-map 'square it)) => '(4 16 36 4 16 36) + (-some--> 1 nil) !!> (void-function nil)) (defexamples -doto (-doto (list 1 2 3) pop pop) => '(3)