diff --git a/CHANGELOG.md b/CHANGELOG.md index e14a587f..8ff814b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ A preview of the next release can be installed from ## Unreleased - Fix [#1688](https://github.com/babashka/babashka/issues/1688): use-fixtures should add metadata to `*ns*` +- Fix [#1692](https://github.com/babashka/babashka/issues/1692): Add support for ITransientSet and org.flatland/ordered-set ## 1.3.190 (2024-04-17) diff --git a/feature-yaml/babashka/impl/ordered.clj b/feature-yaml/babashka/impl/ordered.clj index a0c87a97..0c87bee6 100644 --- a/feature-yaml/babashka/impl/ordered.clj +++ b/feature-yaml/babashka/impl/ordered.clj @@ -1,9 +1,14 @@ (ns babashka.impl.ordered {:no-doc true} (:require [flatland.ordered.map :as omap] + [flatland.ordered.set :as oset] [sci.core :as sci])) (def omap-ns (sci/create-ns 'flatland.ordered.map nil)) +(def oset-ns (sci/create-ns 'flatland.ordered.set nil)) -(def ordered-map-ns +(def ordered-ns {'ordered-map (sci/copy-var omap/ordered-map omap-ns)}) + +(def ordered-set-ns + {'ordered-set (sci/copy-var oset/ordered-set oset-ns)}) diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index 2b552cb5..4a0889d7 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -600,6 +600,7 @@ clojure.lang.IRef clojure.lang.ISeq clojure.lang.IPersistentVector + clojure.lang.ITransientSet clojure.lang.ITransientVector clojure.lang.Iterate clojure.lang.LispReader$Resolver diff --git a/src/babashka/main.clj b/src/babashka/main.clj index f02ebdd8..86dec93a 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -427,7 +427,8 @@ Use bb run --help to show this help output. 'clojure.data.xml.event @(resolve 'babashka.impl.xml/xml-event-namespace) 'clojure.data.xml.tree @(resolve 'babashka.impl.xml/xml-tree-namespace)) features/yaml? (assoc 'clj-yaml.core @(resolve 'babashka.impl.yaml/yaml-namespace) - 'flatland.ordered.map @(resolve 'babashka.impl.ordered/ordered-map-ns)) + 'flatland.ordered.map @(resolve 'babashka.impl.ordered/ordered-map-ns) + 'flatland.ordered.set @(resolve 'babashka.impl.ordered/ordered-set-ns)) features/jdbc? (assoc 'next.jdbc @(resolve 'babashka.impl.jdbc/njdbc-namespace) 'next.jdbc.sql @(resolve 'babashka.impl.jdbc/next-sql-namespace) 'next.jdbc.result-set @(resolve 'babashka.impl.jdbc/result-set-namespace)) @@ -487,7 +488,8 @@ Use bb run --help to show this help output. (def edn-readers (cond-> {} features/yaml? - (assoc 'ordered/map @(resolve 'flatland.ordered.map/ordered-map)) + (assoc 'ordered/map @(resolve 'flatland.ordered.map/ordered-map) + 'ordered/set @(resolve 'flatland.ordered.set/ordered-set)) features/xml? (assoc 'xml/ns @(resolve 'clojure.data.xml.name/uri-symbol) 'xml/element @(resolve 'clojure.data.xml.node/tagged-element)))) diff --git a/test-resources/pod.clj b/test-resources/pod.clj index 698471e0..b2fbc58f 100644 --- a/test-resources/pod.clj +++ b/test-resources/pod.clj @@ -50,7 +50,8 @@ (do (write {"format" (if (= format :json) "json" "edn") - "readers" {"ordered/map" "flatland.ordered.map/ordered-map"} + "readers" {"ordered/map" "flatland.ordered.map/ordered-map" + "ordered/set" "flatland.ordered.set/ordered-set"} "namespaces" [{"name" "pod.test-pod" "vars" [{"name" "add-sync"} @@ -64,7 +65,8 @@ {"name" "error"} {"name" "print"} {"name" "print-err"} - {"name" "ordered-map"}]}] + {"name" "ordered-map"} + {"name" "ordered-set"}]}] "ops" {"shutdown" {}}}) (recur)) :invoke (let [var (-> (get message "var") @@ -119,6 +121,11 @@ pod.test-pod/ordered-map (write {"value" "#ordered/map([:a 1] [:b 2])" + "status" ["done"] + "id" id}) + pod.test-pod/ordered-set + (write + {"value" "#ordered/set([:a 1 :b 2])" "status" ["done"] "id" id})) (recur)) @@ -159,4 +166,7 @@ (debug "Running reader test") (require '[flatland.ordered.map :refer [ordered-map]]) (prn (= ((resolve 'flatland.ordered.map/ordered-map) :a 1 :b 2) - ((resolve 'pod.test-pod/ordered-map))))))))) + ((resolve 'pod.test-pod/ordered-map)))) + (require '[flatland.ordered.set :refer [ordered-set]]) + (prn (= ((resolve 'flatland.ordered.set/ordered-set) :a 1 :b 2) + ((resolve 'pod.test-pod/ordered-set))))))))) diff --git a/test/babashka/main_test.clj b/test/babashka/main_test.clj index 3ee6ab1b..40a82c77 100644 --- a/test/babashka/main_test.clj +++ b/test/babashka/main_test.clj @@ -10,6 +10,7 @@ [clojure.string :as str] [clojure.test :as test :refer [deftest is testing]] [flatland.ordered.map :refer [ordered-map]] + [flatland.ordered.set :refer [ordered-set]] [sci.core :as sci])) (defn bb [input & args] @@ -632,7 +633,8 @@ (is (= 2 (bb nil "(set! *data-readers* {'t/tag inc}) #t/tag 1")))) (deftest ordered-test - (is (= (ordered-map :a 1 :b 2) (bb nil "(flatland.ordered.map/ordered-map :a 1 :b 2)")))) + (is (= (ordered-map :a 1 :b 2) (bb nil "(flatland.ordered.map/ordered-map :a 1 :b 2)"))) + (is (= (ordered-set :a 1 :b 2) (bb nil "(flatland.ordered.map/ordered-set :a 1 :b 2)")))) (deftest data-diff-test (is (= [[nil 1] [nil 2] [1 nil 2]] (bb nil "(require '[clojure.data :as d]) (d/diff [1 1 2] [1 2 2])"))))