From 7b646ca566bb3bdd362d43a348c2fe00457438b2 Mon Sep 17 00:00:00 2001 From: nathanmarz Date: Thu, 21 Dec 2017 22:24:37 -0500 Subject: [PATCH] fix subselect changing first matched element to nil when transformed to empty sequence --- CHANGES.md | 1 + src/clj/com/rpl/specter.cljc | 2 +- test/com/rpl/specter/core_test.cljc | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 464b8de..1420542 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ * Add `vterminal` that takes in collected vals as vector in first argument rather than spliced into argument list. * Add `compact` navigator. After each step of navigation of its subpath, `compact` removes the collection if it's empty. * Change `terminal` to be a no-op on select codepath +* Bug fix: `subselect`/`filterer` removes first matched element instead of setting to nil when transformed to empty sequence ## 1.0.5 diff --git a/src/clj/com/rpl/specter.cljc b/src/clj/com/rpl/specter.cljc index 3ee7847..a69f1e8 100644 --- a/src/clj/com/rpl/specter.cljc +++ b/src/clj/com/rpl/specter.cljc @@ -895,7 +895,7 @@ values-to-insert (i/mutable-cell transformed)] (compiled-transform late (fn [_] (let [vs (i/get-cell values-to-insert)] - (if vs + (if (seq vs) (do (i/update-cell! values-to-insert next) (first vs)) NONE diff --git a/test/com/rpl/specter/core_test.cljc b/test/com/rpl/specter/core_test.cljc index e5e0cd1..2748f48 100644 --- a/test/com/rpl/specter/core_test.cljc +++ b/test/com/rpl/specter/core_test.cljc @@ -1535,6 +1535,8 @@ (deftest filterer-remove-test (is (= [1 :a 3 5] (setval (s/filterer even?) [:a] [1 2 3 4 5]))) + (is (= [1 3 5] (setval (s/filterer even?) [] [1 2 3 4 5]))) + (is (= [1 3 5] (setval (s/filterer even?) nil [1 2 3 4 5]))) ) (deftest helper-preds-test