From 136d33ac447dac96e9372f52c1ceada30dff1506 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Mon, 17 Feb 2020 16:42:36 -0500 Subject: [PATCH 001/158] Modifying .gitignore file for CLJS files. Adding dependencies --- .gitignore | 6 ++++++ deps.edn | 15 +++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 5ae188f..542fd8e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,9 @@ target repl bin scratch.clj +/checkouts/ +/target/ +pom.xml +pom.xml.asc +*.jar +*.class \ No newline at end of file diff --git a/deps.edn b/deps.edn index 55f5500..ce60e82 100644 --- a/deps.edn +++ b/deps.edn @@ -1,15 +1,22 @@ {:paths ["src" "test"] :deps {org.clojure/clojure {:mvn/version "1.10.0"} - mvxcvi/puget {:mvn/version "1.1.2"} + ;;mvxcvi/puget {:mvn/version "1.1.2"} + github-lambdaisland/puget + {:git/url "https://github.com/lambdaisland/puget" + :sha "ea860be1f0c6a5e406c45a414802c41e902d010c"} fipp {:mvn/version "0.6.17"} org.clojure/core.rrb-vector {:mvn/version "0.0.14"} tech.droit/clj-diff {:mvn/version "1.0.1"} mvxcvi/arrangement {:mvn/version "1.2.0"}} :aliases - {:dev + {:cljs + {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} + + :dev {} :test - {:extra-deps {lambdaisland/kaocha {:mvn/version "0.0-413"} - org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} + {:extra-deps {lambdaisland/kaocha {:mvn/version "0.0-581"} + lambdaisland/kaocha-cljs {:mvn/version "0.0-68"} + org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} From bb6453051300d0369cbbbdacc00a7c5da20ee5ab Mon Sep 17 00:00:00 2001 From: evinasgu Date: Mon, 17 Feb 2020 16:58:57 -0500 Subject: [PATCH 002/158] Adding Kaocha binstub --- .gitignore | 2 ++ package-lock.json | 11 +++++++++++ tests.edn | 5 ++++- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 542fd8e..6947f52 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ bin scratch.clj /checkouts/ /target/ +/.cljs_node_repl/ +/node_modules/ pom.xml pom.xml.asc *.jar diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e28c229 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "ws": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", + "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==" + } + } +} diff --git a/tests.edn b/tests.edn index d5e8da4..12ce290 100644 --- a/tests.edn +++ b/tests.edn @@ -1,4 +1,7 @@ #kaocha/v1 {:tests [{:id :unit :test-paths ["test"] - :source-paths ["src"]}]} + :source-paths ["src"]} + {:id :cljs + :type :kaocha.type/cljs + :test-paths ["test"]}]} From 65c2404ea06c89a9ee61bf872ff6a28966db6133 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Mon, 17 Feb 2020 17:04:15 -0500 Subject: [PATCH 003/158] Renaming files to cljc extension --- src/lambdaisland/{deep_diff.clj => deep_diff.cljc} | 0 src/lambdaisland/deep_diff/{diff.clj => diff.cljc} | 0 src/lambdaisland/deep_diff/{printer.clj => printer.cljc} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename src/lambdaisland/{deep_diff.clj => deep_diff.cljc} (100%) rename src/lambdaisland/deep_diff/{diff.clj => diff.cljc} (100%) rename src/lambdaisland/deep_diff/{printer.clj => printer.cljc} (100%) diff --git a/src/lambdaisland/deep_diff.clj b/src/lambdaisland/deep_diff.cljc similarity index 100% rename from src/lambdaisland/deep_diff.clj rename to src/lambdaisland/deep_diff.cljc diff --git a/src/lambdaisland/deep_diff/diff.clj b/src/lambdaisland/deep_diff/diff.cljc similarity index 100% rename from src/lambdaisland/deep_diff/diff.clj rename to src/lambdaisland/deep_diff/diff.cljc diff --git a/src/lambdaisland/deep_diff/printer.clj b/src/lambdaisland/deep_diff/printer.cljc similarity index 100% rename from src/lambdaisland/deep_diff/printer.clj rename to src/lambdaisland/deep_diff/printer.cljc From ac012b0aeacd50ce3575997202678a09cc7799eb Mon Sep 17 00:00:00 2001 From: evinasgu Date: Mon, 17 Feb 2020 19:00:18 -0500 Subject: [PATCH 004/158] Adding cljs-time dependency --- deps.edn | 5 +++-- package-lock.json | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index ce60e82..5066dc7 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,4 @@ -{:paths ["src" "test"] +{:paths ["resources" "src" "test"] :deps {org.clojure/clojure {:mvn/version "1.10.0"} ;;mvxcvi/puget {:mvn/version "1.1.2"} github-lambdaisland/puget @@ -7,7 +7,8 @@ fipp {:mvn/version "0.6.17"} org.clojure/core.rrb-vector {:mvn/version "0.0.14"} tech.droit/clj-diff {:mvn/version "1.0.1"} - mvxcvi/arrangement {:mvn/version "1.2.0"}} + mvxcvi/arrangement {:mvn/version "1.2.0"} + com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}} :aliases {:cljs diff --git a/package-lock.json b/package-lock.json index e28c229..0072123 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,6 +2,25 @@ "requires": true, "lockfileVersion": 1, "dependencies": { + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "ws": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", From 896a59d18b0005dc86b9f592098892079ac7b6d9 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Mon, 17 Feb 2020 22:22:55 -0500 Subject: [PATCH 005/158] Added dependency CLJS for clj-diff and starting modifications on printer namespace --- deps.edn | 13 +++++----- src/lambdaisland/deep_diff/printer.cljc | 34 +++++++++++++------------ 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/deps.edn b/deps.edn index 5066dc7..e34db00 100644 --- a/deps.edn +++ b/deps.edn @@ -1,14 +1,15 @@ {:paths ["resources" "src" "test"] - :deps {org.clojure/clojure {:mvn/version "1.10.0"} + :deps {org.clojure/clojure {:mvn/version "1.10.0"} ;;mvxcvi/puget {:mvn/version "1.1.2"} github-lambdaisland/puget {:git/url "https://github.com/lambdaisland/puget" :sha "ea860be1f0c6a5e406c45a414802c41e902d010c"} - fipp {:mvn/version "0.6.17"} - org.clojure/core.rrb-vector {:mvn/version "0.0.14"} - tech.droit/clj-diff {:mvn/version "1.0.1"} - mvxcvi/arrangement {:mvn/version "1.2.0"} - com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}} + fipp {:mvn/version "0.6.17"} + org.clojure/core.rrb-vector {:mvn/version "0.0.14"} + ;;tech.droit/clj-diff {:mvn/version "1.0.1"} + org.clojars.rymndhng/clj-diff {:mvn/version "1.1.1-SNAPSHOT"} + mvxcvi/arrangement {:mvn/version "1.2.0"} + com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}} :aliases {:cljs diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index 50bd5ad..a6d5dd5 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -6,9 +6,10 @@ [puget.printer :as puget] [arrangement.core] [lambdaisland.deep-diff.diff :as diff]) - (:import (java.text SimpleDateFormat) - (java.util TimeZone) - (java.sql Timestamp))) + #?(:clj (:import (java.text SimpleDateFormat) + (java.util TimeZone) + (java.sql Timestamp))) + ) (defn print-deletion [printer expr] (let [no-color (assoc printer :print-color false)] @@ -40,13 +41,14 @@ (def ^:private ^ThreadLocal thread-local-utc-date-format (proxy [ThreadLocal] [] (initialValue [] - (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") - (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + #?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") + (.setTimeZone (TimeZone/getTimeZone "GMT"))) + :cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")))))) (def ^:private print-date (puget/tagged-handler - 'inst - #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %))) + 'inst + #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %))) (def ^:private ^ThreadLocal thread-local-utc-timestamp-format (proxy [ThreadLocal] [] @@ -56,18 +58,18 @@ (def ^:private print-timestamp (puget/tagged-handler - 'inst - #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) - (format ".%09d-00:00" (.getNanos ^Timestamp %))))) + 'inst + #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) + (format ".%09d-00:00" (.getNanos ^Timestamp %))))) (def ^:private print-calendar (puget/tagged-handler - 'inst - #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) - offset-minutes (- (.length formatted) 2)] - (str (subs formatted 0 offset-minutes) - ":" - (subs formatted offset-minutes))))) + 'inst + #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) + offset-minutes (- (.length formatted) 2)] + (str (subs formatted 0 offset-minutes) + ":" + (subs formatted offset-minutes))))) (def ^:private print-handlers {'lambdaisland.deep_diff.diff.Deletion From af5c2667f7dfd4b188ce9d48ee0c0b76fd46c738 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Wed, 19 Feb 2020 12:00:02 -0500 Subject: [PATCH 006/158] Finishing changes on print namespace --- src/lambdaisland/deep_diff/printer.cljc | 53 ++++++++++++++++--------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index a6d5dd5..af71aec 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -5,11 +5,14 @@ [puget.dispatch] [puget.printer :as puget] [arrangement.core] - [lambdaisland.deep-diff.diff :as diff]) + [lambdaisland.deep-diff.diff :as diff] + #?@(:cljs + [[cljs-time.coerce :refer [from-date]] + [cljs-time.format :refer [formatter unparse]] + [goog.object :as gobj]])) #?(:clj (:import (java.text SimpleDateFormat) (java.util TimeZone) - (java.sql Timestamp))) - ) + (java.sql Timestamp)))) (defn print-deletion [printer expr] (let [no-color (assoc printer :print-color false)] @@ -48,19 +51,28 @@ (def ^:private print-date (puget/tagged-handler 'inst - #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %))) + #?(:clj #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %) + :cljs (fun [input-date] + (let [dt (from-date input-date)] + (cljs-time.format/unparse thread-local-utc-date-format dt)))))) (def ^:private ^ThreadLocal thread-local-utc-timestamp-format (proxy [ThreadLocal] [] (initialValue [] - (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") - (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + ;; (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") + ;; (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + #?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") + (.setTimeZone (TimeZone/getTimeZone "GMT"))) + :cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))))) (def ^:private print-timestamp (puget/tagged-handler 'inst - #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) - (format ".%09d-00:00" (.getNanos ^Timestamp %))))) + #?(:clj #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) + (format ".%09d-00:00" (.getNanos ^Timestamp %))) + :cljs (fn [input-date] + (let [dt (from-date input-date)] + (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) (def ^:private print-calendar (puget/tagged-handler @@ -81,13 +93,16 @@ 'lambdaisland.deep_diff.diff.Mismatch print-mismatch - 'clojure.lang.PersistentArrayMap + #?(:clj 'clojure.lang.PersistentArrayMap + :cljs 'cljs.core/PersistentArrayMap) map-handler - 'clojure.lang.PersistentHashMap + #?(:clj 'clojure.lang.PersistentHashMap + :cljs cljs.core/PersistentHashMap) map-handler - 'clojure.lang.MapEntry + #?(:clj 'clojure.lang.MapEntry + :cljs 'cljs.core/MapEntry) (fn [printer value] (let [k (key value) v (val value)] @@ -111,17 +126,19 @@ (if (coll? v) (:map-coll-separator printer) " ") (puget/format-doc printer v)])))) - 'java.util.Date + #?(:clj 'java.util.Date + :cljs 'js/Date) print-date - 'java.util.GregorianCalendar - print-calendar + ;; 'java.util.GregorianCalendar + ;; print-calendar - 'java.sql.Timestamp - print-timestamp + ;; 'java.sql.Timestamp + ;; print-timestamp - 'java.util.UUID - (puget/tagged-handler 'uuid str)}) + #?(:clj java.util.UUID + :cljs uuid?) + (tagged-handler 'uuid str)} (defn- print-handler-resolver [extra-handlers] (fn [^Class klz] From 4770c038f93dc05d1a58723fa3a59184b63e96a8 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Thu, 20 Feb 2020 18:03:33 -0500 Subject: [PATCH 007/158] Adding support for uuid --- src/lambdaisland/deep_diff/printer.cljc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index af71aec..c15c346 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -72,7 +72,7 @@ (format ".%09d-00:00" (.getNanos ^Timestamp %))) :cljs (fn [input-date] (let [dt (from-date input-date)] - (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) + (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) ;;TODO format ".%09d-00:00" (def ^:private print-calendar (puget/tagged-handler @@ -136,8 +136,8 @@ ;; 'java.sql.Timestamp ;; print-timestamp - #?(:clj java.util.UUID - :cljs uuid?) + #?(:clj 'java.util.UUID + :cljs 'cljs.core.uuid) (tagged-handler 'uuid str)} (defn- print-handler-resolver [extra-handlers] From 10d76ad5a45a33b9ebc6e5b22a6594a36c2f3d7a Mon Sep 17 00:00:00 2001 From: evinasgu Date: Sun, 23 Feb 2020 23:46:35 -0500 Subject: [PATCH 008/158] Solving errors --- deps.edn | 22 +++++----- src/lambdaisland/deep_diff/diff.cljc | 58 ++++++++++++++++--------- src/lambdaisland/deep_diff/printer.cljc | 4 +- tests.edn | 7 +-- 4 files changed, 51 insertions(+), 40 deletions(-) diff --git a/deps.edn b/deps.edn index e34db00..a7ca4c2 100644 --- a/deps.edn +++ b/deps.edn @@ -1,9 +1,8 @@ {:paths ["resources" "src" "test"] :deps {org.clojure/clojure {:mvn/version "1.10.0"} ;;mvxcvi/puget {:mvn/version "1.1.2"} - github-lambdaisland/puget - {:git/url "https://github.com/lambdaisland/puget" - :sha "ea860be1f0c6a5e406c45a414802c41e902d010c"} + github-lambdaisland/puget {:git/url "https://github.com/lambdaisland/puget" + :sha "ea860be1f0c6a5e406c45a414802c41e902d010c"} fipp {:mvn/version "0.6.17"} org.clojure/core.rrb-vector {:mvn/version "0.0.14"} ;;tech.droit/clj-diff {:mvn/version "1.0.1"} @@ -11,14 +10,13 @@ mvxcvi/arrangement {:mvn/version "1.2.0"} com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}} - :aliases - {:cljs - {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} + :aliases {:cljs + {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} - :dev - {} + :dev + {} - :test - {:extra-deps {lambdaisland/kaocha {:mvn/version "0.0-581"} - lambdaisland/kaocha-cljs {:mvn/version "0.0-68"} - org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} + :test + {:extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} + lambdaisland/kaocha-cljs {:mvn/version "RELEASE"} + org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index cf70cf2..9b290a9 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -97,11 +97,11 @@ (diff-seq-insertions ins) (into [])))) -(defn- val-type [val] +#?(:clj (defn- val-type [val] (let [t (type val)] (if (class? t) (symbol (.getName ^Class t)) - t))) + t)))) (defn- diff-map [exp act] (first @@ -136,41 +136,56 @@ (diff-similar exp act) (diff-atom exp act))) -(extend nil - Diff - {:diff-similar diff-atom}) - -(extend Object - Diff - {:diff-similar (fn [exp act] - (if (.isArray (.getClass ^Object exp)) - (diff-seq exp act) - (diff-atom exp act)))}) +#?(:clj (extend nil + Diff + {:diff-similar diff-atom}) + :cljs (extend-type nil ;; I am not pretty sure about this. Lets wait for unit tests + Diff + {:diff-similar diff-atom})) + +#?(:clj (extend Object + Diff + {:diff-similar (fn [exp act] + (if (.isArray (.getClass ^Object exp)) + (diff-seq exp act) + (diff-atom exp act)))}) + :cljs (extend-type object + Diff + {:diff-similar (fn [exp act] + (if (array? exp) + (diff-seq exp act) + (diff-atom exp act)))})) (extend-protocol Diff - java.util.List + #?(:clj java.util.List + :cljs cljs.core.list) (diff-similar [exp act] (diff-seq exp act)) - java.util.Set + #?(:clj java.util.Set + :cljs cljs.core.set) (diff-similar [exp act] (let [exp-seq (seq exp) act-seq (seq act)] (set (diff-seq exp-seq (concat (filter act exp-seq) (remove exp act-seq)))))) - java.util.Map + #?(:clj java.util.Map + :cljs cljs.core.map) (diff-similar [exp act] (diff-map exp act))) (extend-protocol Undiff - java.util.List + #?(:clj java.util.List + :cljs cljs.core.list) (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) - java.util.Set + #?(:clj java.util.Set + :cljs cljs.core.set) (left-undiff [s] (set (left-undiff (seq s)))) (right-undiff [s] (set (right-undiff (seq s)))) - java.util.Map + #?(:clj java.util.Map + :cljs cljs.core.map) (left-undiff [m] (into {} (comp (remove #(instance? Insertion (key %))) @@ -192,5 +207,8 @@ Deletion (left-undiff [m] (get m :-))) -(extend nil Undiff {:left-undiff identity :right-undiff identity}) -(extend Object Undiff {:left-undiff identity :right-undiff identity}) +#?(:clj (extend nil Undiff {:left-undiff identity :right-undiff identity}) + :cljs (extend-type nil Undiff {:left-undiff identity :right-undiff identity})) + +$?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity}) + :cljs (extend-type object Undiff {:left-undiff identity :right-undiff identity})) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index c15c346..cf86b79 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -59,8 +59,6 @@ (def ^:private ^ThreadLocal thread-local-utc-timestamp-format (proxy [ThreadLocal] [] (initialValue [] - ;; (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") - ;; (.setTimeZone (TimeZone/getTimeZone "GMT")))))) #?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") (.setTimeZone (TimeZone/getTimeZone "GMT"))) :cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))))) @@ -138,7 +136,7 @@ #?(:clj 'java.util.UUID :cljs 'cljs.core.uuid) - (tagged-handler 'uuid str)} + (tagged-handler 'uuid str)}) (defn- print-handler-resolver [extra-handlers] (fn [^Class klz] diff --git a/tests.edn b/tests.edn index 12ce290..58bf3fb 100644 --- a/tests.edn +++ b/tests.edn @@ -1,7 +1,4 @@ #kaocha/v1 -{:tests [{:id :unit - :test-paths ["test"] - :source-paths ["src"]} +{:tests [{:id :clj} {:id :cljs - :type :kaocha.type/cljs - :test-paths ["test"]}]} + :type :kaocha.type/cljs}]} From 70a2958ad787ab75d82e52a52b1389815dfe195c Mon Sep 17 00:00:00 2001 From: evinasgu Date: Mon, 24 Feb 2020 19:13:44 -0500 Subject: [PATCH 009/158] Fixing errors --- src/lambdaisland/deep_diff/diff.cljc | 40 +++---- src/lambdaisland/deep_diff/printer.cljc | 141 ++++++++++++++---------- 2 files changed, 104 insertions(+), 77 deletions(-) diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index 9b290a9..fe3902a 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -2,7 +2,7 @@ (:require [clojure.data :as data] [clj-diff.core :as seq-diff])) -(declare diff) +(declare local-diff) (defrecord Mismatch [- +]) (defrecord Deletion [-]) @@ -70,7 +70,7 @@ (map-indexed (fn [idx v] (if (contains? replacements idx) - (diff v (get replacements idx)) + (local-diff v (get replacements idx)) v)) s)) @@ -98,10 +98,10 @@ (into [])))) #?(:clj (defn- val-type [val] - (let [t (type val)] - (if (class? t) - (symbol (.getName ^Class t)) - t)))) + (let [t (type val)] + (if (class? t) + (symbol (.getName ^Class t)) + t)))) (defn- diff-map [exp act] (first @@ -116,7 +116,7 @@ (assoc (->Deletion k) (exp k)) (not (contains? del idx)) - (assoc k (diff (get exp k) (get act k))) + (assoc k (local-diff (get exp k) (get act k))) (contains? ins idx) (into (map (juxt ->Insertion (partial get act))) (get ins idx))) @@ -131,7 +131,7 @@ exp (->Mismatch exp act))) -(defn diff [exp act] +(defn local-diff [exp act] (if (= (data/equality-partition exp) (data/equality-partition act)) (diff-similar exp act) (diff-atom exp act))) @@ -139,9 +139,9 @@ #?(:clj (extend nil Diff {:diff-similar diff-atom}) - :cljs (extend-type nil ;; I am not pretty sure about this. Lets wait for unit tests + :cljs (extend-type nil Diff - {:diff-similar diff-atom})) + (diff-similar [x y] (diff-atom x y)))) #?(:clj (extend Object Diff @@ -151,10 +151,9 @@ (diff-atom exp act)))}) :cljs (extend-type object Diff - {:diff-similar (fn [exp act] - (if (array? exp) - (diff-seq exp act) - (diff-atom exp act)))})) + (diff-similar [x y] (if (array? x) + (diff-seq x y) + (diff-atom x y))))) (extend-protocol Diff #?(:clj java.util.List @@ -168,7 +167,6 @@ act-seq (seq act)] (set (diff-seq exp-seq (concat (filter act exp-seq) (remove exp act-seq)))))) - #?(:clj java.util.Map :cljs cljs.core.map) (diff-similar [exp act] (diff-map exp act))) @@ -208,7 +206,11 @@ (left-undiff [m] (get m :-))) #?(:clj (extend nil Undiff {:left-undiff identity :right-undiff identity}) - :cljs (extend-type nil Undiff {:left-undiff identity :right-undiff identity})) - -$?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity}) - :cljs (extend-type object Undiff {:left-undiff identity :right-undiff identity})) + :cljs (extend-type nil Undiff + (left-undiff [m] (identity m)) + (right-undiff [m] (identity m)))) + +#?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity}) + :cljs (extend-type object Undiff + (left-undiff [m] (identity m)) + (right-undiff [m] (identity m)))) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index cf86b79..bb3bb9f 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -14,6 +14,18 @@ (java.util TimeZone) (java.sql Timestamp)))) +(defn get-type-name + "Get the type of the given object as a string. For Clojure, gets the name of + the class of the object. For ClojureScript, gets either the `name` attribute + or the protocol name if the `name` attribute doesn't exist." + [x] + #?(:clj (.getName (class x)) + :cljs (let [t (type x) + n (.-name t)] + (if (empty? n) + (pr-str t) + n)))) + (defn print-deletion [printer expr] (let [no-color (assoc printer :print-color false)] (color/document printer ::deletion [:span "-" (puget/format-doc no-color (:- expr))]))) @@ -41,6 +53,29 @@ [:align (interpose [:span (:map-delimiter this) :line] entries)] (color/document this :delimiter "}")])) +(defn- map-entry-handler [printer value] + (let [k (key value) + v (val value)] + (let [no-color (assoc printer :print-color false)] + (cond + (instance? lambdaisland.deep_diff.diff.Insertion k) + [:span + (print-insertion printer k) + (if (coll? v) (:map-coll-separator printer) " ") + (color/document printer ::insertion (puget/format-doc no-color v))] + + (instance? lambdaisland.deep_diff.diff.Deletion k) + [:span + (print-deletion printer k) + (if (coll? v) (:map-coll-separator printer) " ") + (color/document printer ::deletion (puget/format-doc no-color v))] + + :else + [:span + (puget/format-doc printer k) + (if (coll? v) (:map-coll-separator printer) " ") + (puget/format-doc printer v)])))) + (def ^:private ^ThreadLocal thread-local-utc-date-format (proxy [ThreadLocal] [] (initialValue [] @@ -70,7 +105,7 @@ (format ".%09d-00:00" (.getNanos ^Timestamp %))) :cljs (fn [input-date] (let [dt (from-date input-date)] - (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) ;;TODO format ".%09d-00:00" + (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) (def ^:private print-calendar (puget/tagged-handler @@ -81,7 +116,7 @@ ":" (subs formatted offset-minutes))))) -(def ^:private print-handlers +(def ^:private common-handlers {'lambdaisland.deep_diff.diff.Deletion print-deletion @@ -89,67 +124,57 @@ print-insertion 'lambdaisland.deep_diff.diff.Mismatch - print-mismatch - - #?(:clj 'clojure.lang.PersistentArrayMap - :cljs 'cljs.core/PersistentArrayMap) - map-handler - - #?(:clj 'clojure.lang.PersistentHashMap - :cljs cljs.core/PersistentHashMap) - map-handler - - #?(:clj 'clojure.lang.MapEntry - :cljs 'cljs.core/MapEntry) - (fn [printer value] - (let [k (key value) - v (val value)] - (let [no-color (assoc printer :print-color false)] - (cond - (instance? lambdaisland.deep_diff.diff.Insertion k) - [:span - (print-insertion printer k) - (if (coll? v) (:map-coll-separator printer) " ") - (color/document printer ::insertion (puget/format-doc no-color v))] - - (instance? lambdaisland.deep_diff.diff.Deletion k) - [:span - (print-deletion printer k) - (if (coll? v) (:map-coll-separator printer) " ") - (color/document printer ::deletion (puget/format-doc no-color v))] - - :else - [:span - (puget/format-doc printer k) - (if (coll? v) (:map-coll-separator printer) " ") - (puget/format-doc printer v)])))) - - #?(:clj 'java.util.Date - :cljs 'js/Date) - print-date - - ;; 'java.util.GregorianCalendar - ;; print-calendar - - ;; 'java.sql.Timestamp - ;; print-timestamp - - #?(:clj 'java.util.UUID - :cljs 'cljs.core.uuid) - (tagged-handler 'uuid str)}) + print-mismatch}) + +#?(:clj + (def ^:private print-handlers + {'clojure.lang.PersistentArrayMap + map-handler + + 'clojure.lang.PersistentHashMap + map-handler + + 'clojure.lang.MapEntry + map-entry-handler + + 'java.util.Date + print-date + + 'java.util.GregorianCalendar + print-calendar + + 'java.sql.Timestamp + print-timestamp}) + :cljs + (def ^:private print-handlers + {'cljs.core.PersistentArrayMap + map-handler + + 'cljs.core.PersistentHashMap + map-handler + + 'cljs.core.MapEntry + map-entry-handler + + 'js/Date + print-date + + 'cljs.core.uuid + (puget/tagged-handler 'uuid str)})) + (defn- print-handler-resolver [extra-handlers] (fn [^Class klz] - (and klz (get (merge @#'print-handlers extra-handlers) - (symbol (.getName klz)))))) + (and klz (get (merge @#'common-handlers @#'print-handlers extra-handlers) + (symbol (get-type-name klz)))))) -(defn register-print-handler! - "Register an extra print handler. +;; (defn register-print-handler! +;; "Register an extra print handler. - `type` must be a symbol of the fully qualified class name. `handler` is a - Puget handler function of two arguments, `printer` and `value`." - [type handler] - (alter-var-root #'print-handlers assoc type handler)) +;; `type` must be a symbol of the fully qualified class name. `handler` is a +;; Puget handler function of two arguments, `printer` and `value`." +;; [type handler] +;; (alter-var-root #'print-handlers assoc type handler)) (defn puget-printer ([] From b6c954690af844479686821f95b85b835e2a2c5a Mon Sep 17 00:00:00 2001 From: evinasgu Date: Tue, 25 Feb 2020 21:31:12 -0500 Subject: [PATCH 010/158] Adding handlers and fixing errors --- src/lambdaisland/deep_diff.cljc | 2 +- src/lambdaisland/deep_diff/diff.cljc | 50 ++++++++++++++++--------- src/lambdaisland/deep_diff/printer.cljc | 26 +++++++------ 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/src/lambdaisland/deep_diff.cljc b/src/lambdaisland/deep_diff.cljc index fa27d50..7d35544 100644 --- a/src/lambdaisland/deep_diff.cljc +++ b/src/lambdaisland/deep_diff.cljc @@ -2,7 +2,7 @@ (:require [lambdaisland.deep-diff.diff :as diff] [lambdaisland.deep-diff.printer :as printer])) -(defn diff +(defn call-diff "Compare two values recursively. The result is a data structure similar to the ones passed in, but with diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index fe3902a..bbc89de 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -2,7 +2,7 @@ (:require [clojure.data :as data] [clj-diff.core :as seq-diff])) -(declare local-diff) +(declare diff) (defrecord Mismatch [- +]) (defrecord Deletion [-]) @@ -70,7 +70,7 @@ (map-indexed (fn [idx v] (if (contains? replacements idx) - (local-diff v (get replacements idx)) + (diff v (get replacements idx)) v)) s)) @@ -116,7 +116,7 @@ (assoc (->Deletion k) (exp k)) (not (contains? del idx)) - (assoc k (local-diff (get exp k) (get act k))) + (assoc k (diff (get exp k) (get act k))) (contains? ins idx) (into (map (juxt ->Insertion (partial get act))) (get ins idx))) @@ -127,11 +127,13 @@ exp-ks)))) (defn- diff-atom [exp act] - (if (= exp act) + (if #?(:clj (= exp act) + :cljs (= (js->clj exp) (js->clj act))) exp - (->Mismatch exp act))) + ((->Mismatch exp act)))) -(defn local-diff [exp act] +(defn diff [exp act] + ;; (print "Hola from diff namespace")) (if (= (data/equality-partition exp) (data/equality-partition act)) (diff-similar exp act) (diff-atom exp act))) @@ -149,41 +151,55 @@ (if (.isArray (.getClass ^Object exp)) (diff-seq exp act) (diff-atom exp act)))}) - :cljs (extend-type object + :cljs (extend-type js/Number Diff - (diff-similar [x y] (if (array? x) - (diff-seq x y) - (diff-atom x y))))) + (diff-similar [x y] (diff-atom (js/Number x) (js/Number y))))) + +#?(:cljs (extend-type js/String + Diff + (diff-similar [x y] (diff-atom (js/String x) (js/String y))))) + +#?(:cljs (extend-type js/Boolean + Diff + (diff-similar [x y] (diff-atom (js/Boolean x) (js/Boolean y))))) + +#?(:cljs (extend-type js/Date + Diff + (diff-similar [x y] (diff-atom (js/Date x) (js/Date y))))) (extend-protocol Diff #?(:clj java.util.List - :cljs cljs.core.list) + :cljs cljs.core/List) (diff-similar [exp act] (diff-seq exp act)) + #?(:clj java.util.Vector + :cljs cljs.core/PersistentVector) + (diff-similar [exp act] (diff-seq exp act)) + #?(:clj java.util.Set - :cljs cljs.core.set) + :cljs cljs.core/PersistentHashSet) (diff-similar [exp act] (let [exp-seq (seq exp) act-seq (seq act)] (set (diff-seq exp-seq (concat (filter act exp-seq) (remove exp act-seq)))))) #?(:clj java.util.Map - :cljs cljs.core.map) + :cljs cljs.core/PersistentArrayMap) (diff-similar [exp act] (diff-map exp act))) (extend-protocol Undiff #?(:clj java.util.List - :cljs cljs.core.list) + :cljs cljs.core/List) (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) #?(:clj java.util.Set - :cljs cljs.core.set) + :cljs cljs.core/PersistentHashSet) (left-undiff [s] (set (left-undiff (seq s)))) (right-undiff [s] (set (right-undiff (seq s)))) #?(:clj java.util.Map - :cljs cljs.core.map) + :cljs cljs.core/PersistentArrayMap) (left-undiff [m] (into {} (comp (remove #(instance? Insertion (key %))) @@ -211,6 +227,6 @@ (right-undiff [m] (identity m)))) #?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity}) - :cljs (extend-type object Undiff + :cljs (extend-type js/Number Undiff (left-undiff [m] (identity m)) (right-undiff [m] (identity m)))) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index bb3bb9f..6687d9b 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -9,6 +9,7 @@ #?@(:cljs [[cljs-time.coerce :refer [from-date]] [cljs-time.format :refer [formatter unparse]] + [goog.string :refer [format]] [goog.object :as gobj]])) #?(:clj (:import (java.text SimpleDateFormat) (java.util TimeZone) @@ -76,27 +77,30 @@ (if (coll? v) (:map-coll-separator printer) " ") (puget/format-doc printer v)])))) -(def ^:private ^ThreadLocal thread-local-utc-date-format - (proxy [ThreadLocal] [] - (initialValue [] - #?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") - (.setTimeZone (TimeZone/getTimeZone "GMT"))) - :cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")))))) + +#?(:clj (def ^:private ^ThreadLocal thread-local-utc-date-format + (proxy [ThreadLocal] [] + (initialValue [] + (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") + (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + :cljs (def thread-local-utc-date-format + (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")))) (def ^:private print-date (puget/tagged-handler 'inst #?(:clj #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %) - :cljs (fun [input-date] + :cljs (fn [input-date] (let [dt (from-date input-date)] (cljs-time.format/unparse thread-local-utc-date-format dt)))))) -(def ^:private ^ThreadLocal thread-local-utc-timestamp-format +#?(:clj (def ^:private ^ThreadLocal thread-local-utc-timestamp-format (proxy [ThreadLocal] [] (initialValue [] - #?(:clj (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") - (.setTimeZone (TimeZone/getTimeZone "GMT"))) - :cljs (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))))) + (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") + (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + :cljs (def thread-local-utc-timestamp-format + (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))) (def ^:private print-timestamp (puget/tagged-handler From 9c7294c6af8b87d0a5ee95cafd9a93284abb90ac Mon Sep 17 00:00:00 2001 From: evinasgu Date: Tue, 25 Feb 2020 23:15:19 -0500 Subject: [PATCH 011/158] Fixing diff. Print pending --- src/lambdaisland/deep_diff/diff.cljc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index bbc89de..f0019ca 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -130,7 +130,7 @@ (if #?(:clj (= exp act) :cljs (= (js->clj exp) (js->clj act))) exp - ((->Mismatch exp act)))) + (->Mismatch exp act))) (defn diff [exp act] ;; (print "Hola from diff namespace")) @@ -172,9 +172,9 @@ :cljs cljs.core/List) (diff-similar [exp act] (diff-seq exp act)) - #?(:clj java.util.Vector - :cljs cljs.core/PersistentVector) - (diff-similar [exp act] (diff-seq exp act)) + ;; #?(:clj java.util.Vector + ;; :cljs cljs.core/PersistentVector) + ;; (diff-similar [exp act] (diff-seq exp act))) #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) From d86cd102f4151e5341938e25120fdbf52bc6d1bc Mon Sep 17 00:00:00 2001 From: evinasgu Date: Tue, 25 Feb 2020 23:24:21 -0500 Subject: [PATCH 012/158] printer functionality working. Unit tests for cljs pending --- src/lambdaisland/deep_diff.cljc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lambdaisland/deep_diff.cljc b/src/lambdaisland/deep_diff.cljc index 7d35544..cab561b 100644 --- a/src/lambdaisland/deep_diff.cljc +++ b/src/lambdaisland/deep_diff.cljc @@ -19,14 +19,14 @@ [expected actual] (diff/diff expected actual)) -(defn printer +(defn build-printer "Construct a Puget printer instance suitable for printing diffs. Extra options are passed on to Puget. Extra type handlers can be provides as `:extra-handlers` (a map from symbol to function), or by using [[lambdaisland.deep-diff.printer/register-print-handler!]]" ([] - (printer {})) + (build-printer {})) ([opts] (printer/puget-printer opts))) @@ -36,7 +36,7 @@ Pretty print a diffed data structure, as obtained from [[diff]]. Optionally takes a Puget printer instance, see [[printer]]." ([diff] - (pretty-print diff (printer))) + (pretty-print diff (build-printer))) ([diff printer] (-> diff (printer/format-doc printer) From fdc5e7bbcf958c4479167fc1f063e1eab006adf9 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 26 Feb 2020 12:40:31 +0100 Subject: [PATCH 013/158] Start converting tests --- .dir-locals.el | 9 +- .gitignore | 2 +- src/lambdaisland/deep_diff/diff.cljc | 110 ++++++++++-------- .../{diff_test.clj => diff_test.cljc} | 2 +- test/lambdaisland/deep_diff/printer_test.clj | 2 +- 5 files changed, 70 insertions(+), 55 deletions(-) rename test/lambdaisland/deep_diff/{diff_test.clj => diff_test.cljc} (99%) diff --git a/.dir-locals.el b/.dir-locals.el index c9629d5..2b99263 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -1 +1,8 @@ -((nil . ((cider-clojure-cli-global-options . "-A:dev:test")))) +((nil . ((cider-clojure-cli-global-options . "-A:dev:test") + (cider-repl-display-help-banner . nil) + (cider-redirect-server-output-to-repl . t) + (cider-default-cljs-repl . node))) + (clojure . ((eval . (define-clojure-indent + (assoc 0) + (ex-info 0) + (for* 1)))))) diff --git a/.gitignore b/.gitignore index 6947f52..1daacdf 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ scratch.clj pom.xml pom.xml.asc *.jar -*.class \ No newline at end of file +*.classout diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index f0019ca..5e6d2f2 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -2,19 +2,19 @@ (:require [clojure.data :as data] [clj-diff.core :as seq-diff])) -(declare diff) +(declare diff diff-similar left-undiff right-undiff) (defrecord Mismatch [- +]) (defrecord Deletion [-]) (defrecord Insertion [+]) (defprotocol Diff - (diff-similar [x y])) + (-diff-similar [x y])) ;; For property based testing (defprotocol Undiff - (left-undiff [x]) - (right-undiff [x])) + (-left-undiff [x]) + (-right-undiff [x])) (defn- shift-insertions [ins] (reduce (fn [res idx] @@ -126,107 +126,115 @@ {}) 0] exp-ks)))) +(defn- primitive? [x] + (or (number? x) (string? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) + (defn- diff-atom [exp act] - (if #?(:clj (= exp act) - :cljs (= (js->clj exp) (js->clj act))) + (if (= exp act) exp (->Mismatch exp act))) +(defn- diff-similar [x y] + #?(:clj (-diff-similar x y) + :cljs + (if (primitive? x) + (diff-atom x y) + (-diff-similar x y)))) + +(defn- left-undiff [m] + #?(:clj (-left-undiff m) + :cljs + (if (primitive? m) + m + (-left-undiff m)))) + +(defn- right-undiff [m] + #?(:clj (-right-undiff m) + :cljs + (if (primitive? m) + m + (-right-undiff m)))) + (defn diff [exp act] - ;; (print "Hola from diff namespace")) (if (= (data/equality-partition exp) (data/equality-partition act)) (diff-similar exp act) (diff-atom exp act))) #?(:clj (extend nil Diff - {:diff-similar diff-atom}) + {:-diff-similar diff-atom}) :cljs (extend-type nil Diff - (diff-similar [x y] (diff-atom x y)))) + (-diff-similar [x y] (diff-atom x y)))) #?(:clj (extend Object Diff - {:diff-similar (fn [exp act] - (if (.isArray (.getClass ^Object exp)) - (diff-seq exp act) - (diff-atom exp act)))}) - :cljs (extend-type js/Number - Diff - (diff-similar [x y] (diff-atom (js/Number x) (js/Number y))))) + {:-diff-similar (fn [exp act] + (if (.isArray (.getClass ^Object exp)) + (diff-seq exp act) + (diff-atom exp act)))})) -#?(:cljs (extend-type js/String - Diff - (diff-similar [x y] (diff-atom (js/String x) (js/String y))))) - -#?(:cljs (extend-type js/Boolean - Diff - (diff-similar [x y] (diff-atom (js/Boolean x) (js/Boolean y))))) - -#?(:cljs (extend-type js/Date - Diff - (diff-similar [x y] (diff-atom (js/Date x) (js/Date y))))) (extend-protocol Diff #?(:clj java.util.List :cljs cljs.core/List) - (diff-similar [exp act] (diff-seq exp act)) + (-diff-similar [exp act] (diff-seq exp act)) + + #?@(:cljs + [cljs.core/PersistentVector + (-diff-similar [exp act] (diff-seq exp act)) - ;; #?(:clj java.util.Vector - ;; :cljs cljs.core/PersistentVector) - ;; (diff-similar [exp act] (diff-seq exp act))) + cljs.core/PersistentHashMap + (-diff-similar [exp act] (diff-map exp act))]) #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) - (diff-similar [exp act] + (-diff-similar [exp act] (let [exp-seq (seq exp) act-seq (seq act)] (set (diff-seq exp-seq (concat (filter act exp-seq) (remove exp act-seq)))))) #?(:clj java.util.Map :cljs cljs.core/PersistentArrayMap) - (diff-similar [exp act] (diff-map exp act))) + (-diff-similar [exp act] (diff-map exp act))) (extend-protocol Undiff #?(:clj java.util.List :cljs cljs.core/List) - (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) - (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) + (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) - (left-undiff [s] (set (left-undiff (seq s)))) - (right-undiff [s] (set (right-undiff (seq s)))) + (-left-undiff [s] (set (left-undiff (seq s)))) + (-right-undiff [s] (set (right-undiff (seq s)))) #?(:clj java.util.Map :cljs cljs.core/PersistentArrayMap) - (left-undiff [m] + (-left-undiff [m] (into {} (comp (remove #(instance? Insertion (key %))) (map (juxt (comp left-undiff key) (comp left-undiff val)))) m)) - (right-undiff [m] + (-right-undiff [m] (into {} (comp (remove #(instance? Deletion (key %))) (map (juxt (comp right-undiff key) (comp right-undiff val)))) m)) Mismatch - (left-undiff [m] (get m :-)) - (right-undiff [m] (get m :+)) + (-left-undiff [m] (get m :-)) + (-right-undiff [m] (get m :+)) Insertion - (right-undiff [m] (get m :+)) + (-right-undiff [m] (get m :+)) Deletion - (left-undiff [m] (get m :-))) + (-left-undiff [m] (get m :-))) -#?(:clj (extend nil Undiff {:left-undiff identity :right-undiff identity}) - :cljs (extend-type nil Undiff - (left-undiff [m] (identity m)) - (right-undiff [m] (identity m)))) +(extend-type nil + Undiff + (-left-undiff [m] m) + (-right-undiff [m] m)) -#?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity}) - :cljs (extend-type js/Number Undiff - (left-undiff [m] (identity m)) - (right-undiff [m] (identity m)))) +#?(:clj (extend Object Undiff {:-left-undiff identity :-right-undiff identity})) diff --git a/test/lambdaisland/deep_diff/diff_test.clj b/test/lambdaisland/deep_diff/diff_test.cljc similarity index 99% rename from test/lambdaisland/deep_diff/diff_test.clj rename to test/lambdaisland/deep_diff/diff_test.cljc index aa7213c..5de5420 100644 --- a/test/lambdaisland/deep_diff/diff_test.clj +++ b/test/lambdaisland/deep_diff/diff_test.cljc @@ -1,5 +1,5 @@ (ns lambdaisland.deep-diff.diff-test - (:require [clojure.test :refer :all] + (:require [clojure.test :refer [deftest testing is are]] [clojure.test.check :as tc] [clojure.test.check.clojure-test :refer [defspec]] [clojure.test.check.generators :as gen] diff --git a/test/lambdaisland/deep_diff/printer_test.clj b/test/lambdaisland/deep_diff/printer_test.clj index e442ce3..ca849b9 100644 --- a/test/lambdaisland/deep_diff/printer_test.clj +++ b/test/lambdaisland/deep_diff/printer_test.clj @@ -1,5 +1,5 @@ (ns lambdaisland.deep-diff.printer-test - (:require [clojure.test :refer :all] + (:require [clojure.test :refer [deftest testing is are]] [lambdaisland.deep-diff.diff :as diff] [lambdaisland.deep-diff.printer :as printer]) (:import (java.sql Timestamp) From 9c05be1150d9d2fff5e915b12461047be0b00c21 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Wed, 26 Feb 2020 08:35:42 -0500 Subject: [PATCH 014/158] Cleaning namespaces for coding style --- src/lambdaisland/deep_diff/printer.cljc | 95 ++++++++++++++----------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index 6687d9b..cf95493 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -9,23 +9,25 @@ #?@(:cljs [[cljs-time.coerce :refer [from-date]] [cljs-time.format :refer [formatter unparse]] - [goog.string :refer [format]] - [goog.object :as gobj]])) - #?(:clj (:import (java.text SimpleDateFormat) - (java.util TimeZone) - (java.sql Timestamp)))) + [goog.string :refer [format]]])) + #?(:clj + (:import (java.text SimpleDateFormat) + (java.util TimeZone) + (java.sql Timestamp)))) (defn get-type-name "Get the type of the given object as a string. For Clojure, gets the name of the class of the object. For ClojureScript, gets either the `name` attribute or the protocol name if the `name` attribute doesn't exist." [x] - #?(:clj (.getName (class x)) - :cljs (let [t (type x) - n (.-name t)] - (if (empty? n) - (pr-str t) - n)))) + #?(:clj + (.getName (class x)) + :cljs + (let [t (type x) + n (.-name t)] + (if (empty? n) + (pr-str t) + n)))) (defn print-deletion [printer expr] (let [no-color (assoc printer :print-color false)] @@ -77,39 +79,46 @@ (if (coll? v) (:map-coll-separator printer) " ") (puget/format-doc printer v)])))) - -#?(:clj (def ^:private ^ThreadLocal thread-local-utc-date-format - (proxy [ThreadLocal] [] - (initialValue [] - (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") - (.setTimeZone (TimeZone/getTimeZone "GMT")))))) - :cljs (def thread-local-utc-date-format - (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")))) +#?(:clj + (def ^:private ^ThreadLocal thread-local-utc-date-format + (proxy [ThreadLocal] [] + (initialValue [] + (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") + (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + :cljs + (def thread-local-utc-date-format + (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")))) (def ^:private print-date (puget/tagged-handler 'inst - #?(:clj #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %) - :cljs (fn [input-date] - (let [dt (from-date input-date)] - (cljs-time.format/unparse thread-local-utc-date-format dt)))))) - -#?(:clj (def ^:private ^ThreadLocal thread-local-utc-timestamp-format - (proxy [ThreadLocal] [] - (initialValue [] - (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") - (.setTimeZone (TimeZone/getTimeZone "GMT")))))) - :cljs (def thread-local-utc-timestamp-format - (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))) + #?(:clj + #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %) + :cljs + (fn [input-date] + (let [dt (from-date input-date)] + (cljs-time.format/unparse thread-local-utc-date-format dt)))))) + +#?(:clj + (def ^:private ^ThreadLocal thread-local-utc-timestamp-format + (proxy [ThreadLocal] [] + (initialValue [] + (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") + (.setTimeZone (TimeZone/getTimeZone "GMT")))))) + :cljs + (def thread-local-utc-timestamp-format + (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))) (def ^:private print-timestamp (puget/tagged-handler 'inst - #?(:clj #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) - (format ".%09d-00:00" (.getNanos ^Timestamp %))) - :cljs (fn [input-date] - (let [dt (from-date input-date)] - (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) + #?(:clj + #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) + (format ".%09d-00:00" (.getNanos ^Timestamp %))) + :cljs + (fn [input-date] + (let [dt (from-date input-date)] + (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) (def ^:private print-calendar (puget/tagged-handler @@ -166,19 +175,19 @@ 'cljs.core.uuid (puget/tagged-handler 'uuid str)})) - (defn- print-handler-resolver [extra-handlers] (fn [^Class klz] (and klz (get (merge @#'common-handlers @#'print-handlers extra-handlers) (symbol (get-type-name klz)))))) -;; (defn register-print-handler! -;; "Register an extra print handler. +#?(:clj + (defn register-print-handler! + "Register an extra print handler. -;; `type` must be a symbol of the fully qualified class name. `handler` is a -;; Puget handler function of two arguments, `printer` and `value`." -;; [type handler] -;; (alter-var-root #'print-handlers assoc type handler)) + `type` must be a symbol of the fully qualified class name. `handler` is a + Puget handler function of two arguments, `printer` and `value`." + [type handler] + (alter-var-root #'print-handlers assoc type handler))) (defn puget-printer ([] From 9ef79d1a21db08a6261f3956de7126032f7d6a66 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Wed, 26 Feb 2020 16:23:18 -0500 Subject: [PATCH 015/158] Fixing unit test errors. 2 Errors for diff namespace, 2 errors for printer namespace --- .gitignore | 1 + src/lambdaisland/deep_diff/diff.cljc | 47 ++++++++++++++++++- test/lambdaisland/deep_diff/diff_test.cljc | 3 -- .../{printer_test.clj => printer_test.cljc} | 35 +++++++------- 4 files changed, 65 insertions(+), 21 deletions(-) rename test/lambdaisland/deep_diff/{printer_test.clj => printer_test.cljc} (55%) diff --git a/.gitignore b/.gitignore index 1daacdf..5334ff4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ target repl bin scratch.clj +/out/ /checkouts/ /target/ /.cljs_node_repl/ diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index 5e6d2f2..ec614dc 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -167,6 +167,10 @@ Diff (-diff-similar [x y] (diff-atom x y)))) +#?(:cljs (extend-type js/Object + Diff + (-diff-similar [x y] (diff-atom (js->clj x) (js->clj y))))) + #?(:clj (extend Object Diff {:-diff-similar (fn [exp act] @@ -174,7 +178,6 @@ (diff-seq exp act) (diff-atom exp act)))})) - (extend-protocol Diff #?(:clj java.util.List :cljs cljs.core/List) @@ -184,8 +187,14 @@ [cljs.core/PersistentVector (-diff-similar [exp act] (diff-seq exp act)) + cljs.core/EmptyList + (-diff-similar [exp act] (diff-seq exp act)) + cljs.core/PersistentHashMap - (-diff-similar [exp act] (diff-map exp act))]) + (-diff-similar [exp act] (diff-map exp act)) + + array + (-diff-similar [exp act] (diff-seq exp act))]) #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) @@ -194,6 +203,7 @@ act-seq (seq act)] (set (diff-seq exp-seq (concat (filter act exp-seq) (remove exp act-seq)))))) + #?(:clj java.util.Map :cljs cljs.core/PersistentArrayMap) (-diff-similar [exp act] (diff-map exp act))) @@ -204,11 +214,23 @@ (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + #?(:cljs cljs.core/EmptyList) + #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) + #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) + + #?(:cljs cljs.core/PersistentVector) + #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) + #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) + #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) (-left-undiff [s] (set (left-undiff (seq s)))) (-right-undiff [s] (set (right-undiff (seq s)))) + #?(:cljs cljs.core/KeySeq) + #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) + #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) + #?(:clj java.util.Map :cljs cljs.core/PersistentArrayMap) (-left-undiff [m] @@ -222,6 +244,18 @@ (map (juxt (comp right-undiff key) (comp right-undiff val)))) m)) + #?(:cljs cljs.core/PersistentHashMap) + #?(:cljs (-left-undiff [m] + (into {} + (comp (remove #(instance? Insertion (key %))) + (map (juxt (comp left-undiff key) (comp left-undiff val)))) + m))) + #?(:cljs (-right-undiff [m] + (into {} + (comp (remove #(instance? Deletion (key %))) + (map (juxt (comp right-undiff key) (comp right-undiff val)))) + m))) + Mismatch (-left-undiff [m] (get m :-)) (-right-undiff [m] (get m :+)) @@ -238,3 +272,12 @@ (-right-undiff [m] m)) #?(:clj (extend Object Undiff {:-left-undiff identity :-right-undiff identity})) +#?(:cljs (extend-type cljs.core/UUID + Undiff + (-left-undiff [m] m) + (-right-undiff [m] m))) + +#?(:cljs (extend-type js/Object + Undiff + (-left-undiff [m] m) + (-right-undiff [m] m))) diff --git a/test/lambdaisland/deep_diff/diff_test.cljc b/test/lambdaisland/deep_diff/diff_test.cljc index 5de5420..4d8221a 100644 --- a/test/lambdaisland/deep_diff/diff_test.cljc +++ b/test/lambdaisland/deep_diff/diff_test.cljc @@ -265,9 +265,6 @@ (diff/diff-seq [:a :b :c] [:a :c :d])))) - - - (comment (use 'kaocha.repl) (run) diff --git a/test/lambdaisland/deep_diff/printer_test.clj b/test/lambdaisland/deep_diff/printer_test.cljc similarity index 55% rename from test/lambdaisland/deep_diff/printer_test.clj rename to test/lambdaisland/deep_diff/printer_test.cljc index ca849b9..7c30eb7 100644 --- a/test/lambdaisland/deep_diff/printer_test.clj +++ b/test/lambdaisland/deep_diff/printer_test.cljc @@ -2,10 +2,11 @@ (:require [clojure.test :refer [deftest testing is are]] [lambdaisland.deep-diff.diff :as diff] [lambdaisland.deep-diff.printer :as printer]) - (:import (java.sql Timestamp) - (java.util Date - GregorianCalendar - TimeZone))) + #?(:clj + (:import (java.sql Timestamp) + (java.util Date + GregorianCalendar + TimeZone)))) (defn- printed [diff] @@ -13,11 +14,11 @@ (with-out-str (-> diff (printer/format-doc printer) (printer/print-doc printer))))) - -(defn- calendar - [date] - (doto (GregorianCalendar. (TimeZone/getTimeZone "GMT")) - (.setTime date))) +#?(:clj + (defn- calendar + [date] + (doto (GregorianCalendar. (TimeZone/getTimeZone "GMT")) + (.setTime date)))) (deftest print-doc-test (testing "date" @@ -25,14 +26,16 @@ (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" #inst "2019-04-10T14:57:46.128-00:00"))))) - (testing "timestamp" - (is (= "\u001B[31m-#inst \"1970-01-01T00:00:00.000000000-00:00\"\u001B[0m \u001B[32m+#inst \"1970-01-01T00:00:01.000000101-00:00\"\u001B[0m\n" - (printed (diff/diff (Timestamp. 0) - (doto (Timestamp. 1000) (.setNanos 101))))))) + #?(:clj + (testing "timestamp" + (is (= "\u001B[31m-#inst \"1970-01-01T00:00:00.000000000-00:00\"\u001B[0m \u001B[32m+#inst \"1970-01-01T00:00:01.000000101-00:00\"\u001B[0m\n" + (printed (diff/diff (Timestamp. 0) + (doto (Timestamp. 1000) (.setNanos 101)))))))) - (testing "calendar" - (is (= "\u001B[31m-#inst \"1970-01-01T00:00:00.000+00:00\"\u001B[0m \u001B[32m+#inst \"1970-01-01T00:00:01.001+00:00\"\u001B[0m\n" - (printed (diff/diff (calendar (Date. 0)) (calendar (Date. 1001))))))) + #?(:clj + (testing "calendar" + (is (= "\u001B[31m-#inst \"1970-01-01T00:00:00.000+00:00\"\u001B[0m \u001B[32m+#inst \"1970-01-01T00:00:01.001+00:00\"\u001B[0m\n" + (printed (diff/diff (calendar (Date. 0)) (calendar (Date. 1001)))))))) (testing "uuid" (is (= "\u001B[31m-#uuid \"e41b325a-ce9d-4fdd-b51d-280d9c91314d\"\u001B[0m \u001B[32m+#uuid \"0400be9a-619f-4c6a-a735-6245e4955995\"\u001B[0m\n" From f5e19f9eb48d1ba664c19eefa4ac0363b481db41 Mon Sep 17 00:00:00 2001 From: evinasgu Date: Thu, 27 Feb 2020 00:08:15 -0500 Subject: [PATCH 016/158] Changing js/Date for 'inst tag --- src/lambdaisland/deep_diff/printer.cljc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index cf95493..8ea1f38 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -169,7 +169,7 @@ 'cljs.core.MapEntry map-entry-handler - 'js/Date + 'inst print-date 'cljs.core.uuid From 6ddbc5097383e01489cf8bcda7a77b11e8c18f4e Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 27 Feb 2020 10:18:07 +0100 Subject: [PATCH 017/158] Make tests green and get rid of warnings This also unifies clj/cljs code in some places, like using an `array?` check instead of relying on object type. Also clean up use of extend/extend-protocol. The original version used `extend` for nil and Object out of a mistaken belief that `extend-protocol` wouldn't work for these cases, but it works fine. For ClojureScript the default value is not `Object` or `js/Object` but `default`. - Fix diffing of records - Make sure type-name always returns a symbol - Fix printing of time values - Make the registry feature availabe cross platform by using an atom instead of vars --- src/lambdaisland/deep_diff/diff.cljc | 278 ++++++++++++------------ src/lambdaisland/deep_diff/printer.cljc | 94 ++++---- 2 files changed, 187 insertions(+), 185 deletions(-) diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff/diff.cljc index ec614dc..20adf32 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff/diff.cljc @@ -13,17 +13,17 @@ ;; For property based testing (defprotocol Undiff - (-left-undiff [x]) - (-right-undiff [x])) + (left-undiff [x]) + (right-undiff [x])) -(defn- shift-insertions [ins] +(defn shift-insertions [ins] (reduce (fn [res idx] (let [offset (apply + (map count (vals res)))] (assoc res (+ idx offset) (get ins idx)))) {} (sort (keys ins)))) -(defn- replacements +(defn replacements "Given a set of deletion indexes and a map of insertion index to value sequence, match up deletions and insertions into replacements, returning a map of replacements, a set of deletions, and a map of insertions." @@ -58,7 +58,7 @@ (remove (comp nil? val)) (shift-insertions ins))]))) -(defn- del+ins +(defn del+ins "Wrapper around clj-diff that returns deletions and insertions as a set and map respectively." [exp act] @@ -66,7 +66,7 @@ [(into #{} del) (into {} (map (fn [[k & vs]] [k (vec vs)])) ins)])) -(defn- diff-seq-replacements [replacements s] +(defn diff-seq-replacements [replacements s] (map-indexed (fn [idx v] (if (contains? replacements idx) @@ -74,7 +74,7 @@ v)) s)) -(defn- diff-seq-deletions [del s] +(defn diff-seq-deletions [del s] (map (fn [v idx] (if (contains? del idx) @@ -83,13 +83,13 @@ s (range))) -(defn- diff-seq-insertions [ins s] +(defn diff-seq-insertions [ins s] (reduce (fn [res [idx vs]] (concat (take (inc idx) res) (map ->Insertion vs) (drop (inc idx) res))) s ins)) -(defn- diff-seq [exp act] +(defn diff-seq [exp act] (let [[rep del ins] (replacements (del+ins exp act))] (->> exp (diff-seq-replacements rep) @@ -97,13 +97,7 @@ (diff-seq-insertions ins) (into [])))) -#?(:clj (defn- val-type [val] - (let [t (type val)] - (if (class? t) - (symbol (.getName ^Class t)) - t)))) - -(defn- diff-map [exp act] +(defn diff-map [exp act] (first (let [exp-ks (keys exp) act-ks (concat (filter (set (keys act)) exp-ks) @@ -126,65 +120,60 @@ {}) 0] exp-ks)))) -(defn- primitive? [x] +(defn primitive? [x] (or (number? x) (string? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) -(defn- diff-atom [exp act] +(defn diff-atom [exp act] (if (= exp act) exp (->Mismatch exp act))) -(defn- diff-similar [x y] - #?(:clj (-diff-similar x y) - :cljs - (if (primitive? x) - (diff-atom x y) - (-diff-similar x y)))) - -(defn- left-undiff [m] - #?(:clj (-left-undiff m) - :cljs - (if (primitive? m) - m - (-left-undiff m)))) - -(defn- right-undiff [m] - #?(:clj (-right-undiff m) - :cljs - (if (primitive? m) - m - (-right-undiff m)))) +(defn diff-similar [x y] + (if (primitive? x) + (diff-atom x y) + (-diff-similar x y))) + +(defn diffable? [exp] + (or (implements? Diff exp) + (satisfies? Diff exp))) (defn diff [exp act] - (if (= (data/equality-partition exp) (data/equality-partition act)) + (cond + (nil? exp) + (diff-atom exp act) + + (and (diffable? exp) + (= (data/equality-partition exp) (data/equality-partition act))) (diff-similar exp act) - (diff-atom exp act))) -#?(:clj (extend nil - Diff - {:-diff-similar diff-atom}) - :cljs (extend-type nil - Diff - (-diff-similar [x y] (diff-atom x y)))) + (array? exp) + (diff-seq exp act) -#?(:cljs (extend-type js/Object - Diff - (-diff-similar [x y] (diff-atom (js->clj x) (js->clj y))))) + (record? exp) + (diff-map exp act) -#?(:clj (extend Object - Diff - {:-diff-similar (fn [exp act] - (if (.isArray (.getClass ^Object exp)) - (diff-seq exp act) - (diff-atom exp act)))})) + :else + (diff-atom exp act))) (extend-protocol Diff - #?(:clj java.util.List - :cljs cljs.core/List) - (-diff-similar [exp act] (diff-seq exp act)) + #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) + (-diff-similar [exp act] + (let [exp-seq (seq exp) + act-seq (seq act)] + (set (diff-seq exp-seq (concat (filter act exp-seq) + (remove exp act-seq)))))) + #?@(:clj + [java.util.List + (-diff-similar [exp act] (diff-seq exp act)) + + java.util.Map + (-diff-similar [exp act] (diff-map exp act))] + + :cljs + [cljs.core/List + (-diff-similar [exp act] (diff-seq exp act)) - #?@(:cljs - [cljs.core/PersistentVector + cljs.core/PersistentVector (-diff-similar [exp act] (diff-seq exp act)) cljs.core/EmptyList @@ -193,91 +182,98 @@ cljs.core/PersistentHashMap (-diff-similar [exp act] (diff-map exp act)) - array - (-diff-similar [exp act] (diff-seq exp act))]) - - #?(:clj java.util.Set - :cljs cljs.core/PersistentHashSet) - (-diff-similar [exp act] - (let [exp-seq (seq exp) - act-seq (seq act)] - (set (diff-seq exp-seq (concat (filter act exp-seq) - (remove exp act-seq)))))) - - #?(:clj java.util.Map - :cljs cljs.core/PersistentArrayMap) - (-diff-similar [exp act] (diff-map exp act))) + cljs.core/PersistentArrayMap + (-diff-similar [exp act] (diff-map exp act))])) (extend-protocol Undiff - #?(:clj java.util.List - :cljs cljs.core/List) - (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) - (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) - - #?(:cljs cljs.core/EmptyList) - #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) - #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) - - #?(:cljs cljs.core/PersistentVector) - #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) - #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) - - #?(:clj java.util.Set - :cljs cljs.core/PersistentHashSet) - (-left-undiff [s] (set (left-undiff (seq s)))) - (-right-undiff [s] (set (right-undiff (seq s)))) - - #?(:cljs cljs.core/KeySeq) - #?(:cljs (-left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s)))) - #?(:cljs (-right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s)))) - - #?(:clj java.util.Map - :cljs cljs.core/PersistentArrayMap) - (-left-undiff [m] - (into {} - (comp (remove #(instance? Insertion (key %))) - (map (juxt (comp left-undiff key) (comp left-undiff val)))) - m)) - (-right-undiff [m] - (into {} - (comp (remove #(instance? Deletion (key %))) - (map (juxt (comp right-undiff key) (comp right-undiff val)))) - m)) - - #?(:cljs cljs.core/PersistentHashMap) - #?(:cljs (-left-undiff [m] - (into {} - (comp (remove #(instance? Insertion (key %))) - (map (juxt (comp left-undiff key) (comp left-undiff val)))) - m))) - #?(:cljs (-right-undiff [m] - (into {} - (comp (remove #(instance? Deletion (key %))) - (map (juxt (comp right-undiff key) (comp right-undiff val)))) - m))) - Mismatch - (-left-undiff [m] (get m :-)) - (-right-undiff [m] (get m :+)) + (left-undiff [m] (get m :-)) + (right-undiff [m] (get m :+)) Insertion - (-right-undiff [m] (get m :+)) + (right-undiff [m] (get m :+)) Deletion - (-left-undiff [m] (get m :-))) - -(extend-type nil - Undiff - (-left-undiff [m] m) - (-right-undiff [m] m)) - -#?(:clj (extend Object Undiff {:-left-undiff identity :-right-undiff identity})) -#?(:cljs (extend-type cljs.core/UUID - Undiff - (-left-undiff [m] m) - (-right-undiff [m] m))) - -#?(:cljs (extend-type js/Object - Undiff - (-left-undiff [m] m) - (-right-undiff [m] m))) + (left-undiff [m] (get m :-)) + + nil + (left-undiff [m] m) + (right-undiff [m] m) + + #?(:clj Object :cljs default) + (left-undiff [m] m) + (right-undiff [m] m) + + #?@(:clj + [java.util.List + (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) + (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + + java.util.Set + (left-undiff [s] (set (left-undiff (seq s)))) + (right-undiff [s] (set (right-undiff (seq s)))) + + java.util.Map + (left-undiff [m] + (into {} + (comp (remove #(instance? Insertion (key %))) + (map (juxt (comp left-undiff key) (comp left-undiff val)))) + m)) + (right-undiff [m] + (into {} + (comp (remove #(instance? Deletion (key %))) + (map (juxt (comp right-undiff key) (comp right-undiff val)))) + m))] + + :cljs + [cljs.core/List + (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) + (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + + cljs.core/EmptyList + (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) + (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + + cljs.core/PersistentHashSet + (left-undiff [s] (set (left-undiff (seq s)))) + (right-undiff [s] (set (right-undiff (seq s)))) + + cljs.core/PersistentTreeSet + (left-undiff [s] (set (left-undiff (seq s)))) + (right-undiff [s] (set (right-undiff (seq s)))) + + cljs.core/PersistentVector + (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) + (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + + cljs.core/KeySeq + (left-undiff [s] (map left-undiff (remove #(instance? Insertion %) s))) + (right-undiff [s] (map right-undiff (remove #(instance? Deletion %) s))) + + cljs.core/PersistentArrayMap + (left-undiff [m] + (into {} + (comp (remove #(instance? Insertion (key %))) + (map (juxt (comp left-undiff key) (comp left-undiff val)))) + m)) + (right-undiff [m] + (into {} + (comp (remove #(instance? Deletion (key %))) + (map (juxt (comp right-undiff key) (comp right-undiff val)))) + m)) + + cljs.core/PersistentHashMap + (left-undiff [m] + (into {} + (comp (remove #(instance? Insertion (key %))) + (map (juxt (comp left-undiff key) (comp left-undiff val)))) + m)) + (right-undiff [m] + (into {} + (comp (remove #(instance? Deletion (key %))) + (map (juxt (comp right-undiff key) (comp right-undiff val)))) + m)) + + cljs.core/UUID + (left-undiff [m] m) + (right-undiff [m] m)])) diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc index 8ea1f38..5ef496a 100644 --- a/src/lambdaisland/deep_diff/printer.cljc +++ b/src/lambdaisland/deep_diff/printer.cljc @@ -1,8 +1,7 @@ (ns lambdaisland.deep-diff.printer (:require [fipp.engine :as fipp] - [fipp.visit :as fv] [puget.color :as color] - [puget.dispatch] + [puget.dispatch :as dispatch] [puget.printer :as puget] [arrangement.core] [lambdaisland.deep-diff.diff :as diff] @@ -15,7 +14,7 @@ (java.util TimeZone) (java.sql Timestamp)))) -(defn get-type-name +(defn type-name "Get the type of the given object as a string. For Clojure, gets the name of the class of the object. For ClojureScript, gets either the `name` attribute or the protocol name if the `name` attribute doesn't exist." @@ -26,7 +25,7 @@ (let [t (type x) n (.-name t)] (if (empty? n) - (pr-str t) + (symbol (pr-str t)) n)))) (defn print-deletion [printer expr] @@ -129,65 +128,72 @@ ":" (subs formatted offset-minutes))))) -(def ^:private common-handlers - {'lambdaisland.deep_diff.diff.Deletion - print-deletion +(def ^:private print-handlers + (atom #?(:clj + {'lambdaisland.deep_diff.diff.Deletion + print-deletion - 'lambdaisland.deep_diff.diff.Insertion - print-insertion + 'lambdaisland.deep_diff.diff.Insertion + print-insertion - 'lambdaisland.deep_diff.diff.Mismatch - print-mismatch}) + 'lambdaisland.deep_diff.diff.Mismatch + print-mismatch -#?(:clj - (def ^:private print-handlers - {'clojure.lang.PersistentArrayMap - map-handler + 'clojure.lang.PersistentArrayMap + map-handler - 'clojure.lang.PersistentHashMap - map-handler + 'clojure.lang.PersistentHashMap + map-handler - 'clojure.lang.MapEntry - map-entry-handler + 'clojure.lang.MapEntry + map-entry-handler - 'java.util.Date - print-date + 'java.util.Date + print-date - 'java.util.GregorianCalendar - print-calendar + 'java.util.GregorianCalendar + print-calendar - 'java.sql.Timestamp - print-timestamp}) - :cljs - (def ^:private print-handlers - {'cljs.core.PersistentArrayMap - map-handler + 'java.sql.Timestamp + print-timestamp} + + :cljs + {'lambdaisland.deep-diff.diff/Deletion + print-deletion + + 'lambdaisland.deep-diff.diff/Insertion + print-insertion - 'cljs.core.PersistentHashMap - map-handler + 'lambdaisland.deep-diff.diff/Mismatch + print-mismatch - 'cljs.core.MapEntry - map-entry-handler + 'cljs.core/PersistentArrayMap + map-handler - 'inst - print-date + 'cljs.core/PersistentHashMap + map-handler - 'cljs.core.uuid - (puget/tagged-handler 'uuid str)})) + 'cljs.core/MapEntry + map-entry-handler + + 'Date + print-date + + 'cljs.core/UUID + (puget/tagged-handler 'uuid str)}))) (defn- print-handler-resolver [extra-handlers] (fn [^Class klz] - (and klz (get (merge @#'common-handlers @#'print-handlers extra-handlers) - (symbol (get-type-name klz)))))) + (and klz (get (merge @print-handlers extra-handlers) + (symbol (type-name klz)))))) -#?(:clj - (defn register-print-handler! - "Register an extra print handler. +(defn register-print-handler! + "Register an extra print handler. `type` must be a symbol of the fully qualified class name. `handler` is a Puget handler function of two arguments, `printer` and `value`." - [type handler] - (alter-var-root #'print-handlers assoc type handler))) + [type handler] + (swap! print-handlers assoc type handler)) (defn puget-printer ([] From fa7d006cd79b711470a0249b475caeec02b940d5 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 16:28:04 +0100 Subject: [PATCH 018/158] Prepare for the release of the CLJC deep-diff2 Move namespaces to use a "2" suffix, we have breaking changes and we don't want to break existing consumers. We will bundle both namespaces with and without the suffix in the released artifact. Move the printer and diff namespaces to printer-impl and diff-impl, for two reasons. This way we can keep the same top level API at least (lambdaisland.deep-diff2/printer, lambdaisland.deep-diff2/diff), since in ClojureScript names of functions and namespaces are not allowed to overlap. The second reason is that the -impl suffix signals that these are internal and basically have to be treated as private. This allows us to make the functions in there to be public, which makes it possible to unit test them. Before we used alter-meta! to make them public at the start of the test, but this only works in Clojure. Inline Puget, we've made extensive changes to make this work, which we don't expect to go upstream, so we should not release these under puget.* namespaces. Make Puget dispatch based on value rather than type for both Clojure and ClojureScript. Clean up and further unify the print handlers for platform-specific types. Contains a fix to the round-trip generative test, since ##NaN (on js/cljs) can not be compared for equality it leads to false negatives. --- deps.edn | 13 +- src/lambdaisland/deep_diff/printer.cljc | 220 ----- .../{deep_diff.cljc => deep_diff2.cljc} | 18 +- .../diff.cljc => deep_diff2/diff_impl.cljc} | 10 +- src/lambdaisland/deep_diff2/printer_impl.cljc | 152 ++++ src/lambdaisland/deep_diff2/puget/color.cljc | 50 ++ .../deep_diff2/puget/color/ansi.cljc | 74 ++ .../deep_diff2/puget/color/html.cljc | 105 +++ .../deep_diff2/puget/dispatch.cljc | 114 +++ .../deep_diff2/puget/printer.cljc | 755 ++++++++++++++++++ .../{deep_diff => deep_diff2}/diff_test.cljc | 37 +- .../printer_test.cljc | 6 +- 12 files changed, 1292 insertions(+), 262 deletions(-) delete mode 100644 src/lambdaisland/deep_diff/printer.cljc rename src/lambdaisland/{deep_diff.cljc => deep_diff2.cljc} (77%) rename src/lambdaisland/{deep_diff/diff.cljc => deep_diff2/diff_impl.cljc} (98%) create mode 100644 src/lambdaisland/deep_diff2/printer_impl.cljc create mode 100644 src/lambdaisland/deep_diff2/puget/color.cljc create mode 100644 src/lambdaisland/deep_diff2/puget/color/ansi.cljc create mode 100644 src/lambdaisland/deep_diff2/puget/color/html.cljc create mode 100644 src/lambdaisland/deep_diff2/puget/dispatch.cljc create mode 100644 src/lambdaisland/deep_diff2/puget/printer.cljc rename test/lambdaisland/{deep_diff => deep_diff2}/diff_test.cljc (89%) rename test/lambdaisland/{deep_diff => deep_diff2}/printer_test.cljc (91%) diff --git a/deps.edn b/deps.edn index a7ca4c2..3e22879 100644 --- a/deps.edn +++ b/deps.edn @@ -1,14 +1,9 @@ {:paths ["resources" "src" "test"] - :deps {org.clojure/clojure {:mvn/version "1.10.0"} - ;;mvxcvi/puget {:mvn/version "1.1.2"} - github-lambdaisland/puget {:git/url "https://github.com/lambdaisland/puget" - :sha "ea860be1f0c6a5e406c45a414802c41e902d010c"} - fipp {:mvn/version "0.6.17"} - org.clojure/core.rrb-vector {:mvn/version "0.0.14"} - ;;tech.droit/clj-diff {:mvn/version "1.0.1"} + :deps {org.clojure/clojure {:mvn/version "1.10.1"} + fipp {:mvn/version "0.6.22"} + org.clojure/core.rrb-vector {:mvn/version "0.1.1"} org.clojars.rymndhng/clj-diff {:mvn/version "1.1.1-SNAPSHOT"} - mvxcvi/arrangement {:mvn/version "1.2.0"} - com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}} + mvxcvi/arrangement {:mvn/version "1.2.0"}} :aliases {:cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} diff --git a/src/lambdaisland/deep_diff/printer.cljc b/src/lambdaisland/deep_diff/printer.cljc deleted file mode 100644 index 5ef496a..0000000 --- a/src/lambdaisland/deep_diff/printer.cljc +++ /dev/null @@ -1,220 +0,0 @@ -(ns lambdaisland.deep-diff.printer - (:require [fipp.engine :as fipp] - [puget.color :as color] - [puget.dispatch :as dispatch] - [puget.printer :as puget] - [arrangement.core] - [lambdaisland.deep-diff.diff :as diff] - #?@(:cljs - [[cljs-time.coerce :refer [from-date]] - [cljs-time.format :refer [formatter unparse]] - [goog.string :refer [format]]])) - #?(:clj - (:import (java.text SimpleDateFormat) - (java.util TimeZone) - (java.sql Timestamp)))) - -(defn type-name - "Get the type of the given object as a string. For Clojure, gets the name of - the class of the object. For ClojureScript, gets either the `name` attribute - or the protocol name if the `name` attribute doesn't exist." - [x] - #?(:clj - (.getName (class x)) - :cljs - (let [t (type x) - n (.-name t)] - (if (empty? n) - (symbol (pr-str t)) - n)))) - -(defn print-deletion [printer expr] - (let [no-color (assoc printer :print-color false)] - (color/document printer ::deletion [:span "-" (puget/format-doc no-color (:- expr))]))) - -(defn print-insertion [printer expr] - (let [no-color (assoc printer :print-color false)] - (color/document printer ::insertion [:span "+" (puget/format-doc no-color (:+ expr))]))) - -(defn print-mismatch [printer expr] - [:group - [:span ""] ;; needed here to make this :nest properly in kaocha.report/print-expr '= - [:align - (print-deletion printer expr) :line - (print-insertion printer expr)]]) - -(defn print-other [printer expr] - (let [no-color (assoc printer :print-color false)] - (color/document printer ::other [:span "-" (puget/format-doc no-color expr)]))) - -(defn- map-handler [this value] - (let [ks (#'puget/order-collection (:sort-keys this) value (partial sort-by first arrangement.core/rank)) - entries (map (partial puget/format-doc this) ks)] - [:group - (color/document this :delimiter "{") - [:align (interpose [:span (:map-delimiter this) :line] entries)] - (color/document this :delimiter "}")])) - -(defn- map-entry-handler [printer value] - (let [k (key value) - v (val value)] - (let [no-color (assoc printer :print-color false)] - (cond - (instance? lambdaisland.deep_diff.diff.Insertion k) - [:span - (print-insertion printer k) - (if (coll? v) (:map-coll-separator printer) " ") - (color/document printer ::insertion (puget/format-doc no-color v))] - - (instance? lambdaisland.deep_diff.diff.Deletion k) - [:span - (print-deletion printer k) - (if (coll? v) (:map-coll-separator printer) " ") - (color/document printer ::deletion (puget/format-doc no-color v))] - - :else - [:span - (puget/format-doc printer k) - (if (coll? v) (:map-coll-separator printer) " ") - (puget/format-doc printer v)])))) - -#?(:clj - (def ^:private ^ThreadLocal thread-local-utc-date-format - (proxy [ThreadLocal] [] - (initialValue [] - (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") - (.setTimeZone (TimeZone/getTimeZone "GMT")))))) - :cljs - (def thread-local-utc-date-format - (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00")))) - -(def ^:private print-date - (puget/tagged-handler - 'inst - #?(:clj - #(.format ^SimpleDateFormat (.get thread-local-utc-date-format) %) - :cljs - (fn [input-date] - (let [dt (from-date input-date)] - (cljs-time.format/unparse thread-local-utc-date-format dt)))))) - -#?(:clj - (def ^:private ^ThreadLocal thread-local-utc-timestamp-format - (proxy [ThreadLocal] [] - (initialValue [] - (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") - (.setTimeZone (TimeZone/getTimeZone "GMT")))))) - :cljs - (def thread-local-utc-timestamp-format - (doto (cljs-time.format/formatter "yyyy-MM-dd'T'HH:mm:ss")))) - -(def ^:private print-timestamp - (puget/tagged-handler - 'inst - #?(:clj - #(str (.format ^SimpleDateFormat (.get thread-local-utc-timestamp-format) %) - (format ".%09d-00:00" (.getNanos ^Timestamp %))) - :cljs - (fn [input-date] - (let [dt (from-date input-date)] - (cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) - -(def ^:private print-calendar - (puget/tagged-handler - 'inst - #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) - offset-minutes (- (.length formatted) 2)] - (str (subs formatted 0 offset-minutes) - ":" - (subs formatted offset-minutes))))) - -(def ^:private print-handlers - (atom #?(:clj - {'lambdaisland.deep_diff.diff.Deletion - print-deletion - - 'lambdaisland.deep_diff.diff.Insertion - print-insertion - - 'lambdaisland.deep_diff.diff.Mismatch - print-mismatch - - 'clojure.lang.PersistentArrayMap - map-handler - - 'clojure.lang.PersistentHashMap - map-handler - - 'clojure.lang.MapEntry - map-entry-handler - - 'java.util.Date - print-date - - 'java.util.GregorianCalendar - print-calendar - - 'java.sql.Timestamp - print-timestamp} - - :cljs - {'lambdaisland.deep-diff.diff/Deletion - print-deletion - - 'lambdaisland.deep-diff.diff/Insertion - print-insertion - - 'lambdaisland.deep-diff.diff/Mismatch - print-mismatch - - 'cljs.core/PersistentArrayMap - map-handler - - 'cljs.core/PersistentHashMap - map-handler - - 'cljs.core/MapEntry - map-entry-handler - - 'Date - print-date - - 'cljs.core/UUID - (puget/tagged-handler 'uuid str)}))) - -(defn- print-handler-resolver [extra-handlers] - (fn [^Class klz] - (and klz (get (merge @print-handlers extra-handlers) - (symbol (type-name klz)))))) - -(defn register-print-handler! - "Register an extra print handler. - - `type` must be a symbol of the fully qualified class name. `handler` is a - Puget handler function of two arguments, `printer` and `value`." - [type handler] - (swap! print-handlers assoc type handler)) - -(defn puget-printer - ([] - (puget-printer {})) - ([opts] - (let [extra-handlers (:extra-handlers opts)] - (puget/pretty-printer (merge {:width (or *print-length* 100) - :print-color true - :color-scheme {::deletion [:red] - ::insertion [:green] - ::other [:yellow] - ;; puget uses green and red for - ;; boolean/tag, but we want to reserve - ;; those for diffed values. - :boolean [:bold :cyan] - :tag [:magenta]} - :print-handlers (print-handler-resolver extra-handlers)} - (dissoc opts :extra-handlers)))))) - -(defn format-doc [expr printer] - (puget/format-doc printer expr)) - -(defn print-doc [doc printer] - (fipp.engine/pprint-document doc {:width (:width printer)})) diff --git a/src/lambdaisland/deep_diff.cljc b/src/lambdaisland/deep_diff2.cljc similarity index 77% rename from src/lambdaisland/deep_diff.cljc rename to src/lambdaisland/deep_diff2.cljc index cab561b..94a2a3c 100644 --- a/src/lambdaisland/deep_diff.cljc +++ b/src/lambdaisland/deep_diff2.cljc @@ -1,8 +1,8 @@ -(ns lambdaisland.deep-diff - (:require [lambdaisland.deep-diff.diff :as diff] - [lambdaisland.deep-diff.printer :as printer])) +(ns lambdaisland.deep-diff2 + (:require [lambdaisland.deep-diff2.diff-impl :as diff-impl] + [lambdaisland.deep-diff2.printer-impl :as printer-impl])) -(defn call-diff +(defn diff "Compare two values recursively. The result is a data structure similar to the ones passed in, but with @@ -19,16 +19,16 @@ [expected actual] (diff/diff expected actual)) -(defn build-printer +(defn printer "Construct a Puget printer instance suitable for printing diffs. Extra options are passed on to Puget. Extra type handlers can be provides as `:extra-handlers` (a map from symbol to function), or by using [[lambdaisland.deep-diff.printer/register-print-handler!]]" ([] - (build-printer {})) + (printer {})) ([opts] - (printer/puget-printer opts))) + (printer-impl/puget-printer opts))) (defn pretty-print "Pretty print a diff. @@ -39,5 +39,5 @@ (pretty-print diff (build-printer))) ([diff printer] (-> diff - (printer/format-doc printer) - (printer/print-doc printer)))) + (printer-impl/format-doc printer) + (printer-impl/print-doc printer)))) diff --git a/src/lambdaisland/deep_diff/diff.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc similarity index 98% rename from src/lambdaisland/deep_diff/diff.cljc rename to src/lambdaisland/deep_diff2/diff_impl.cljc index 20adf32..23c42d2 100644 --- a/src/lambdaisland/deep_diff/diff.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -1,4 +1,4 @@ -(ns lambdaisland.deep-diff.diff +(ns lambdaisland.deep-diff2.diff-impl (:require [clojure.data :as data] [clj-diff.core :as seq-diff])) @@ -134,8 +134,12 @@ (-diff-similar x y))) (defn diffable? [exp] - (or (implements? Diff exp) - (satisfies? Diff exp))) + (satisfies? Diff exp)) + +;; ClojureScript has this, Clojure doesn't +#?(:clj + (defn array? [x] + (and x (.isArray (class x))))) (defn diff [exp act] (cond diff --git a/src/lambdaisland/deep_diff2/printer_impl.cljc b/src/lambdaisland/deep_diff2/printer_impl.cljc new file mode 100644 index 0000000..cd1915c --- /dev/null +++ b/src/lambdaisland/deep_diff2/printer_impl.cljc @@ -0,0 +1,152 @@ +(ns lambdaisland.deep-diff2.printer-impl + (:require [arrangement.core] + [fipp.engine :as fipp] + [lambdaisland.deep-diff2.diff-impl :as diff] + [lambdaisland.deep-diff2.puget.color :as color] + [lambdaisland.deep-diff2.puget.dispatch :as dispatch] + [lambdaisland.deep-diff2.puget.printer :as puget-printer] + #?(:cljs [goog.string :refer [format]])) + #?(:clj + (:import))) + +(defn print-deletion [printer expr] + (let [no-color (assoc printer :print-color false)] + (color/document printer ::deletion [:span "-" (puget-printer/format-doc no-color (:- expr))]))) + +(defn print-insertion [printer expr] + (let [no-color (assoc printer :print-color false)] + (color/document printer ::insertion [:span "+" (puget-printer/format-doc no-color (:+ expr))]))) + +(defn print-mismatch [printer expr] + [:group + [:span ""] ;; needed here to make this :nest properly in kaocha.report/print-expr '= + [:align + (print-deletion printer expr) :line + (print-insertion printer expr)]]) + +(defn print-other [printer expr] + (let [no-color (assoc printer :print-color false)] + (color/document printer ::other [:span "-" (puget-printer/format-doc no-color expr)]))) + +(defn- map-handler [this value] + (let [ks (#'puget-printer/order-collection (:sort-keys this) value (partial sort-by first arrangement.core/rank)) + entries (map (partial puget-printer/format-doc this) ks)] + [:group + (color/document this :delimiter "{") + [:align (interpose [:span (:map-delimiter this) :line] entries)] + (color/document this :delimiter "}")])) + +(defn- map-entry-handler [printer value] + (let [k (key value) + v (val value)] + (let [no-color (assoc printer :print-color false)] + (cond + (instance? lambdaisland.deep_diff2.diff_impl.Insertion k) + [:span + (print-insertion printer k) + (if (coll? v) (:map-coll-separator printer) " ") + (color/document printer ::insertion (puget-printer/format-doc no-color v))] + + (instance? lambdaisland.deep_diff2.diff_impl.Deletion k) + [:span + (print-deletion printer k) + (if (coll? v) (:map-coll-separator printer) " ") + (color/document printer ::deletion (puget-printer/format-doc no-color v))] + + :else + [:span + (puget-printer/format-doc printer k) + (if (coll? v) (:map-coll-separator printer) " ") + (puget-printer/format-doc printer v)])))) + +(def print-handlers + (atom #?(:clj + {'lambdaisland.deep_diff2.diff_impl.Deletion + print-deletion + + 'lambdaisland.deep_diff2.diff_impl.Insertion + print-insertion + + 'lambdaisland.deep_diff2.diff_impl.Mismatch + print-mismatch + + 'clojure.lang.PersistentArrayMap + map-handler + + 'clojure.lang.PersistentHashMap + map-handler + + 'clojure.lang.MapEntry + map-entry-handler} + + :cljs + {'lambdaisland.deep-diff2.diff-impl/Deletion + print-deletion + + 'lambdaisland.deep-diff2.diff-impl/Insertion + print-insertion + + 'lambdaisland.deep-diff2.diff-impl/Mismatch + print-mismatch + + 'cljs.core/PersistentArrayMap + map-handler + + 'cljs.core/PersistentHashMap + map-handler + + 'cljs.core/MapEntry + map-entry-handler}))) + +(defn type-name + "Get the type of the given object as a string. For Clojure, gets the name of + the class of the object. For ClojureScript, gets either the `name` attribute + or the protocol name if the `name` attribute doesn't exist." + [x] + #?(:clj + (symbol (.getName (class x))) + :cljs + (let [t (type x) + n (.-name t)] + (if (empty? n) + (symbol (pr-str t)) + (symbol n))))) + +(defn- print-handler-resolver [extra-handlers] + (fn [obj] + (and obj (get (merge @print-handlers extra-handlers) + (symbol (type-name obj)))))) + +(defn register-print-handler! + "Register an extra print handler. + + `type` must be a symbol of the fully qualified class name. `handler` is a + Puget handler function of two arguments, `printer` and `value`." + [type handler] + (swap! print-handlers assoc type handler)) + +(defn puget-printer + ([] + (puget-printer {})) + ([opts] + (let [extra-handlers (:extra-handlers opts)] + (puget-printer/pretty-printer (merge {:width (or *print-length* 100) + :print-color true + :color-scheme {::deletion [:red] + ::insertion [:green] + ::other [:yellow] + ;; lambdaisland.deep-diff2.puget uses green and red for + ;; boolean/tag, but we want to reserve + ;; those for diffed values. + :boolean [:bold :cyan] + :tag [:magenta]} + :print-handlers (dispatch/chained-lookup + (print-handler-resolver extra-handlers) + puget-printer/common-handlers)} + (dissoc opts :extra-handlers)))))) + +(defn format-doc [expr printer] + (puget-printer/format-doc printer expr)) + +(defn print-doc [doc printer] + (fipp.engine/pprint-document doc {:width (:width printer)})) diff --git a/src/lambdaisland/deep_diff2/puget/color.cljc b/src/lambdaisland/deep_diff2/puget/color.cljc new file mode 100644 index 0000000..52a0fc3 --- /dev/null +++ b/src/lambdaisland/deep_diff2/puget/color.cljc @@ -0,0 +1,50 @@ +(ns lambdaisland.deep-diff2.puget.color + "Coloring multimethods to format text by adding markup. + + #### Color Options + + `:print-color` + + When true, ouptut colored text from print functions. + + `:color-markup` + + - `:ansi` for color terminal text (default) + - `:html-inline` for inline-styled html + - `:html-classes` for html with semantic classes + + `:color-scheme` + + Map of syntax element keywords to color codes. + ") + +;; ## Coloring Multimethods +(defn dispatch + "Dispatches to coloring multimethods. Element should be a key from + the color-scheme map." + [options element text] + (when (:print-color options) + (:color-markup options))) + +(defmulti document + "Constructs a pretty print document, which may be colored if + `:print-color` is true." + #'dispatch) + +(defmulti text + "Produces text colored according to the active color scheme. This is mostly + useful to clients which want to produce output which matches data printed by + Puget, but which is not directly printed by the library. Note that this + function still obeys the `:print-color` option." + #'dispatch) + +;; ## Default Markup +;; The default transformation when there's no markup specified is to return the +;; text unaltered. +(defmethod document nil + [options element text] + text) + +(defmethod text nil + [options element text] + text) diff --git a/src/lambdaisland/deep_diff2/puget/color/ansi.cljc b/src/lambdaisland/deep_diff2/puget/color/ansi.cljc new file mode 100644 index 0000000..9009db6 --- /dev/null +++ b/src/lambdaisland/deep_diff2/puget/color/ansi.cljc @@ -0,0 +1,74 @@ +(ns lambdaisland.deep-diff2.puget.color.ansi + "Coloring implementation that applies ANSI color codes to text designed to be + output to a terminal. + + Use with a `:color-markup` of `:ansi`." + (:require + [clojure.string :as str] + [lambdaisland.deep-diff2.puget.color :as color])) + +(def sgr-code + "Map of symbols to numeric SGR (select graphic rendition) codes." + {:none 0 + :bold 1 + :underline 3 + :blink 5 + :reverse 7 + :hidden 8 + :strike 9 + :black 30 + :red 31 + :green 32 + :yellow 33 + :blue 34 + :magenta 35 + :cyan 36 + :white 37 + :fg-256 38 + :fg-reset 39 + :bg-black 40 + :bg-red 41 + :bg-green 42 + :bg-yellow 43 + :bg-blue 44 + :bg-magenta 45 + :bg-cyan 46 + :bg-white 47 + :bg-256 48 + :bg-reset 49}) + +(defn esc + "Returns an ANSI escope string which will apply the given collection of SGR + codes." + [codes] + (let [codes (map sgr-code codes codes) + codes (str/join \; codes)] + (str \u001b \[ codes \m))) + +(defn escape + "Returns an ANSI escope string which will enact the given SGR codes." + [& codes] + (esc codes)) + +(defn sgr + "Wraps the given string with SGR escapes to apply the given codes, then reset + the graphics." + [string & codes] + (str (esc codes) string (escape :none))) + +(defn strip + "Removes color codes from the given string." + [string] + (str/replace string #"\u001b\[[0-9;]*[mK]" "")) + +(defmethod color/document :ansi + [options element document] + (if-let [codes (-> options :color-scheme (get element) seq)] + [:span [:pass (esc codes)] document [:pass (escape :none)]] + document)) + +(defmethod color/text :ansi + [options element text] + (if-let [codes (-> options :color-scheme (get element) seq)] + (str (esc codes) text (escape :none)) + text)) diff --git a/src/lambdaisland/deep_diff2/puget/color/html.cljc b/src/lambdaisland/deep_diff2/puget/color/html.cljc new file mode 100644 index 0000000..b2f69fe --- /dev/null +++ b/src/lambdaisland/deep_diff2/puget/color/html.cljc @@ -0,0 +1,105 @@ +(ns lambdaisland.deep-diff2.puget.color.html + "Coloring implementation that wraps text in HTML tags to apply color. + + Supports the following modes for `:color-markup`: + + - `:html-inline` applies inline `style` attributes to the tags. + - `:html-classes` adds semantic `class` attributes to the tags." + (:require + [clojure.string :as str] + [clojure.walk :refer [postwalk]] + [lambdaisland.deep-diff2.puget.color :as color])) + +(def style-attribute + "Map from keywords usable in a color-scheme value to vectors + representing css style attributes" + {:none nil + :bold [:font-weight "bold"] + :underline [:text-decoration "underline"] + :blink [:text-decoration "blink"] + :reverse nil + :hidden [:visibility "hidden"] + :strike [:text-decoration "line-through"] + :black [:color "black"] + :red [:color "red"] + :green [:color "green"] + :yellow [:color "yellow"] + :blue [:color "blue"] + :magenta [:color "magenta"] + :cyan [:color "cyan"] + :white [:color "white"] + :fg-256 nil + :fg-reset nil + :bg-black [:background-color "black"] + :bg-red [:background-color "red"] + :bg-green [:background-color "green"] + :bg-yellow [:background-color "yellow"] + :bg-blue [:background-color "blue"] + :bg-magenta [:background-color "magenta"] + :bg-cyan [:background-color "cyan"] + :bg-white [:background-color "white"] + :bg-256 nil + :bg-reset nil}) + +(defn style + "Returns a formatted style attribute for a span given a seq of + keywords usable in a :color-scheme value" + [codes] + (let [attributes (map #(get style-attribute % [:color (name %)]) codes)] + (str "style=\"" + (str/join ";" (map (fn [[k v]] (str (name k) ":" v)) attributes)) + "\""))) + +(defn escape-html-text + "Escapes special characters into HTML entities." + [text] + (str/escape text {\& "&" \< "<" \> ">" \" """})) + +(defn escape-html-node + "Applies HTML escaping to the node if it is a string. Returns a print + document representing the escaped string, or the original node if not." + [node] + (if (string? node) + (let [escaped-text (escape-html-text node) + spans (str/split escaped-text #"(?=&)")] + (reduce (fn [acc span] + (case (first span) + nil acc + \& (let [[escaped span] (str/split span #"(?<=;)" 2) + acc (conj acc [:escaped escaped])] + (if (seq span) + (conj acc span) + acc)) + (conj acc span))) + [:span] + spans)) + node)) + +(defn escape-html-document + "Escapes special characters into fipp :span/:escaped nodes" + [document] + (postwalk escape-html-node document)) + +(defmethod color/document :html-inline + [options element document] + (if-let [codes (-> options :color-scheme (get element) seq)] + [:span [:pass ""] + (escape-html-document document) + [:pass ""]] + (escape-html-document document))) + +(defmethod color/text :html-inline + [options element text] + (if-let [codes (-> options :color-scheme (get element) seq)] + (str "" (escape-html-text text) "") + (escape-html-text text))) + +(defmethod color/document :html-classes + [options element document] + [:span [:pass ""] + (escape-html-document document) + [:pass ""]]) + +(defmethod color/text :html-classes + [options element text] + (str "" (escape-html-text text) "")) diff --git a/src/lambdaisland/deep_diff2/puget/dispatch.cljc b/src/lambdaisland/deep_diff2/puget/dispatch.cljc new file mode 100644 index 0000000..b02c108 --- /dev/null +++ b/src/lambdaisland/deep_diff2/puget/dispatch.cljc @@ -0,0 +1,114 @@ +(ns lambdaisland.deep-diff2.puget.dispatch + "Dispatch functions take a `Class` argument and return the looked-up value. + This provides similar functionality to Clojure's protocols, but operates over + locally-constructed logic rather than using a global dispatch table. + + A simple example is a map from classes to values, which can be used directly + as a lookup function." + (:require [clojure.string :as str])) + +;; ## Logical Dispatch +(defn chained-lookup + "Builds a dispatcher which looks up a type by checking multiple dispatchers + in order until a matching entry is found. Takes either a single collection of + dispatchers or a variable list of dispatcher arguments. Ignores nil + dispatchers in the sequence." + ([dispatchers] + {:pre [(sequential? dispatchers)]} + (let [candidates (remove nil? dispatchers) + no-chain-lookup-provided-message "chained-lookup must be provided at least one dispatch function to try."] + (when (empty? candidates) + (throw (ex-info no-chain-lookup-provided-message + {:causes #{:no-chained-lookup-provided}}))) + (if (= 1 (count candidates)) + (first candidates) + (fn lookup + [t] + (some #(% t) candidates))))) + ([a b & more] + (chained-lookup (list* a b more)))) + +(defn caching-lookup + "Builds a dispatcher which caches values returned for each type. This improves + performance when the underlying dispatcher may need to perform complex + lookup logic to determine the dispatched value." + [dispatch] + (let [cache (atom {})] + (fn lookup + [t] + (let [memory @cache] + (if (contains? memory t) + (get memory t) + (let [v (dispatch t)] + (swap! cache assoc t v) + v)))))) + +;; Space for predicate-lookup. ClojureScript support +#?(:cljs + (defn predicate-lookup + "Look up a handler for a value based on a map from predicate to handler" + [types] + (fn lookup [value] + (some (fn [[pred? handler]] + (when (pred? value) + handler)) + types)))) + +;; ## Type Dispatch (Clojure) +#?(:clj + (defn symbolic-lookup + "Builds a dispatcher which looks up a type by checking the underlying lookup + using the type's _symbolic_ name, rather than the class value itself. This is + useful for checking configuration that must be created in situations where the + classes themselves may not be loaded yet." + [dispatch] + (fn lookup + [^Class t] + (dispatch (symbol (.getName t)))))) + +#?(:clj + (defn- lineage + "Returns the ancestry of the given class, starting with the class and + excluding the `java.lang.Object` base class." + [cls] + (take-while #(and (some? %) (not= Object %)) + (iterate #(when (class? %) (.getSuperclass ^Class %)) cls)))) + +#?(:clj + (defn- find-interfaces + "Resolves all of the interfaces implemented by a class, both direct (through + class ancestors) and indirect (through other interfaces)." + [cls] + (let [get-interfaces (fn [^Class c] (.getInterfaces c)) + direct-interfaces (mapcat get-interfaces (lineage cls))] + (loop [queue (vec direct-interfaces) + interfaces #{}] + (if (empty? queue) + interfaces + (let [^Class iface (first queue) + implemented (get-interfaces iface)] + (recur (into (rest queue) + (remove interfaces implemented)) + (conj interfaces iface)))))))) + +#?(:clj + (defn inheritance-lookup + "Builds a dispatcher which looks up a type by looking up the type itself, + then attempting to look up its ancestor classes, implemented interfaces, and + finally `java.lang.Object`." + [dispatch] + (fn lookup + [obj] + (let [t (class obj)] + (or + (some dispatch (lineage t)) + (let [candidates (remove (comp nil? first) + (map (juxt dispatch identity) + (find-interfaces t))) + wrong-number-of-candidates-message "%d candidates found for interfaces on dispatch type %s: %s"] + (case (count candidates) + 0 nil + 1 (ffirst candidates) + (throw (ex-info (format wrong-number-of-candidates-message + (count candidates) t (str/join ", " (map second candidates))))))) + (dispatch Object)))))) diff --git a/src/lambdaisland/deep_diff2/puget/printer.cljc b/src/lambdaisland/deep_diff2/puget/printer.cljc new file mode 100644 index 0000000..0ac6210 --- /dev/null +++ b/src/lambdaisland/deep_diff2/puget/printer.cljc @@ -0,0 +1,755 @@ +(ns lambdaisland.deep-diff2.puget.printer + "Enhanced printing functions for rendering Clojure values. The following + options are available to control the printer: + + #### General Rendering + + `:width` + + Number of characters to try to wrap pretty-printed forms at. + + `:print-meta` + + If true, metadata will be printed before values. Defaults to the value of + `*print-meta*` if unset. + + #### Collection Options + + `:sort-keys` + + Print maps and sets with ordered keys. If true, the pretty printer will sort + all unordered collections before printing. If a number, counted collections + will be sorted if they are smaller than the given size. Otherwise + collections are printed in their natural sort order. Sorted collections are + always printed in their natural sort order. + + `:map-delimiter` + + The text placed between key-value pairs in a map. + + `:map-coll-separator` + + The text placed between a map key and a collection value. The keyword :line + will cause line breaks if the whole map does not fit on a single line. + + `:namespace-maps` + + Extract common keyword namespaces from maps using the namespace map literal + syntax. See `*print-namespace-maps*`. + + `:seq-limit` + + If set to a positive number, then lists will only render at most the first n + elements. This can help prevent unintentional realization of infinite lazy + sequences. + + #### Color Options + + `:print-color` + + When true, ouptut colored text from print functions. + + `:color-markup` + + :ansi for ANSI color text (the default) + :html-inline for inline-styled html + :html-classes to use the names of the keys in the :color-scheme map + as class names for spans so styling can be specified via CSS. + + `:color-scheme` + + Map of syntax element keywords to color codes. + + #### Type Handling + + `:print-handlers` + + A lookup function which will return a rendering function for a given class + type. This will be tried before the built-in type logic. See the + `lambdaisland.deep-diff2.puget.dispatch` namespace for some helpful constructors. The returned + function should accept the current printer and the value to be rendered + returning a format document. + + `:print-fallback` + + Keyword argument specifying how to format unknown values. Puget supports a few + different options: + + - `:pretty` renders values with the default colored representation. + - `:print` defers to the standard print method by rendering unknown values + using `pr-str`. + - `:error` will throw an exception when types with no defined handler are + encountered. + - A function value will be called with the current printer options and the + unknown value and is expected to return a formatting document representing + it. + " + (:require [arrangement.core :as order] + [clojure.string :as str] + [fipp.engine :as fe] + [fipp.visit :as fv] + [lambdaisland.deep-diff2.puget.color :as color] + [lambdaisland.deep-diff2.puget.color.ansi] + [lambdaisland.deep-diff2.puget.color.html] + [lambdaisland.deep-diff2.puget.dispatch :as dispatch] + #?(:cljs [goog.object :as gobj])) + (:import #?@(:clj [(java.text SimpleDateFormat) + (java.util TimeZone) + (java.sql Timestamp)] + :cljs [(goog.i18n DateTimeFormat)]))) + +(defn get-type-name + "Get the type of the given object as a string. For Clojure, gets the name of + the class of the object. For ClojureScript, gets either the `name` attribute + or the protocol name if the `name` attribute doesn't exist." + [x] + #?(:clj (.getName (class x)) + :cljs (let [t (type x) + n (.-name t)] + (if (empty? n) + (pr-str t) + n)))) + +(defn get-identity-hashcode + "Get the hashcode for a given object o" + [o] + #?(:clj (System/identityHashCode o) + :cljs (hash o))) + +(defn to-hex-string + "Returns a hex representation of input-string" + [input-string] + #?(:clj (Integer/toHexString input-string) + :cljs (.toString input-string 16))) + +;; ## Control Vars +(def ^:dynamic *options* + "Default options to use when constructing new printers." + {:width 80 + :sort-keys 80 + :map-delimiter "," + :map-coll-separator " " + :namespace-maps false + :print-fallback :pretty + :print-color false + :color-markup :ansi + :color-scheme + {;; syntax elements + :delimiter [:bold :red] + :tag [:red] + + ;; primitive values + :nil [:bold :black] + :boolean [:green] + :number [:cyan] + :string [:bold :magenta] + :character [:bold :magenta] + :keyword [:bold :yellow] + :symbol nil + + ;; special types + :function-symbol [:bold :blue] + :class-delimiter [:blue] + :class-name [:bold :blue]}}) + +(defn merge-options + "Merges maps of printer options, taking care to combine the color scheme + correctly." + [a b] + (let [colors (merge (:color-scheme a) (:color-scheme b))] + (assoc (merge a b) :color-scheme colors))) + +(defmacro with-options + "Executes the given expressions with a set of options merged into the current + option map." + [opts & body] + `(binding [*options* (merge-options *options* ~opts)] + ~@body)) + +(defmacro with-color + "Executes the given expressions with colored output enabled." + [& body] + `(with-options {:print-color true} + ~@body)) + +(defn color-text + "Produces text colored according to the active color scheme. This is mostly + useful to clients which want to produce output which matches data printed by + Puget, but which is not directly printed by the library. Note that this + function still obeys the `:print-color` option." + ([element text] + (color-text *options* element text)) + ([options element text] + (color/text options element text))) + +;; ## Formatting Methods +(defn- order-collection + "Takes a sequence of entries and checks the mode to determine whether to sort + them. Returns an appropriately ordered sequence." + [mode coll sort-fn] + (if (and (not (sorted? coll)) + (or (true? mode) + (and (number? mode) + (counted? coll) + (>= mode (count coll))))) + (sort-fn coll) + (seq coll))) + + +(defn- common-key-ns + "Extract a common namespace from the keys in the map. Returns a tuple of the + ns string and the stripped map, or nil if the keys are not keywords or there + is no sufficiently common namespace." + [m] + (when (every? (every-pred keyword? namespace) (keys m)) + (let [nsf (frequencies (map namespace (keys m))) + [common n] (apply max-key val nsf)] + (when (< (/ (count m) 2) n) + [common + (into (empty m) + (map (fn strip-common + [[k v :as e]] + (if (= common (namespace k)) + [(keyword (name k)) v] + e))) + m)])))) + +(defn format-unknown + "Renders common syntax doc for an unknown representation of a value." + ([printer value] + (format-unknown printer value (str value))) + ([printer value repr] + (format-unknown printer value (get-type-name value) repr)) + ([printer value tag repr] + (let [sys-id (to-hex-string (get-identity-hashcode value))] + [:span + (color/document printer :class-delimiter "#<") + (color/document printer :class-name tag) + (color/document printer :class-delimiter "@") + sys-id + (when (not= repr (str tag "@" sys-id)) + (list " " repr)) + (color/document printer :class-delimiter ">")]))) + +(defn format-doc* + "Formats a document without considering metadata." + [printer value] + (let [lookup (:print-handlers printer) + handler (and lookup (lookup value))] + (if handler + (handler printer value) + (fv/visit* printer value)))) + +(defn format-doc + "Recursively renders a print document for the given value." + [printer value] + (if-let [metadata (meta value)] + (fv/visit-meta printer metadata value) + (format-doc* printer value))) + +;; ## Type Handlers +(defn pr-handler + "Print handler which renders the value with `pr-str`." + [printer value] + (pr-str value)) + +(defn unknown-handler + "Print handler which renders the value using the printer's unknown type logic." + [printer value] + (fv/visit-unknown printer value)) + +(defn tagged-handler + "Generates a print handler function which renders a tagged-literal with the + given tag and a value produced by calling the function." + [tag value-fn] + (when-not (symbol? tag) + (throw (ex-info (str "Cannot create tagged handler with non-symbol tag " + (pr-str tag)) + {:tag tag, :value-fn value-fn}))) + (when-not (ifn? value-fn) + (throw (ex-info (str "Cannot create tagged handler for " tag + " with non-function value transform") + {:tag tag, :value-fn value-fn}))) + (fn handler + [printer value] + (format-doc printer (tagged-literal tag (value-fn value))))) + +(def inst-pattern "yyyy-MM-dd'T'HH:mm:ss.SSS-00:00") + +#?(:cljs + (defn utc-date [date] + (js/Date. + (.getUTCFullYear date) + (.getUTCMonth date) + (.getUTCDate date) + (.getUTCHours date) + (.getUTCMinutes date) + (.getUTCSeconds date) + (.getUTCMilliseconds date)))) + +#?(:clj + (defn utc-timestamp-format ^SimpleDateFormat [] + (doto (SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss") + (.setTimeZone (TimeZone/getTimeZone "GMT"))))) + +(def platform-handlers + "Map of print handlers for Java/JavaScript types. This supports syntax for regular + expressions, dates, UUIDs, and futures." + #?(:clj + {java.lang.Class + (fn class-handler + [printer value] + (format-unknown printer value "Class" (get-type-name value))) + + java.util.concurrent.Future + (fn future-handler + [printer value] + (let [doc (if (future-done? promise) + (format-doc printer @value) + (color/document printer :nil "pending"))] + (format-unknown printer value "Future" doc))) + + java.util.UUID + (tagged-handler 'uuid str) + + java.util.Date + (tagged-handler + 'inst + #(-> (java.text.SimpleDateFormat. inst-pattern) + (doto (.setTimeZone (java.util.TimeZone/getTimeZone "GMT"))) + (.format ^java.util.Date %))) + + java.util.GregorianCalendar + (tagged-handler + 'inst + #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) + offset-minutes (- (.length formatted) 2)] + (str (subs formatted 0 offset-minutes) + ":" + (subs formatted offset-minutes)))) + + java.sql.Timestamp + (tagged-handler + 'inst + (fn [ts] + (str (.format ^SimpleDateFormat (utc-timestamp-format) ts) + (format ".%09d-00:00" (.getNanos ^Timestamp ts)))))} + + :cljs + {inst? + (tagged-handler + 'inst + #(.format (DateTimeFormat. inst-pattern) (utc-date %))) + + uuid? + (tagged-handler 'uuid str) + + object? + (tagged-handler + 'js + (fn [x] + ;; non-recursive conversion to map + (reduce (fn [m k] + (assoc m k (gobj/get x k))) + {} + (js/Object.keys x))))})) + +(def clojure-handlers + "Map of print handlers for 'primary' Clojure types. These should take + precedence over the handlers in `clojure-interface-handlers`." + {#?(:clj clojure.lang.Atom + :cljs #(implements? IAtom %)) + (fn atom-handler + [printer value] + (format-unknown printer value "Atom" (format-doc printer @value))) + #?(:clj clojure.lang.Delay + :cljs #(implements? Delay %)) + (fn delay-handler + [printer value] + (let [doc (if (realized? value) + (format-doc printer @value) + (color/document printer :nil "pending"))] + (format-unknown printer value "Delay" doc))) + #?(:clj clojure.lang.ISeq + :cljs seq?) + (fn iseq-handler + [printer value] + (fv/visit-seq printer value))}) + +(def clojure-interface-handlers + "Fallback print handlers for other Clojure interfaces." + {#?(:clj clojure.lang.IPending + :cljs #(implements? IPending %)) + (fn pending-handler + [printer value] + (let [doc (if (realized? value) + (format-doc printer @value) + (color/document printer :nil "pending"))] + (format-unknown printer value doc))) + #?(:clj clojure.lang.Fn + :cljs fn?) + (fn fn-handler + [printer value] + (let [doc (let [[vname & tail] (-> (get-type-name value) + (str/replace-first "$" "/") + (str/split #"\$"))] + (if (seq tail) + (str vname "[" + (->> tail + (map #(first (str/split % #"__"))) + (str/join "/")) + "]") + vname))] + (format-unknown printer value "Fn" doc)))}) + +(def common-handlers + "Print handler dispatch combining Java and Clojure handlers with inheritance + lookups. Provides a similar experience as the standard Clojure + pretty-printer." + #?(:clj (dispatch/chained-lookup + (dispatch/inheritance-lookup platform-handlers) + (dispatch/inheritance-lookup clojure-handlers) + (dispatch/inheritance-lookup clojure-interface-handlers)) + :cljs (dispatch/chained-lookup + (dispatch/predicate-lookup platform-handlers) + (dispatch/predicate-lookup clojure-handlers) + (dispatch/predicate-lookup clojure-interface-handlers)))) + + +;; ## Canonical Printer Implementation +(defrecord CanonicalPrinter [print-handlers] + fv/IVisitor + + ;; Primitive Types + (visit-nil + [this] + "nil") + + (visit-boolean + [this value] + (str value)) + + (visit-number + [this value] + (pr-str value)) + + (visit-character + [this value] + (pr-str value)) + + (visit-string + [this value] + (pr-str value)) + + (visit-keyword + [this value] + (str value)) + + (visit-symbol + [this value] + (str value)) + + ;; Collection Types + (visit-seq + [this value] + (if (seq value) + (let [entries (map (partial format-doc this) value)] + [:group "(" [:align (interpose " " entries)] ")"]) + "()")) + + (visit-vector + [this value] + (if (seq value) + (let [entries (map (partial format-doc this) value)] + [:group "[" [:align (interpose " " entries)] "]"]) + "[]")) + + (visit-set + [this value] + (if (seq value) + (let [entries (map (partial format-doc this) + (sort order/rank value))] + [:group "#{" [:align (interpose " " entries)] "}"]) + "#{}")) + + (visit-map + [this value] + (if (seq value) + (let [entries (map #(vector :span (format-doc this (key %)) + " " (format-doc this (val %))) + (sort-by first order/rank value))] + [:group "{" [:align (interpose " " entries)] "}"]) + "{}")) + + ;; Clojure Types + (visit-meta + [this metadata value] + ;; Metadata is not printed for canonical rendering. + (format-doc* this value)) + + (visit-var + [this value] + ;; Defer to unknown, cover with handler. + (fv/visit-unknown this value)) + + (visit-pattern + [this value] + ;; Defer to unknown, cover with handler. + (fv/visit-unknown this value)) + + (visit-record + [this value] + ;; Defer to unknown, cover with handler. + (fv/visit-unknown this value)) + + ;; Special Types + (visit-tagged + [this value] + [:span (str "#" (:tag value)) " " (format-doc this (:form value))]) + + (visit-unknown + [this value] + (let [not-defined-representation-message (str "No defined representation for " + (get-type-name value) + ": " + (pr-str value))] + (throw (ex-info not-defined-representation-message + {:causes #{:undefined-representation}}))))) + +(defn canonical-printer + "Constructs a new canonical printer with the given handler dispatch." + ([] + (canonical-printer nil)) + ([handlers] + (assoc (CanonicalPrinter. handlers) + :width 0))) + +;; Remove automatic constructor function. +#?(:clj (ns-unmap *ns* '->CanonicalPrinter)) + +;; ## Pretty Printer Implementation +(defrecord PrettyPrinter + + [width + print-meta + sort-keys + map-delimiter + map-coll-separator + namespace-maps + seq-limit + print-color + color-markup + color-scheme + print-handlers + print-fallback] + + fv/IVisitor + + ;; Primitive Types + (visit-nil + [this] + (color/document this :nil "nil")) + + (visit-boolean + [this value] + (color/document this :boolean (str value))) + + (visit-number + [this value] + (color/document this :number (pr-str value))) + + (visit-character + [this value] + (color/document this :character (pr-str value))) + + (visit-string + [this value] + (color/document this :string (pr-str value))) + + (visit-keyword + [this value] + (color/document this :keyword (str value))) + + (visit-symbol + [this value] + (color/document this :symbol (str value))) + + ;; Collection Types + (visit-seq + [this value] + (if (seq value) + (let [[values trimmed?] + (if (and seq-limit (pos? seq-limit)) + (let [head (take seq-limit value)] + [head (<= seq-limit (count head))]) + [(seq value) false]) + elements + (cond-> (if (symbol? (first values)) + (cons (color/document this :function-symbol (str (first values))) + (map (partial format-doc this) (rest values))) + (map (partial format-doc this) values)) + trimmed? (concat [(color/document this :nil "...")]))] + [:group + (color/document this :delimiter "(") + [:align (interpose :line elements)] + (color/document this :delimiter ")")]) + (color/document this :delimiter "()"))) + + (visit-vector + [this value] + (if (seq value) + [:group + (color/document this :delimiter "[") + [:align (interpose :line (map (partial format-doc this) value))] + (color/document this :delimiter "]")] + (color/document this :delimiter "[]"))) + + (visit-set + [this value] + (if (seq value) + (let [entries (order-collection sort-keys value (partial sort order/rank))] + [:group + (color/document this :delimiter "#{") + [:align (interpose :line (map (partial format-doc this) entries))] + (color/document this :delimiter "}")]) + (color/document this :delimiter "#{}"))) + + (visit-map + [this value] + (if (seq value) + (let [[common-ns stripped] (when namespace-maps (common-key-ns value)) + kvs (order-collection sort-keys + (or stripped value) + (partial sort-by first order/rank)) + entries (map (fn [[k v]] + [:span + (format-doc this k) + (if (coll? v) + map-coll-separator + " ") + (format-doc this v)]) + kvs) + map-doc [:group + (color/document this :delimiter "{") + [:align (interpose [:span map-delimiter :line] entries)] + (color/document this :delimiter "}")]] + (if common-ns + [:group (color/document this :tag (str "#:" common-ns)) :line map-doc] + map-doc)) + (color/document this :delimiter "{}"))) + + ;; Clojure Types + (visit-meta + [this metadata value] + (if print-meta + [:align + [:span (color/document this :delimiter "^") (format-doc this metadata)] + :line (format-doc* this value)] + (format-doc* this value))) + + (visit-var + [this value] + [:span + (color/document this :delimiter "#'") + (color/document this :symbol (subs (str value) 2))]) + + (visit-pattern + [this value] + [:span + (color/document this :delimiter "#") + (color/document this :string (str \" value \"))]) + + (visit-record + [this value] + (fv/visit-tagged + this + (tagged-literal (symbol (get-type-name value)) + (into {} value)))) + + ;; Special Types + (visit-tagged + [this value] + (let [{:keys [tag form]} value] + [:group + (color/document this :tag (str "#" (:tag value))) + (if (coll? form) :line " ") + (format-doc this (:form value))])) + + (visit-unknown + [this value] + (case print-fallback + :pretty + (format-unknown this value) + + :print + [:span (pr-str value)] + + :error + (throw (ex-info (str "No defined representation for " (get-type-name value) ": " (pr-str value)) + {:causes #{:undefined-representation}})) + (if (ifn? print-fallback) + (print-fallback this value) + (throw (ex-info (str "Unsupported value for print-fallback: " (pr-str print-fallback)) + {:causes #{:unsupported-value}})))))) + +(defn pretty-printer + "Constructs a new printer from the given configuration." + [opts] + (->> [{:print-meta *print-meta* + :print-handlers common-handlers} + *options* + opts] + (reduce merge-options) + (map->PrettyPrinter))) + +;; Remove automatic constructor function. +#?(:clj (ns-unmap *ns* '->PrettyPrinter)) + +;; ## Printing Functions +(defn render-out + "Prints a value using the given printer." + ([printer value] + (render-out printer value nil)) + ([printer value opts] + (binding [*print-meta* false] + (fe/pprint-document + (format-doc printer value) + (merge {:width (:width printer)} + opts))))) + +(defn render-str + "Renders a value to a string using the given printer." + ^String + [printer value] + (str/trim-newline + (with-out-str + (render-out printer value)))) + +(defn pprint + "Pretty-prints a value to *out*. Options may be passed to override the + default *options* map." + ([value] + (pprint value nil)) + ([value opts] + (render-out (pretty-printer opts) value opts))) + +(defn pprint-str + "Pretty-print a value to a string." + ([value] + (pprint-str value nil)) + ([value opts] + (render-str (pretty-printer opts) value))) + +(defn cprint + "Like pprint, but turns on colored output." + ([value] + (cprint value nil)) + ([value opts] + (pprint value (assoc opts :print-color true)))) + +(defn cprint-str + "Pretty-prints a value to a colored string." + ([value] + (cprint-str value nil)) + ([value opts] + (pprint-str value (assoc opts :print-color true)))) diff --git a/test/lambdaisland/deep_diff/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc similarity index 89% rename from test/lambdaisland/deep_diff/diff_test.cljc rename to test/lambdaisland/deep_diff2/diff_test.cljc index 4d8221a..641c0e9 100644 --- a/test/lambdaisland/deep_diff/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -1,18 +1,10 @@ -(ns lambdaisland.deep-diff.diff-test +(ns lambdaisland.deep-diff2.diff-test (:require [clojure.test :refer [deftest testing is are]] [clojure.test.check :as tc] [clojure.test.check.clojure-test :refer [defspec]] [clojure.test.check.generators :as gen] [clojure.test.check.properties :as prop] - [lambdaisland.deep-diff.diff :as diff])) - -(doseq [v [#'diff/diff-seq - #'diff/diff-seq-replacements - #'diff/diff-seq-insertions - #'diff/diff-seq-deletions - #'diff/replacements - #'diff/del+ins]] - (alter-meta! v dissoc :private)) + [lambdaisland.deep-diff2.diff-impl :as diff])) (defrecord ARecord []) @@ -204,12 +196,21 @@ (is (= [#{0 1} {-1 [[]]}] (diff/del+ins [0 0] [[]])))) -(defspec round-trip-diff 100 - (prop/for-all [x gen/any - y gen/any] - (let [diff (diff/diff x y)] - (= [x y] [(diff/left-undiff diff) (diff/right-undiff diff)])))) +;; (not= ##NaN ##NaN), which messes up test results +;; https://stackoverflow.com/questions/16983955/check-for-nan-in-clojurescript +(defn NaN? [node] + #?(:clj false + :cljs + (and (= (.call js/toString node) (str "[object Number]")) + (js/eval (str node " != +" node ))))) +(def gen-any-except-NaN (gen/such-that (complement NaN?) gen/any)) + +(defspec round-trip-diff 100 + (prop/for-all [x gen-any-except-NaN + y gen-any-except-NaN] + (let [diff (diff/diff x y)] + (= [x y] [(diff/left-undiff diff) (diff/right-undiff diff)])))) (deftest diff-seq-test (is (= [(diff/->Insertion 1) 2 (diff/->Insertion 3)] @@ -269,11 +270,11 @@ (use 'kaocha.repl) (run) - (defmethod clojure.core/print-method lambdaisland.deep-diff.diff.Insertion [v writer] + (defmethod clojure.core/print-method lambdaisland.deep-diff2.diff.Insertion [v writer] (.write writer (pr-str `(diff/->Insertion ~(:+ v))))) - (defmethod clojure.core/print-method lambdaisland.deep-diff.diff.Deletion [v writer] + (defmethod clojure.core/print-method lambdaisland.deep-diff2.diff.Deletion [v writer] (.write writer (pr-str `(diff/->Deletion ~(:- v))))) - (defmethod clojure.core/print-method lambdaisland.deep-diff.diff.Mismatch [v writer] + (defmethod clojure.core/print-method lambdaisland.deep-diff2.diff.Mismatch [v writer] (.write writer (pr-str `(diff/->Mismatch ~(:- v) ~(:+ v)))))) diff --git a/test/lambdaisland/deep_diff/printer_test.cljc b/test/lambdaisland/deep_diff2/printer_test.cljc similarity index 91% rename from test/lambdaisland/deep_diff/printer_test.cljc rename to test/lambdaisland/deep_diff2/printer_test.cljc index 7c30eb7..155593d 100644 --- a/test/lambdaisland/deep_diff/printer_test.cljc +++ b/test/lambdaisland/deep_diff2/printer_test.cljc @@ -1,7 +1,7 @@ -(ns lambdaisland.deep-diff.printer-test +(ns lambdaisland.deep-diff2.printer-test (:require [clojure.test :refer [deftest testing is are]] - [lambdaisland.deep-diff.diff :as diff] - [lambdaisland.deep-diff.printer :as printer]) + [lambdaisland.deep-diff2.diff-impl :as diff] + [lambdaisland.deep-diff2.printer-impl :as printer]) #?(:clj (:import (java.sql Timestamp) (java.util Date From aa2cf6dff3fd78c49e7c4b8b4bcba1078d491df3 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 17:12:48 +0100 Subject: [PATCH 019/158] Prep release of deep-diff2 --- .VERSION_PREFIX | 1 + CHANGELOG.md | 4 ++- README.md | 84 ++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 .VERSION_PREFIX diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX new file mode 100644 index 0000000..359a5b9 --- /dev/null +++ b/.VERSION_PREFIX @@ -0,0 +1 @@ +2.0.0 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 10bb375..adbdcf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,12 @@ ## Added -## Fixed +- Added support for ClojureScript (ported to CLJC) ## Changed +- Changed namespace and artifact (jar) names to include a "2" suffix, because of breaking changes. + # 0.0-47 (2019-04-11 / 27cf55c) ## Added diff --git a/README.md b/README.md index ee7b7de..e57d14e 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,36 @@ -# lambdaisland/deep-diff +# lambdaisland/deep-diff2 -[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff)](https://cljdoc.org/d/lambdaisland/deep-diff) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff.svg)](https://clojars.org/lambdaisland/deep-diff) [![codecov](https://codecov.io/gh/lambdaisland/deep-diff/branch/master/graph/badge.svg)](https://codecov.io/gh/lambdaisland/deep-diff) +[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) [![codecov](https://codecov.io/gh/lambdaisland/deep-diff2/branch/master/graph/badge.svg)](https://codecov.io/gh/lambdaisland/deep-diff2) -Recursively compare Clojure data structures, and produce a colorized diff of the result. +Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. ![screenshot showing REPL example](screenshot.png) + +### Support Lambda Island Open Source + +If you find value in our work please consider [becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute) + + ## Install -[![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff.svg)](https://clojars.org/lambdaisland/deep-diff) +[![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) ## Use -- [API docs](https://cljdoc.org/d/lambdaisland/deep-diff/CURRENT) +- [API docs](https://cljdoc.org/d/lambdaisland/deep-diff2/CURRENT) ``` clojure -(require '[lambdaisland.deep-diff :as ddiff]) +(require '[lambdaisland.deep-diff2 :as ddiff]) (ddiff/pretty-print (ddiff/diff {:a 1 :b 2} {:a 1 :c 3})) ``` ### Diffing -`lambdaisland.deep-diff/diff` takes two arguments and returns a "diff", a data +`lambdaisland.deep-diff2/diff` takes two arguments and returns a "diff", a data structure that contains markers for insertions, deletions, or mismatches. These are records with `-` and `+` fields. @@ -35,7 +41,7 @@ are records with `-` and `+` fields. ### Printing -You can pass this diff to `lambdaisland.deep-diff/pretty-print`. This function +You can pass this diff to `lambdaisland.deep-diff2/pretty-print`. This function uses [Puget](https://github.com/greglook/puget) and [Fipp](https://github.com/brandonbloom/fipp) to format the diff and print the result to standard out. @@ -49,12 +55,68 @@ For fine grained control you can create a custom Puget printer, and supply it to (ddiff/pretty-print (ddiff/diff {:a 1 :b 2} {:a 1 :b 3}) narrow-printer) ``` -For more advanced uses like incorporating diffs into your own Fipp documents, see `lambdaisland.deep-diff.printer/format-doc`, `lambdaisland.deep-diff.printer/print-doc`. +For more advanced uses like incorporating diffs into your own Fipp documents, see `lambdaisland.deep-diff2.printer/format-doc`, `lambdaisland.deep-diff2.printer/print-doc`. You can register print handlers for new types using -`lambdaisland.deep-diff.printer/register-print-handler!`, or by passing and +`lambdaisland.deep-diff2.printer/register-print-handler!`, or by passing and `:extra-handlers` map to `printer`. +### Deep-diff 1 vs 2 + +The original deep-diff only worked on Clojure, not ClojureScript. In porting the +code to CLJC we were forced to make some breaking changes. To not break existing +consumers we decided to move both the namespaces and the released artifact to +new names, so the old and new deep-diff can exist side by side. + +When starting new projects you should use `lambdaisland/deep-diff2`. However if +you have existing code that uses `lambdaisland/deep-diff` and you don't need the +ClojureScript support then it is not necessary to upgrade. The old version still +works fine (on Clojure). + +You can upgrade of course, simply by replacing all namespace names from +`lambdaisland.deep-diff` to `lambdaisland.deep-diff2`. If you are only using the +top-level API (`diff`, `printer`, `pretty-print`) and you aren't using custom +print handlers, then things should work exactly the same. If you find that +deep-diff 2 behaves differently then please file an issue, you may have found a +regression. + +The old code still lives on the `deep-diff-1` branch, and we do accept bugfix +patches there, so we may put out bugfix releases of the original deep-diff in +the future. When in doubt check the CHANGELOG. + + +### Contributing + +Everyone has a right to submit patches to this projects, and thus become a contributor. + +Contributors MUST + +- adhere to the [LambdaIsland Clojure Style Guide](https://nextjournal.com/lambdaisland/clojure-style-guide) +- write patches that solve a problem. Start by stating the problem, then supply a minimal solution. `*` +- agree to license their contributions as MPLv2. +- not break the contract with downstream consumers. `**` +- not break the tests. + +Contributors SHOULD + +- update the CHANGELOG and README. +- add tests for new functionality. + +If you submit a pull request that adheres to these rules, then it will almost +certainly be merged immediately. However some things may require more +consideration. If you add new dependencies, or significantly increase the API +surface, then we need to decide if these changes are in line with the project's +goals. In this case you can start by [writing a +pitch](https://nextjournal.com/lambdaisland/pitch-template), and collecting +feedback on it. + +`*` This goes for features too, a feature needs to solve a problem. State the problem it solves, then supply a minimal solution. + +`**` As long as this project has not seen a public release (i.e. is not on Clojars) +we may still consider making breaking changes, if there is consensus that the +changes are justified. + + ## Credits This library builds upon @@ -74,6 +136,6 @@ Another library that implements a form of data structure diffing is [editscript] ## License -Copyright © 2018 Arne Brasseur +Copyright © 2018-2020 Arne Brasseur and Contributors Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt From 7c4f923b7c4d57a99ee28c252ed08d4443c96a9c Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 17:17:42 +0100 Subject: [PATCH 020/158] Add version vectors directly to the README --- README.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e57d14e..66dc8f5 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,19 @@ Recursively compare Clojure or ClojureScript data structures, and produce a colo If you find value in our work please consider [becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute) -## Install +## Installation -[![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) +deps.edn + +``` +lambdaisland/deep-diff2 {:mvn/version "2.0.0"} +``` + +project.clj + +``` +[lambdaisland/deep-diff2 "2.0.0"] +``` ## Use @@ -61,7 +71,7 @@ You can register print handlers for new types using `lambdaisland.deep-diff2.printer/register-print-handler!`, or by passing and `:extra-handlers` map to `printer`. -### Deep-diff 1 vs 2 +## Deep-diff 1 vs 2 The original deep-diff only worked on Clojure, not ClojureScript. In porting the code to CLJC we were forced to make some breaking changes. To not break existing @@ -85,7 +95,7 @@ patches there, so we may put out bugfix releases of the original deep-diff in the future. When in doubt check the CHANGELOG. -### Contributing +## Contributing Everyone has a right to submit patches to this projects, and thus become a contributor. From 69e15c6cb77723caea5a0c1554eaf0177f91079d Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 17:20:34 +0100 Subject: [PATCH 021/158] sed s/deep-diff/deep-diff2/g -i pom.xml --- pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 27d3bef..fcc9b09 100644 --- a/pom.xml +++ b/pom.xml @@ -2,11 +2,11 @@ 4.0.0 lambdaisland - deep-diff + deep-diff2 0.0-47 - deep-diff + deep-diff2 Recursively diff Clojure data structures. - https://github.com/lambdaisland/deep-diff + https://github.com/lambdaisland/deep-diff2 2018 Lambda Island @@ -19,9 +19,9 @@ - https://github.com/lambdaisland/deep-diff - scm:git:git://github.com/lambdaisland/deep-diff.git - scm:git:ssh://git@github.com/lambdaisland/deep-diff.git + https://github.com/lambdaisland/deep-diff2 + scm:git:git://github.com/lambdaisland/deep-diff2.git + scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git eb1ce3037540b72635e32c3dfc0fbe588d2e195f From 2862182d9356734affd200a242277ecd7e536776 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 17:25:44 +0100 Subject: [PATCH 022/158] Fix the any-except-NaN generator, need to account for recursion --- test/lambdaisland/deep_diff2/diff_test.cljc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index 641c0e9..92605b8 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -204,7 +204,9 @@ (and (= (.call js/toString node) (str "[object Number]")) (js/eval (str node " != +" node ))))) -(def gen-any-except-NaN (gen/such-that (complement NaN?) gen/any)) +(def gen-any-except-NaN (gen/recursive-gen + gen/container-type + (gen/such-that (complement NaN?) gen/simple-type))) (defspec round-trip-diff 100 (prop/for-all [x gen-any-except-NaN From 0e122ccd005e68285a682576b41b89fe4aea4e21 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 17:30:26 +0100 Subject: [PATCH 023/158] # 2.0.0-72 (2020-03-27 / 2862182) ## Added - Added support for ClojureScript (ported to CLJC) ## Changed - Changed namespace and artifact (jar) names to include a "2" suffix, because of breaking changes. --- CHANGELOG.md | 2 +- README.md | 4 ++-- pom.xml | 17 ++++++----------- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adbdcf1..5e224c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.0.0-72 (2020-03-27 / 2862182) ## Added diff --git a/README.md b/README.md index 66dc8f5..1fca7eb 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ If you find value in our work please consider [becoming a backer on Open Collect deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0-72"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0"] +[lambdaisland/deep-diff2 "2.0.0-72"] ``` ## Use diff --git a/pom.xml b/pom.xml index fcc9b09..cbd1c06 100644 --- a/pom.xml +++ b/pom.xml @@ -28,27 +28,22 @@ org.clojure clojure - 1.10.0 - - - mvxcvi - puget - 1.1.2 + 1.10.1 fipp fipp - 0.6.17 + 0.6.22 org.clojure core.rrb-vector - 0.0.14 + 0.1.1 - tech.droit + org.clojars.rymndhng clj-diff - 1.0.1 + 1.1.1-SNAPSHOT mvxcvi @@ -57,7 +52,7 @@ - src + resources src From e624bd3755f65773d714958f96fe9c9f12e7375d Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 27 Mar 2020 17:31:32 +0100 Subject: [PATCH 024/158] Add CHANGELOG placeholders + update versions in pom.xml --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e224c3..dcc57a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.0.0-72 (2020-03-27 / 2862182) ## Added diff --git a/pom.xml b/pom.xml index cbd1c06..256eb3d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 0.0-47 + 2.0.0-72 deep-diff2 Recursively diff Clojure data structures. https://github.com/lambdaisland/deep-diff2 @@ -22,7 +22,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - eb1ce3037540b72635e32c3dfc0fbe588d2e195f + 0e122ccd005e68285a682576b41b89fe4aea4e21 @@ -66,7 +66,7 @@ - eb1ce3037540b72635e32c3dfc0fbe588d2e195f + 0e122ccd005e68285a682576b41b89fe4aea4e21 From 21c86413841b180eac4fdc5ff953fa9ebcd28dff Mon Sep 17 00:00:00 2001 From: JarrodCTaylor Date: Tue, 31 Mar 2020 13:33:51 -0500 Subject: [PATCH 025/158] Fix typos resulting from naming changes --- src/lambdaisland/deep_diff2.cljc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lambdaisland/deep_diff2.cljc b/src/lambdaisland/deep_diff2.cljc index 94a2a3c..78ef63c 100644 --- a/src/lambdaisland/deep_diff2.cljc +++ b/src/lambdaisland/deep_diff2.cljc @@ -17,7 +17,7 @@ Insertions/Deletions in maps are marked by wrapping the key, even though the change applies to the whole map entry." [expected actual] - (diff/diff expected actual)) + (diff-impl/diff expected actual)) (defn printer "Construct a Puget printer instance suitable for printing diffs. @@ -36,7 +36,7 @@ Pretty print a diffed data structure, as obtained from [[diff]]. Optionally takes a Puget printer instance, see [[printer]]." ([diff] - (pretty-print diff (build-printer))) + (pretty-print diff (printer))) ([diff printer] (-> diff (printer-impl/format-doc printer) From 2dbf78986d29b627cea18e00afa0c8de526ae36c Mon Sep 17 00:00:00 2001 From: JarrodCTaylor Date: Tue, 31 Mar 2020 13:41:47 -0500 Subject: [PATCH 026/158] 2.0.0-73 (2020-03-31 / 21c8641) --- CHANGELOG.md | 6 ++++++ README.md | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcc57a0..fb7d707 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ ## Changed +# 2.0.0-73 (2020-03-31 / 21c86413) + +## Fixed + +- Typos in deep_diff2.cljs resulting from naming changes + # 2.0.0-72 (2020-03-27 / 2862182) ## Added diff --git a/README.md b/README.md index 1fca7eb..087916a 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ If you find value in our work please consider [becoming a backer on Open Collect deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0-72"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0-73"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0-72"] +[lambdaisland/deep-diff2 "2.0.0-73"] ``` ## Use From c859e62d5fc8af492623e6a47b2e0529bb86bc77 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 09:48:06 +0200 Subject: [PATCH 027/158] Undo version changes in README/CHANGELOG These don't correspond to an actually released version. --- CHANGELOG.md | 8 ++------ README.md | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb7d707..cfa1e11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,10 @@ ## Fixed -## Changed - -# 2.0.0-73 (2020-03-31 / 21c86413) - -## Fixed - - Typos in deep_diff2.cljs resulting from naming changes +## Changed + # 2.0.0-72 (2020-03-27 / 2862182) ## Added diff --git a/README.md b/README.md index 087916a..1fca7eb 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ If you find value in our work please consider [becoming a backer on Open Collect deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0-73"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0-72"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0-73"] +[lambdaisland/deep-diff2 "2.0.0-72"] ``` ## Use From 0bd3a5ef576af2a2d15be4ba6bc31ac86c74ef41 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 09:50:16 +0200 Subject: [PATCH 028/158] Update CI config --- .circleci/config.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5bc9eda..cd20159 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,15 +16,18 @@ commands: steps: - run: clojure -e '(println (System/getProperty "java.runtime.name") (System/getProperty "java.runtime.version") "\nClojure" (clojure-version))' - kaocha/execute: - args: "unit --reporter documentation --plugin cloverage --codecov" + args: "clj --reporter documentation --plugin cloverage --codecov" + clojure_version: << parameters.clojure_version >> + - kaocha/execute: + args: "cljs --reporter documentation --codecov" clojure_version: << parameters.clojure_version >> - kaocha/upload_codecov: - flags: unit + flags: clj jobs: java-11-clojure-1_10: executor: clojure/openjdk11 - steps: [{checkout_and_run: {clojure_version: "1.10.0"}}] + steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] java-9-clojure-1_9: executor: clojure/openjdk9 @@ -32,7 +35,7 @@ jobs: java-8-clojure-1_10: executor: clojure/openjdk8 - steps: [{checkout_and_run: {clojure_version: "1.10.0"}}] + steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] java-8-clojure-1_9: executor: clojure/openjdk8 From f5823e25077ae25dfc17553527bab1790bd7f28a Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 10:59:14 +0200 Subject: [PATCH 029/158] Add smoke tests for top level API --- repl_sessions/str_rep.clj | 34 ++++++++++++++++++++++++++ test/lambdaisland/deep_diff2_test.cljc | 19 ++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 repl_sessions/str_rep.clj create mode 100644 test/lambdaisland/deep_diff2_test.cljc diff --git a/repl_sessions/str_rep.clj b/repl_sessions/str_rep.clj new file mode 100644 index 0000000..081a98c --- /dev/null +++ b/repl_sessions/str_rep.clj @@ -0,0 +1,34 @@ +(ns str-rep + (:require [clojure.string :as str])) + +(defn left-pad [s len pad] + (concat (repeat (- len (count s)) pad) s)) + +(defn int->hex [i] + (str/upper-case + (Integer/toHexString i))) + +(defn unicode-rep [char] + (apply str "\\u" (left-pad (int->hex (long char)) 4 \0))) + +(defn char-rep [char] + (cond + (= \backspace char) + "\\b" + (= \tab char) + "\\t" + (= \newline char) + "\\n" + (= \formfeed char) + "\\f" + (= \return char) + "\\r" + (< (long char) 32) + (unicode-rep char) + :else + (str char))) + +(defn str-rep [s] + (str "\"" + (apply str (map char-rep s)) + "\"")) diff --git a/test/lambdaisland/deep_diff2_test.cljc b/test/lambdaisland/deep_diff2_test.cljc new file mode 100644 index 0000000..15cd703 --- /dev/null +++ b/test/lambdaisland/deep_diff2_test.cljc @@ -0,0 +1,19 @@ +(ns lambdaisland.deep-diff2-test + "Smoke tests of the top level API." + (:require [lambdaisland.deep-diff2 :as ddiff] + [lambdaisland.deep-diff2.diff-impl :as diff-impl] + [clojure.test :refer [is are deftest testing]] + [clojure.string :as str])) + +(deftest diff-test + (is (= [{:foo (diff-impl/->Mismatch 1 2)}] + (ddiff/diff [{:foo 1}] [{:foo 2}])))) + +(deftest printer-test + (is (instance? lambdaisland.deep_diff2.puget.printer.PrettyPrinter + (ddiff/printer)))) + +(deftest pretty-print-test + (is (= "\u001B[1;31m[\u001B[0m\u001B[1;31m{\u001B[0m\u001B[1;33m:foo\u001B[0m \u001B[31m-1\u001B[0m \u001B[32m+2\u001B[0m\u001B[1;31m}\u001B[0m\u001B[1;31m]\u001B[0m\n" + (with-out-str + (ddiff/pretty-print (ddiff/diff [{:foo 1}] [{:foo 2}])))))) From 2596f660900c1315d7ef02f3afe0abbed0b877c6 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 11:01:13 +0200 Subject: [PATCH 030/158] No codecov/cloverage for cljs --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cd20159..5dc3af9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -19,7 +19,7 @@ commands: args: "clj --reporter documentation --plugin cloverage --codecov" clojure_version: << parameters.clojure_version >> - kaocha/execute: - args: "cljs --reporter documentation --codecov" + args: "cljs --reporter documentation" clojure_version: << parameters.clojure_version >> - kaocha/upload_codecov: flags: clj From 441f594bb93c1c945458db02c2b437161f52f025 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 11:13:24 +0200 Subject: [PATCH 031/158] CircleCI: install ws --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5dc3af9..51ec0bd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,7 @@ commands: cache_version: << parameters.clojure_version >> steps: - run: clojure -e '(println (System/getProperty "java.runtime.name") (System/getProperty "java.runtime.version") "\nClojure" (clojure-version))' + - run: npm install ws - kaocha/execute: args: "clj --reporter documentation --plugin cloverage --codecov" clojure_version: << parameters.clojure_version >> From 6d4e13f0a9dd63768f28370f64b14af849288409 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 11:20:06 +0200 Subject: [PATCH 032/158] Fix the version of ClojureScript for tests --- deps.edn | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/deps.edn b/deps.edn index 3e22879..f1fc6c2 100644 --- a/deps.edn +++ b/deps.edn @@ -6,12 +6,13 @@ mvxcvi/arrangement {:mvn/version "1.2.0"}} :aliases {:cljs - {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} + {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} :dev {} :test - {:extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} - lambdaisland/kaocha-cljs {:mvn/version "RELEASE"} - org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} + {:extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} + lambdaisland/kaocha-cljs {:mvn/version "RELEASE"} + org.clojure/clojurescript {:mvn/version "1.10.597"} + org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} From 9c2af831281be7689b342eacd9868e665ba7bc8a Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 11:27:20 +0200 Subject: [PATCH 033/158] CircleCI: only run Clojure 1.10, deep-diff can do 1.9, but kaocha-cljs can not --- .circleci/config.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 51ec0bd..2a5dae9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,22 +30,17 @@ jobs: executor: clojure/openjdk11 steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - java-9-clojure-1_9: + java-9-clojure-1_10: executor: clojure/openjdk9 - steps: [{checkout_and_run: {clojure_version: "1.9.0"}}] + steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] java-8-clojure-1_10: executor: clojure/openjdk8 steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - java-8-clojure-1_9: - executor: clojure/openjdk8 - steps: [{checkout_and_run: {clojure_version: "1.9.0"}}] - workflows: kaocha_test: jobs: - java-11-clojure-1_10 - - java-9-clojure-1_9 + - java-9-clojure-1_10 - java-8-clojure-1_10 - - java-8-clojure-1_9 From 6aa592f97c983cae2f80a1f1c040dcadf8ea870e Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 11:38:11 +0200 Subject: [PATCH 034/158] # 2.0.0-84 (2020-04-01 / 9c2af83) ## Added ## Fixed - Typos in deep_diff2.cljs resulting from naming changes ## Changed --- CHANGELOG.md | 2 +- README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfa1e11..92feb2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.0.0-84 (2020-04-01 / 9c2af83) ## Added diff --git a/README.md b/README.md index 1fca7eb..587c474 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ If you find value in our work please consider [becoming a backer on Open Collect deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0-72"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0-84"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0-72"] +[lambdaisland/deep-diff2 "2.0.0-84"] ``` ## Use From 87d570872ef2327c7f102874be0df057efed0c8e Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 1 Apr 2020 12:12:42 +0200 Subject: [PATCH 035/158] Add CHANGELOG placeholders + update versions in pom.xml --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92feb2e..93154f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.0.0-84 (2020-04-01 / 9c2af83) ## Added diff --git a/pom.xml b/pom.xml index 256eb3d..f960376 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.0.0-72 + 2.0.0-84 deep-diff2 Recursively diff Clojure data structures. https://github.com/lambdaisland/deep-diff2 @@ -22,7 +22,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 0e122ccd005e68285a682576b41b89fe4aea4e21 + 6aa592f97c983cae2f80a1f1c040dcadf8ea870e @@ -66,7 +66,7 @@ - 0e122ccd005e68285a682576b41b89fe4aea4e21 + 6aa592f97c983cae2f80a1f1c040dcadf8ea870e From 35e9c36733ec2dceb9cdb663a7ca92027fcb6186 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 10 Apr 2020 14:23:46 +0200 Subject: [PATCH 036/158] Update README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 587c474..b39590a 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ Recursively compare Clojure or ClojureScript data structures, and produce a colo ### Support Lambda Island Open Source -If you find value in our work please consider [becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute) +lambdaisland/deep-diff2 is part of a growing collection of quality Clojure libraries and +tools released on the Lambda Island label. If you find value in our work please +consider [becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute) ## Installation From 4cbc1555275827161387460de56356d3cd87089b Mon Sep 17 00:00:00 2001 From: JarrodCTaylor Date: Sat, 11 Apr 2020 14:13:39 -0500 Subject: [PATCH 037/158] Fix unsupported cljs lookbehind regex in code inherited from Puget --- CHANGELOG.md | 2 ++ .../deep_diff2/puget/color/html.cljc | 4 +++- test/lambdaisland/deep_diff2/puget_test.cljc | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/lambdaisland/deep_diff2/puget_test.cljc diff --git a/CHANGELOG.md b/CHANGELOG.md index 93154f5..d65458e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Unreleased +- Fix unsupported cljs lookbehind regex in code inherited from Puget + ## Added ## Fixed diff --git a/src/lambdaisland/deep_diff2/puget/color/html.cljc b/src/lambdaisland/deep_diff2/puget/color/html.cljc index b2f69fe..fb06faf 100644 --- a/src/lambdaisland/deep_diff2/puget/color/html.cljc +++ b/src/lambdaisland/deep_diff2/puget/color/html.cljc @@ -65,7 +65,9 @@ (reduce (fn [acc span] (case (first span) nil acc - \& (let [[escaped span] (str/split span #"(?<=;)" 2) + \& (let [semicolon-pos ((fnil inc 0) (str/index-of span \;)) + escaped (subs span 0 semicolon-pos) + span (subs span semicolon-pos) acc (conj acc [:escaped escaped])] (if (seq span) (conj acc span) diff --git a/test/lambdaisland/deep_diff2/puget_test.cljc b/test/lambdaisland/deep_diff2/puget_test.cljc new file mode 100644 index 0000000..01dac48 --- /dev/null +++ b/test/lambdaisland/deep_diff2/puget_test.cljc @@ -0,0 +1,18 @@ +(ns lambdaisland.deep-diff2.puget-test + (:require [clojure.test :refer [deftest testing is]] + [lambdaisland.deep-diff2.puget.color.html :as sut])) + +(deftest puget-html-test + (testing "properly escape html" + (let [input ["
  • Item 1
  • Item 2
"] + expected-result [[:span + [:escaped "<"] "ul id=someList" [:escaped ">"] + [:escaped "<"] "li class=red" [:escaped ">"] + "Item 1" + [:escaped "<"] "/li" [:escaped ">"] + [:escaped "<"] "li" [:escaped ">"] + "Item 2" + [:escaped "<"] "/li" [:escaped ">"] + [:escaped "<"] "/ul" [:escaped ">"]]]] + (is (= expected-result (sut/escape-html-document input)))))) + From 966307f663c8c31dd58a172879fee9bbf785f0f0 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 13 Apr 2020 08:26:00 +0200 Subject: [PATCH 038/158] Clean up CHANGELOG --- CHANGELOG.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d65458e..38b9277 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,17 @@ # Unreleased -- Fix unsupported cljs lookbehind regex in code inherited from Puget - -## Added - ## Fixed +- Fix unsupported cljs lookbehind regex in code inherited from Puget + ## Changed # 2.0.0-84 (2020-04-01 / 9c2af83) -## Added - ## Fixed - Typos in deep_diff2.cljs resulting from naming changes -## Changed - # 2.0.0-72 (2020-03-27 / 2862182) ## Added From da90e106d91929c0f1dc4a82d60a4b2351f3b33f Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 13 Apr 2020 08:27:54 +0200 Subject: [PATCH 039/158] # 2.0.0-90 (2020-04-13 / 966307f) ## Fixed - Fix unsupported cljs lookbehind regex in code inherited from Puget ## Changed --- CHANGELOG.md | 2 +- README.md | 4 ++-- package-lock.json | 25 +++---------------------- 3 files changed, 6 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38b9277..5635cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.0.0-90 (2020-04-13 / 966307f) ## Fixed diff --git a/README.md b/README.md index b39590a..4c5f35f 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,13 @@ consider [becoming a backer on Open Collective](http://opencollective.com/lambda deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0-84"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0-90"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0-84"] +[lambdaisland/deep-diff2 "2.0.0-90"] ``` ## Use diff --git a/package-lock.json b/package-lock.json index 0072123..d83733e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,29 +2,10 @@ "requires": true, "lockfileVersion": 1, "dependencies": { - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "ws": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", - "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==" + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", + "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" } } } From a67ba5a8e4a88d0d29934984b9d7c5dc99fc9fc0 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 20 Apr 2020 11:35:54 +0200 Subject: [PATCH 040/158] Seems I botched this release, updating CHANGELOG and trying again --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5635cc9..3c04ed6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,9 @@ -# 2.0.0-90 (2020-04-13 / 966307f) +# Unreleased ## Fixed - Fix unsupported cljs lookbehind regex in code inherited from Puget -## Changed - # 2.0.0-84 (2020-04-01 / 9c2af83) ## Fixed From 6ff9209a44760750d61d0fb2fb0c781493cbbdf0 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 20 Apr 2020 11:37:59 +0200 Subject: [PATCH 041/158] Remove unnecessary declare --- src/lambdaisland/deep_diff2/diff_impl.cljc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 23c42d2..4ed224b 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -2,7 +2,7 @@ (:require [clojure.data :as data] [clj-diff.core :as seq-diff])) -(declare diff diff-similar left-undiff right-undiff) +(declare diff diff-similar) (defrecord Mismatch [- +]) (defrecord Deletion [-]) From c0f3062cab9904e875bcb9d54304bf2d9a04d15f Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 20 Apr 2020 11:38:58 +0200 Subject: [PATCH 042/158] # 2.0.0-93 (2020-04-20 / 6ff9209) ## Fixed - Fix unsupported cljs lookbehind regex in code inherited from Puget --- CHANGELOG.md | 2 +- README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c04ed6..cd3f255 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.0.0-93 (2020-04-20 / 6ff9209) ## Fixed diff --git a/README.md b/README.md index 4c5f35f..652bba3 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,13 @@ consider [becoming a backer on Open Collective](http://opencollective.com/lambda deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0-90"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0-93"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0-90"] +[lambdaisland/deep-diff2 "2.0.0-93"] ``` ## Use From 43bab04a2e535421641376d381a608550af33ab2 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 20 Apr 2020 11:39:20 +0200 Subject: [PATCH 043/158] Add CHANGELOG placeholders + update versions in pom.xml --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd3f255..94a57fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.0.0-93 (2020-04-20 / 6ff9209) ## Fixed diff --git a/pom.xml b/pom.xml index f960376..7b0f941 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.0.0-84 + 2.0.0-93 deep-diff2 Recursively diff Clojure data structures. https://github.com/lambdaisland/deep-diff2 @@ -22,7 +22,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 6aa592f97c983cae2f80a1f1c040dcadf8ea870e + c0f3062cab9904e875bcb9d54304bf2d9a04d15f @@ -66,7 +66,7 @@ - 6aa592f97c983cae2f80a1f1c040dcadf8ea870e + c0f3062cab9904e875bcb9d54304bf2d9a04d15f From 747dae6f1705da3c210a56c8401aa70f130a6c20 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 13 Jul 2020 08:35:12 +0200 Subject: [PATCH 044/158] Link to Editscript and Huahai Yang's post on the topic --- CHANGELOG.md | 2 +- README.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94a57fe..426c39d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ ## Fixed -- Fix unsupported cljs lookbehind regex in code inherited from Puget +- Fix unsupported cljs lookbehind regex in code inherited from Puget (Thanks [@JarrodCTaylor](https://github.com/JarrodCTaylor)!) # 2.0.0-84 (2020-04-01 / 9c2af83) diff --git a/README.md b/README.md index 652bba3..3d8ce3f 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ Recursively compare Clojure or ClojureScript data structures, and produce a colo ![screenshot showing REPL example](screenshot.png) +Deep-diff2 is foremost intended for creating visual diffs for human consumption, +if you want to programatically diff/patch Clojure data structures then +[Editscript](https://github.com/juji-io/editscript) may be a better fit, see +[this write-up by Huahai Yang](https://juji.io/blog/comparing-clojure-diff-libraries/). + ### Support Lambda Island Open Source From fc12610dd8b49658d04e9d5d54c1dd85e1904b19 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 10 Apr 2020 14:40:33 +0200 Subject: [PATCH 045/158] Setup shadow+chui to demo chui --- .dir-locals.el | 11 ++++++++--- .gitignore | 4 ++++ deps.edn | 6 ++++++ shadow-cljs.edn | 16 ++++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 shadow-cljs.edn diff --git a/.dir-locals.el b/.dir-locals.el index 2b99263..878552e 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -1,7 +1,12 @@ -((nil . ((cider-clojure-cli-global-options . "-A:dev:test") - (cider-repl-display-help-banner . nil) +((nil . ((cider-clojure-cli-global-options . "-A:dev:test:chui") + (cider-custom-cljs-repl-init-form . "(user/cljs-repl)") + (cider-default-cljs-repl . custom) + (cider-preferred-build-tool . clojure-cli) (cider-redirect-server-output-to-repl . t) - (cider-default-cljs-repl . node))) + (cider-repl-display-help-banner . nil))) + (eval . (progn + (make-variable-buffer-local 'cider-jack-in-nrepl-middlewares) + (add-to-list 'cider-jack-in-nrepl-middlewares "shadow.cljs.devtools.server.nrepl/middleware"))) (clojure . ((eval . (define-clojure-indent (assoc 0) (ex-info 0) diff --git a/.gitignore b/.gitignore index 5334ff4..4231252 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,7 @@ pom.xml pom.xml.asc *.jar *.classout +package.json +yarn.lock +.shadow-cljs +resources/public/ui diff --git a/deps.edn b/deps.edn index f1fc6c2..56afc0d 100644 --- a/deps.edn +++ b/deps.edn @@ -11,6 +11,12 @@ :dev {} + :chui + {:extra-deps {lambdaisland/chui {:local/root "../chui"} + thheller/shadow-cljs {:mvn/version "2.8.93"} + garden {:mvn/version "1.3.9"}} + :extra-paths ["../chui/resources" "../chui/dev"]} + :test {:extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} lambdaisland/kaocha-cljs {:mvn/version "RELEASE"} diff --git a/shadow-cljs.edn b/shadow-cljs.edn new file mode 100644 index 0000000..6bbf0d9 --- /dev/null +++ b/shadow-cljs.edn @@ -0,0 +1,16 @@ +{:deps + {:aliases [:dev :chui]} + + :dev-http + {8012 "classpath:public"} + + :builds + {:main + {:target :browser + :modules {:main {:entries [lambdaisland.chui.demo]}} + :output-dir "resources/public/ui" + :asset-path "/ui" + :devtools {:repl-pprint true}}} + + :cache-blockers #{lambdaisland.chui.styles} + } From 5a8965c1fe2a76ce6ac23c6eea5800d25df42063 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 10 Apr 2020 14:46:03 +0200 Subject: [PATCH 046/158] Use the browser-test target, add shadow nrepl middleware --- .dir-locals.el | 8 ++++---- .gitignore | 1 + shadow-cljs.edn | 6 ++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.dir-locals.el b/.dir-locals.el index 878552e..6341326 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -3,10 +3,10 @@ (cider-default-cljs-repl . custom) (cider-preferred-build-tool . clojure-cli) (cider-redirect-server-output-to-repl . t) - (cider-repl-display-help-banner . nil))) - (eval . (progn - (make-variable-buffer-local 'cider-jack-in-nrepl-middlewares) - (add-to-list 'cider-jack-in-nrepl-middlewares "shadow.cljs.devtools.server.nrepl/middleware"))) + (cider-repl-display-help-banner . nil) + (eval . (progn + (make-variable-buffer-local 'cider-jack-in-nrepl-middlewares) + (add-to-list 'cider-jack-in-nrepl-middlewares "shadow.cljs.devtools.server.nrepl/middleware"))))) (clojure . ((eval . (define-clojure-indent (assoc 0) (ex-info 0) diff --git a/.gitignore b/.gitignore index 4231252..5a882b9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ package.json yarn.lock .shadow-cljs resources/public/ui +test diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 6bbf0d9..3dd026f 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -6,10 +6,12 @@ :builds {:main - {:target :browser - :modules {:main {:entries [lambdaisland.chui.demo]}} + {:target :browser-test + :test-dir "test" + :runner-ns lambdaisland.chui.demo :output-dir "resources/public/ui" :asset-path "/ui" + :ns-regexp "-test$" :devtools {:repl-pprint true}}} :cache-blockers #{lambdaisland.chui.styles} From dd1830749679aee1ad0eeeeabb8b14ffa03661f7 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 10 Apr 2020 14:47:07 +0200 Subject: [PATCH 047/158] cache bust the test-data macro --- shadow-cljs.edn | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 3dd026f..e5dfbcf 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -14,5 +14,6 @@ :ns-regexp "-test$" :devtools {:repl-pprint true}}} - :cache-blockers #{lambdaisland.chui.styles} + :cache-blockers #{lambdaisland.chui.styles + lambdaisland.chui.test-data} } From 1477d17ca58c16ff52c1f942fdacb07b5c603738 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 10 Apr 2020 15:03:19 +0200 Subject: [PATCH 048/158] check in package.json --- package-lock.json | 11 ----------- package.json | 8 ++++++++ 2 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 package-lock.json create mode 100644 package.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index d83733e..0000000 --- a/package-lock.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" - } - } -} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1aa5720 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "name": "chui", + "license": "MPL-2.0", + "dependencies": { + "react": "^16.13.1", + "react-dom": "^16.13.1" + } +} From aaf40cab61834c4391f404c595f3b897df652257 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 10 Apr 2020 15:18:30 +0200 Subject: [PATCH 049/158] Actually get the browser-test setup going --- .gitignore | 1 + shadow-cljs.edn | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 5a882b9..32cec67 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ yarn.lock .shadow-cljs resources/public/ui test +resources/public/ diff --git a/shadow-cljs.edn b/shadow-cljs.edn index e5dfbcf..1591e40 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -7,11 +7,10 @@ :builds {:main {:target :browser-test - :test-dir "test" :runner-ns lambdaisland.chui.demo - :output-dir "resources/public/ui" + :test-dir "resources/public" :asset-path "/ui" - :ns-regexp "-test$" + :ns-regexp "-test$" :devtools {:repl-pprint true}}} :cache-blockers #{lambdaisland.chui.styles From ae32bfa514b7d48059829fe33a4305c3df894a2c Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 17 Apr 2020 16:36:24 +0200 Subject: [PATCH 050/158] xxx --- shadow-cljs.edn | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 1591e40..e188aa2 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -14,5 +14,4 @@ :devtools {:repl-pprint true}}} :cache-blockers #{lambdaisland.chui.styles - lambdaisland.chui.test-data} - } + lambdaisland.chui.test-data}} From feeb6caeef25c4365a59e6978e7fda2ad2f9686f Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 20 Apr 2020 11:33:35 +0200 Subject: [PATCH 051/158] WIP --- shadow-cljs.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shadow-cljs.edn b/shadow-cljs.edn index e188aa2..85c270b 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -7,7 +7,7 @@ :builds {:main {:target :browser-test - :runner-ns lambdaisland.chui.demo + :runner-ns lambdaisland.chui.shadowrun :test-dir "resources/public" :asset-path "/ui" :ns-regexp "-test$" From c406c6240afc94e1b894e96a67dc2c677e18bcb5 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:34:01 +0200 Subject: [PATCH 052/158] Switch to our fork of clj-diff Also switch to lioss-based tooling --- .gitignore | 2 +- README.md | 2 + bb_deps.edn | 4 + bin/bb | 109 +++++++++++++++++++++ bin/kaocha | 2 + bin/proj | 13 +++ deps.edn | 15 ++- src/lambdaisland/deep_diff2/diff_impl.cljc | 2 +- 8 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 bb_deps.edn create mode 100755 bin/bb create mode 100755 bin/kaocha create mode 100755 bin/proj diff --git a/.gitignore b/.gitignore index 32cec67..0bd745f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ .nrepl-port target repl -bin scratch.clj /out/ /checkouts/ @@ -19,3 +18,4 @@ yarn.lock resources/public/ui test resources/public/ +.store diff --git a/README.md b/README.md index 3d8ce3f..7b897b9 100644 --- a/README.md +++ b/README.md @@ -151,8 +151,10 @@ This library was originally developed as part of the Another library that implements a form of data structure diffing is [editscript](https://github.com/juji-io/editscript). + ## License Copyright © 2018-2020 Arne Brasseur and Contributors Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt + diff --git a/bb_deps.edn b/bb_deps.edn new file mode 100644 index 0000000..173b8f3 --- /dev/null +++ b/bb_deps.edn @@ -0,0 +1,4 @@ +{:deps + {lambdaisland/open-source {;;:git/url "https://github.com/lambdaisland/open-source" + ;;:sha "8232cc6a368db85e3ae0178445dc3bd58c60bbcb" + :local/root "../open-source"}}} diff --git a/bin/bb b/bin/bb new file mode 100755 index 0000000..3850e14 --- /dev/null +++ b/bin/bb @@ -0,0 +1,109 @@ +#!/usr/bin/env bash + +# Wrapper script for babashka to be dropped into projects, will run `bb` from +# the PATH if it exists, or otherwise download it and store it inside the +# project. When using the system `bb` it will do a version check and warn if the +# version is older than what is requested. +# +# Will look for a `bb_deps.edn` and run that through `clojure` to compute a +# classpath. +# +# Will use rlwrap if it is available. + +name=babashka +babashka_version="0.1.3" +store_dir="$(pwd)/.store" +install_dir="${store_dir}/$name-$babashka_version" + +system_bb="$(which bb)" +set -e + +# https://stackoverflow.com/questions/4023830/how-to-compare-two-strings-in-dot-separated-version-format-in-bash +vercomp () { + if [[ $1 == $2 ]] + then + return 0 + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + return 2 + fi + done + return 0 +} + +if [[ -f "$system_bb" ]]; then + bb_path="$system_bb" +elif [[ -f "$install_dir/bb" ]]; then + bb_path="$install_dir/bb" +else + case "$(uname -s)" in + Linux*) platform=linux;; + Darwin*) platform=macos;; + esac + + echo "$name $babashka_version not found, installing to $install_dir..." + download_url="https://github.com/borkdude/babashka/releases/download/v$babashka_version/babashka-$babashka_version-$platform-amd64.zip" + + mkdir -p $install_dir + echo -e "Downloading $download_url." + curl -o bb.zip -sL "$download_url" + unzip -qqo "bb.zip" -d $install_dir + rm "bb.zip" + bb_path="$install_dir/bb" +fi + +set +e +actual_version="$($bb_path --version | sed 's/babashka v//')" + +vercomp $actual_version $babashka_version +case $? in + 0) ;; # = + 1) ;; # > + 2) echo "WARNING: babashka version is $actual_version, expected $babashka_version" ;; # < +esac +set -e + +try_exec_rlwrap() { + if [ -x "$(command -v rlwrap)" ]; then + exec "rlwrap" "$@" + else + exec "$@" + fi +} + +deps_clj="$(pwd)/.store/deps.clj" + +ensure_deps_clj() { + if [[ ! -f "${deps_clj}" ]]; then + mkdir -p "${store_dir}" + curl -sL https://raw.githubusercontent.com/borkdude/deps.clj/master/deps.clj -o "${deps_clj}" + fi +} + +if [[ -f bb_deps.edn ]]; then + ensure_deps_clj + # Note this will install clojure-tools in ~/.deps.clj/ClojureTools + cp="$($bb_path $deps_clj -Srepro -Sdeps-file bb_deps.edn -Spath)" + try_exec_rlwrap "$bb_path" "-cp" "${cp}" "$@" +else + try_exec_rlwrap "$bb_path" "$@" +fi diff --git a/bin/kaocha b/bin/kaocha new file mode 100755 index 0000000..4a31cbf --- /dev/null +++ b/bin/kaocha @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +clojure -A:dev:test -m kaocha.runner "$@" diff --git a/bin/proj b/bin/proj new file mode 100755 index 0000000..cdf9e80 --- /dev/null +++ b/bin/proj @@ -0,0 +1,13 @@ +#!bin/bb + +(ns proj (:require [lioss.main :as lioss])) + +(lioss/main + {:license :epl + :inception-year 2018 + :description "Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result."}) + + +;; Local Variables: +;; mode:clojure +;; End: diff --git a/deps.edn b/deps.edn index 56afc0d..f736140 100644 --- a/deps.edn +++ b/deps.edn @@ -1,9 +1,8 @@ {:paths ["resources" "src" "test"] - :deps {org.clojure/clojure {:mvn/version "1.10.1"} - fipp {:mvn/version "0.6.22"} - org.clojure/core.rrb-vector {:mvn/version "0.1.1"} - org.clojars.rymndhng/clj-diff {:mvn/version "1.1.1-SNAPSHOT"} - mvxcvi/arrangement {:mvn/version "1.2.0"}} + :deps {fipp {:mvn/version "0.6.23"} + org.clojure/core.rrb-vector {:mvn/version "0.1.1"} + lambdaisland/clj-diff {:mvn/version "1.1.58"} + mvxcvi/arrangement {:mvn/version "1.2.1"}} :aliases {:cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} @@ -12,9 +11,9 @@ {} :chui - {:extra-deps {lambdaisland/chui {:local/root "../chui"} - thheller/shadow-cljs {:mvn/version "2.8.93"} - garden {:mvn/version "1.3.9"}} + {:extra-deps {lambdaisland/chui {:local/root "../chui"} + thheller/shadow-cljs {:mvn/version "2.8.93"} + garden {:mvn/version "1.3.9"}} :extra-paths ["../chui/resources" "../chui/dev"]} :test diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 4ed224b..9ead1e4 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -1,6 +1,6 @@ (ns lambdaisland.deep-diff2.diff-impl (:require [clojure.data :as data] - [clj-diff.core :as seq-diff])) + [lambdaisland.clj-diff.core :as seq-diff])) (declare diff diff-similar) From 6a7dc03e3990494df576541d657de37ab3a7200a Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:36:07 +0200 Subject: [PATCH 053/158] bin/proj update-readme --- README.md | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7b897b9..7384925 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # lambdaisland/deep-diff2 -[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) [![codecov](https://codecov.io/gh/lambdaisland/deep-diff2/branch/master/graph/badge.svg)](https://codecov.io/gh/lambdaisland/deep-diff2) +[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. @@ -14,11 +14,25 @@ if you want to programatically diff/patch Clojure data structures then [this write-up by Huahai Yang](https://juji.io/blog/comparing-clojure-diff-libraries/). -### Support Lambda Island Open Source -lambdaisland/deep-diff2 is part of a growing collection of quality Clojure libraries and -tools released on the Lambda Island label. If you find value in our work please -consider [becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute) +  + + + +  + +## Support Lambda Island Open Source + +deep-diff2 is part of a growing collection of quality Clojure libraries and +tools released on the Lambda Island label. If you are using this project +commercially then you are expected to pay it forward by +[becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute), +so that we may continue to enjoy a thriving Clojure ecosystem. + +  + +  + ## Installation @@ -104,13 +118,13 @@ the future. When in doubt check the CHANGELOG. ## Contributing -Everyone has a right to submit patches to this projects, and thus become a contributor. +Everyone has a right to submit patches to deep-diff2, and thus become a contributor. Contributors MUST - adhere to the [LambdaIsland Clojure Style Guide](https://nextjournal.com/lambdaisland/clojure-style-guide) - write patches that solve a problem. Start by stating the problem, then supply a minimal solution. `*` -- agree to license their contributions as MPLv2. +- agree to license their contributions as EPL 1.0. - not break the contract with downstream consumers. `**` - not break the tests. @@ -123,9 +137,8 @@ If you submit a pull request that adheres to these rules, then it will almost certainly be merged immediately. However some things may require more consideration. If you add new dependencies, or significantly increase the API surface, then we need to decide if these changes are in line with the project's -goals. In this case you can start by [writing a -pitch](https://nextjournal.com/lambdaisland/pitch-template), and collecting -feedback on it. +goals. In this case you can start by [writing a pitch](https://nextjournal.com/lambdaisland/pitch-template), +and collecting feedback on it. `*` This goes for features too, a feature needs to solve a problem. State the problem it solves, then supply a minimal solution. @@ -154,7 +167,7 @@ Another library that implements a form of data structure diffing is [editscript] ## License -Copyright © 2018-2020 Arne Brasseur and Contributors +Copyright © 2018-2020 Arne Brasseur and contributors Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt - + \ No newline at end of file From 3d603a7e45a311282e78c99c9fcbc51c59c67729 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:37:34 +0200 Subject: [PATCH 054/158] # 2.0.0.105 (2020-08-19 / 6a7dc03) ## Added ## Fixed ## Changed --- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 426c39d..dc4a147 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.0.0.105 (2020-08-19 / 6a7dc03) ## Added @@ -92,4 +92,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 7384925..ddff8b0 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0-93"} +lambdaisland/deep-diff2 {:mvn/version "2.0.0.105"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0-93"] +[lambdaisland/deep-diff2 "2.0.0.105"] ``` ## Use From 6280fb50336b6d4a4dc93f4ad1ae43ef6457c033 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:37:54 +0200 Subject: [PATCH 055/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 55 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc4a147..8162997 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.0.0.105 (2020-08-19 / 6a7dc03) ## Added diff --git a/pom.xml b/pom.xml index 7b0f941..a60da33 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 lambdaisland deep-diff2 - 2.0.0-93 + 2.0.0.105 deep-diff2 - Recursively diff Clojure data structures. + Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 2018 @@ -22,41 +22,42 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - c0f3062cab9904e875bcb9d54304bf2d9a04d15f + 3d603a7e45a311282e78c99c9fcbc51c59c67729 - org.clojure - clojure - 1.10.1 + lambdaisland + clj-diff + 1.1.58 fipp fipp - 0.6.22 + 0.6.23 + + + mvxcvi + arrangement + 1.2.1 org.clojure core.rrb-vector 0.1.1 - - org.clojars.rymndhng - clj-diff - 1.1.1-SNAPSHOT - - - mvxcvi - arrangement - 1.2.0 - resources + + resources + src + + test + @@ -66,11 +67,25 @@ - c0f3062cab9904e875bcb9d54304bf2d9a04d15f + 3d603a7e45a311282e78c99c9fcbc51c59c67729 + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + @@ -86,4 +101,4 @@ https://clojars.org/repo - + \ No newline at end of file From e006fc586e5530890d535af7e40fdebfca3338b6 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:39:55 +0200 Subject: [PATCH 056/158] Correct .VERSION_PREFIX, update CHANGELOG --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 359a5b9..cd5ac03 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.0.0 \ No newline at end of file +2.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8162997..50ab009 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,8 @@ # Unreleased -## Added - -## Fixed - ## Changed -# 2.0.0.105 (2020-08-19 / 6a7dc03) - -## Added - -## Fixed - -## Changed +- Switch to using lambdaisland/clj-diff, a fork of an upstream fork # 2.0.0-93 (2020-04-20 / 6ff9209) @@ -100,4 +90,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. From 1fabaa614ad2a2a705720386c5fc3635b1dead0b Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:40:50 +0200 Subject: [PATCH 057/158] # 2.0.108 (2020-08-19 / e006fc5) ## Changed - Switch to using lambdaisland/clj-diff, a fork of an upstream fork --- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50ab009..cc7903c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.0.108 (2020-08-19 / e006fc5) ## Changed @@ -90,4 +90,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index ddff8b0..3f07a2e 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.0.105"} +lambdaisland/deep-diff2 {:mvn/version "2.0.108"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.0.105"] +[lambdaisland/deep-diff2 "2.0.108"] ``` ## Use From eeb3334b4ab545060644ba6af1d1603dc006fd32 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Wed, 19 Aug 2020 11:41:11 +0200 Subject: [PATCH 058/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc7903c..b3e697f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.0.108 (2020-08-19 / e006fc5) ## Changed diff --git a/pom.xml b/pom.xml index a60da33..d96a758 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.0.0.105 + 2.0.108 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -22,7 +22,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 3d603a7e45a311282e78c99c9fcbc51c59c67729 + 1fabaa614ad2a2a705720386c5fc3635b1dead0b @@ -67,7 +67,7 @@ - 3d603a7e45a311282e78c99c9fcbc51c59c67729 + 1fabaa614ad2a2a705720386c5fc3635b1dead0b From fe13c7bc58853d3f803bc2291e2a0534b3c1466b Mon Sep 17 00:00:00 2001 From: lread Date: Thu, 12 Nov 2020 18:00:28 -0500 Subject: [PATCH 059/158] Update README screenshot to show deep-diff2 namespace --- screenshot.png | Bin 93158 -> 109133 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshot.png b/screenshot.png index e00e67e24ff6ab30c033945b26414db009b7c784..668fe08fed655e3c62bee447595e781b62c2f435 100644 GIT binary patch literal 109133 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

JZob_Qc3 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�oOfW+RS;_SDd&g2+F|#M4%}=) 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 IQ^2Kv0f(Ih`v3p{ literal 93158 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

Bv*cN^UgB)MER#%$L%; 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

MWVTJ56Vsu*4}%zNQA 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¥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 J@}cqD{{gPrgQNfe From 1de8853b4c598085375d5f2c651194387ce204f0 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 13 Nov 2020 10:40:20 +0100 Subject: [PATCH 060/158] Fix CircleCI orb names, the dev ones have expired --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2a5dae9..93bf0f0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,8 @@ version: 2.1 orbs: - kaocha: lambdaisland/kaocha@dev:first - clojure: lambdaisland/clojure@dev:first + kaocha: lambdaisland/kaocha@0.0.1 + clojure: lambdaisland/clojure@0.0.1 commands: checkout_and_run: From 4e98b4d855307bc24553087692b5611230a6507a Mon Sep 17 00:00:00 2001 From: A Brooks Date: Thu, 14 Jan 2021 19:16:12 -0600 Subject: [PATCH 061/158] Add Java 15 --- .circleci/config.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 93bf0f0..e75870f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2.1 orbs: kaocha: lambdaisland/kaocha@0.0.1 - clojure: lambdaisland/clojure@0.0.1 + clojure: lambdaisland/clojure@0.0.2 commands: checkout_and_run: @@ -26,6 +26,10 @@ commands: flags: clj jobs: + java-15-clojure-1_10: + executor: clojure/openjdk15 + steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] + java-11-clojure-1_10: executor: clojure/openjdk11 steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] @@ -41,6 +45,7 @@ jobs: workflows: kaocha_test: jobs: + - java-15-clojure-1_10 - java-11-clojure-1_10 - java-9-clojure-1_10 - java-8-clojure-1_10 From 58e7f3b2a5cdf71441607f04aeea3310ea1e3dea Mon Sep 17 00:00:00 2001 From: A Brooks Date: Thu, 14 Jan 2021 19:18:06 -0600 Subject: [PATCH 062/158] Remove Java 9 --- .circleci/config.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e75870f..2b3988e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,10 +34,6 @@ jobs: executor: clojure/openjdk11 steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - java-9-clojure-1_10: - executor: clojure/openjdk9 - steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - java-8-clojure-1_10: executor: clojure/openjdk8 steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] @@ -47,5 +43,4 @@ workflows: jobs: - java-15-clojure-1_10 - java-11-clojure-1_10 - - java-9-clojure-1_10 - java-8-clojure-1_10 From 7ecab044885a75dc6fdc983cb6d48c72dac3afef Mon Sep 17 00:00:00 2001 From: A Brooks Date: Tue, 6 Apr 2021 17:35:16 -0500 Subject: [PATCH 063/158] Add Java 16 --- .circleci/config.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2b3988e..a229361 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2.1 orbs: kaocha: lambdaisland/kaocha@0.0.1 - clojure: lambdaisland/clojure@0.0.2 + clojure: lambdaisland/clojure@0.0.3 commands: checkout_and_run: @@ -26,6 +26,10 @@ commands: flags: clj jobs: + java-16-clojure-1_10: + executor: clojure/openjdk16 + steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] + java-15-clojure-1_10: executor: clojure/openjdk15 steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] @@ -41,6 +45,7 @@ jobs: workflows: kaocha_test: jobs: + - java-16-clojure-1_10 - java-15-clojure-1_10 - java-11-clojure-1_10 - java-8-clojure-1_10 From 795d9c39c1d545088d8c5c5822d319768a461578 Mon Sep 17 00:00:00 2001 From: A Brooks Date: Tue, 6 Apr 2021 17:49:29 -0500 Subject: [PATCH 064/158] Use version of orb with Clojure installed Previous version (0.0.3) was referencing the base Docker image, so it had Java but not Clojure installed on top. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a229361..7371f71 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2.1 orbs: kaocha: lambdaisland/kaocha@0.0.1 - clojure: lambdaisland/clojure@0.0.3 + clojure: lambdaisland/clojure@0.0.4 commands: checkout_and_run: From fbc04a9cd62b0d4fdf4d5c4a9bb559e4b257f731 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 13 May 2022 08:11:23 +0200 Subject: [PATCH 065/158] Version bumps and CHANGELOG --- CHANGELOG.md | 9 ++++++--- bin/kaocha | 5 ++++- deps.edn | 20 ++++++++++---------- package.json | 3 ++- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3e697f..00c994f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,14 @@ # Unreleased -## Added - ## Fixed +- Bump clj-diff, which fixes an issue where the diffing would not terminate in + specific cases + ## Changed +- Bump all dependencies to the latest version + # 2.0.108 (2020-08-19 / e006fc5) ## Changed @@ -98,4 +101,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. diff --git a/bin/kaocha b/bin/kaocha index 4a31cbf..45d3d58 100755 --- a/bin/kaocha +++ b/bin/kaocha @@ -1,2 +1,5 @@ #!/usr/bin/env bash -clojure -A:dev:test -m kaocha.runner "$@" + +[[ -d "node_modules/ws" ]] || npm install ws + +exec clojure -A:dev:test -m kaocha.runner "$@" diff --git a/deps.edn b/deps.edn index f736140..3fc22b2 100644 --- a/deps.edn +++ b/deps.edn @@ -1,23 +1,23 @@ {:paths ["resources" "src" "test"] - :deps {fipp {:mvn/version "0.6.23"} - org.clojure/core.rrb-vector {:mvn/version "0.1.1"} - lambdaisland/clj-diff {:mvn/version "1.1.58"} - mvxcvi/arrangement {:mvn/version "1.2.1"}} + :deps {fipp {:mvn/version "0.6.26"} + org.clojure/core.rrb-vector {:mvn/version "0.1.2"} + lambdaisland/clj-diff {:mvn/version "1.2.62"} + mvxcvi/arrangement {:mvn/version "2.0.0"}} :aliases {:cljs - {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.597"}}} + {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.50"}}} :dev {} :chui {:extra-deps {lambdaisland/chui {:local/root "../chui"} - thheller/shadow-cljs {:mvn/version "2.8.93"} - garden {:mvn/version "1.3.9"}} + thheller/shadow-cljs {:mvn/version "2.18.0"} + garden {:mvn/version "1.3.10"}} :extra-paths ["../chui/resources" "../chui/dev"]} :test {:extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} - lambdaisland/kaocha-cljs {:mvn/version "RELEASE"} - org.clojure/clojurescript {:mvn/version "1.10.597"} - org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}}} + com.lambdaisland/kaocha-cljs {:mvn/version "1.2.123"} + org.clojure/clojurescript {:mvn/version "1.11.50"} + org.clojure/test.check {:mvn/version "1.1.1"}}}}} diff --git a/package.json b/package.json index 1aa5720..30f5f38 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "license": "MPL-2.0", "dependencies": { "react": "^16.13.1", - "react-dom": "^16.13.1" + "react-dom": "^16.13.1", + "ws": "^8.6.0" } } From bb0dd633ea334d02ae3115e04376f0965ab55bae Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 13 May 2022 08:11:53 +0200 Subject: [PATCH 066/158] Set group-id --- bin/proj | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/proj b/bin/proj index cdf9e80..d714d9a 100755 --- a/bin/proj +++ b/bin/proj @@ -4,6 +4,7 @@ (lioss/main {:license :epl + :group-id "lambdaisland" :inception-year 2018 :description "Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result."}) From 4548a492c08fb2f5e09db9f757a95a379a52aa02 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 13 May 2022 08:12:32 +0200 Subject: [PATCH 067/158] # 2.1.121 (2022-05-13 / bb0dd63) ## Fixed - Bump clj-diff, which fixes an issue where the diffing would not terminate in specific cases ## Changed - Bump all dependencies to the latest version --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index cd5ac03..42f7d23 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.0 +2.1 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 00c994f..fa07321 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.1.121 (2022-05-13 / bb0dd63) ## Fixed @@ -101,4 +101,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 3f07a2e..2d3ff98 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.0.108"} +lambdaisland/deep-diff2 {:mvn/version "2.1.121"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.0.108"] +[lambdaisland/deep-diff2 "2.1.121"] ``` ## Use From 1d4d734f85162a4f129234ddcadd4c37d79692ef Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 13 May 2022 08:12:43 +0200 Subject: [PATCH 068/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 48 ++++++++++++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa07321..82272e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.1.121 (2022-05-13 / bb0dd63) ## Fixed diff --git a/pom.xml b/pom.xml index d96a758..6d71ca2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,9 +1,9 @@ - + 4.0.0 lambdaisland deep-diff2 - 2.0.108 + 2.1.121 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -12,6 +12,9 @@ Lambda Island https://lambdaisland.com + + UTF-8 + Eclipse Public License 1.0 @@ -22,28 +25,28 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 1fabaa614ad2a2a705720386c5fc3635b1dead0b + 4548a492c08fb2f5e09db9f757a95a379a52aa02 - - lambdaisland - clj-diff - 1.1.58 - fipp fipp - 0.6.23 - - - mvxcvi - arrangement - 1.2.1 + 0.6.26 org.clojure core.rrb-vector - 0.1.1 + 0.1.2 + + + lambdaisland + clj-diff + 1.2.62 + + + mvxcvi + arrangement + 2.0.0 @@ -60,14 +63,23 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + org.apache.maven.plugins maven-jar-plugin - 2.4 + 3.2.0 - 1fabaa614ad2a2a705720386c5fc3635b1dead0b + 4548a492c08fb2f5e09db9f757a95a379a52aa02 @@ -75,7 +87,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.5 + 1.6 sign-artifacts From 5a94bece5e7cb0075d4beb0139c7598d51288128 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 16 May 2022 08:08:19 +0200 Subject: [PATCH 069/158] Bump clj-diff --- CHANGELOG.md | 6 ++---- deps.edn | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82272e1..1af4c55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,8 @@ # Unreleased -## Added - ## Fixed -## Changed +- Bump clj-diff, to bring back compatibility with earlier java versions # 2.1.121 (2022-05-13 / bb0dd63) @@ -109,4 +107,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. diff --git a/deps.edn b/deps.edn index 3fc22b2..f7aba20 100644 --- a/deps.edn +++ b/deps.edn @@ -1,7 +1,7 @@ {:paths ["resources" "src" "test"] :deps {fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} - lambdaisland/clj-diff {:mvn/version "1.2.62"} + lambdaisland/clj-diff {:mvn/version "1.3.67"} mvxcvi/arrangement {:mvn/version "2.0.0"}} :aliases {:cljs From 7c069564c485b129e4281d06fa3974a1c307af1b Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 16 May 2022 08:11:46 +0200 Subject: [PATCH 070/158] # 2.2.124 (2022-05-16 / 5a94bec) ## Fixed - Bump clj-diff, to bring back compatibility with earlier java versions --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 42f7d23..6161878 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.1 \ No newline at end of file +2.2 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 1af4c55..02cc659 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.2.124 (2022-05-16 / 5a94bec) ## Fixed @@ -107,4 +107,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 2d3ff98..4d623f0 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.1.121"} +lambdaisland/deep-diff2 {:mvn/version "2.2.124"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.1.121"] +[lambdaisland/deep-diff2 "2.2.124"] ``` ## Use From d8adbbea75241ae7fa2dca7806e366b84d313a42 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 16 May 2022 08:11:57 +0200 Subject: [PATCH 071/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02cc659..59516b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.2.124 (2022-05-16 / 5a94bec) ## Fixed diff --git a/pom.xml b/pom.xml index 6d71ca2..4e03690 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.1.121 + 2.2.124 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 4548a492c08fb2f5e09db9f757a95a379a52aa02 + 7c069564c485b129e4281d06fa3974a1c307af1b @@ -41,7 +41,7 @@ lambdaisland clj-diff - 1.2.62 + 1.3.67 mvxcvi @@ -79,7 +79,7 @@ - 4548a492c08fb2f5e09db9f757a95a379a52aa02 + 7c069564c485b129e4281d06fa3974a1c307af1b From a8186a5b5962980f807eb739c541fc48ccc81af2 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 1 Jul 2022 14:57:50 -0500 Subject: [PATCH 072/158] Fix Cljdoc builds by moving "test" to alias. If the tests directory is included in the main paths, but the test dependencies aren't, Cljdoc will try to analyze the test directory, which will fail due to missing dependencies. --- deps.edn | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index f7aba20..2c4d945 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,4 @@ -{:paths ["resources" "src" "test"] +{:paths ["resources" "src"] :deps {fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} lambdaisland/clj-diff {:mvn/version "1.3.67"} @@ -17,7 +17,8 @@ :extra-paths ["../chui/resources" "../chui/dev"]} :test - {:extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} + {:extra-paths ["test"] + :extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} com.lambdaisland/kaocha-cljs {:mvn/version "1.2.123"} org.clojure/clojurescript {:mvn/version "1.11.50"} org.clojure/test.check {:mvn/version "1.1.1"}}}}} From c8512e22f390d61608d5b1455ef4885c0b028478 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 1 Jul 2022 15:03:52 -0500 Subject: [PATCH 073/158] # 2.3.127 (2022-07-01 / a8186a5) ## Added ## Fixed ## Changed --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 2 +- README.md | 4 ++-- package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 6161878..c0943d3 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.2 \ No newline at end of file +2.3 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 59516b9..7e9b134 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.3.127 (2022-07-01 / a8186a5) ## Added diff --git a/README.md b/README.md index 4d623f0..184b6f1 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.2.124"} +lambdaisland/deep-diff2 {:mvn/version "2.3.127"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.2.124"] +[lambdaisland/deep-diff2 "2.3.127"] ``` ## Use diff --git a/package.json b/package.json index 30f5f38..ce0316c 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "dependencies": { "react": "^16.13.1", "react-dom": "^16.13.1", - "ws": "^8.6.0" + "ws": "^8.8.0" } } From d156bb34311b3ebac9d08f30b447bbd69fde3711 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 1 Jul 2022 15:04:09 -0500 Subject: [PATCH 074/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 9 +++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e9b134..6aaff9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.3.127 (2022-07-01 / a8186a5) ## Added diff --git a/pom.xml b/pom.xml index 4e03690..84c3e90 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.2.124 + 2.3.127 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 7c069564c485b129e4281d06fa3974a1c307af1b + c8512e22f390d61608d5b1455ef4885c0b028478 @@ -58,9 +58,6 @@ src - - test - @@ -79,7 +76,7 @@ - 7c069564c485b129e4281d06fa3974a1c307af1b + c8512e22f390d61608d5b1455ef4885c0b028478 From 3463a3d91c68ecfd6df8bfe86d32afbafeb512e8 Mon Sep 17 00:00:00 2001 From: A Brooks Date: Fri, 1 Jul 2022 15:12:07 -0500 Subject: [PATCH 075/158] Add missing CHANGELOG entry. --- CHANGELOG.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6aaff9b..5a9d9f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,8 @@ # 2.3.127 (2022-07-01 / a8186a5) -## Added - ## Fixed - -## Changed +* Remove "test" directory from the main paths in `deps.edn` to fix Cljdoc builds. This change also makes the artifact (very slightly) smaller, reducing the JAR's size by 3KB, or about 15 percent. # 2.2.124 (2022-05-16 / 5a94bec) @@ -123,4 +120,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. From 5d3b97b4091313ff177f122e2b674314476bd798 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Mon, 4 Jul 2022 17:40:24 -0500 Subject: [PATCH 076/158] Check for NaNs in Clojure, too. Occasionally the round-trip-diff test would fail in Clojure because we weren't checking for NaNs in Clojure. --- test/lambdaisland/deep_diff2/diff_test.cljc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index 92605b8..89bb10f 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -199,7 +199,8 @@ ;; (not= ##NaN ##NaN), which messes up test results ;; https://stackoverflow.com/questions/16983955/check-for-nan-in-clojurescript (defn NaN? [node] - #?(:clj false +;; Need to confirm that it's a Double first. + #?(:clj (and (instance? Double node) (Double/isNaN node)) :cljs (and (= (.call js/toString node) (str "[object Number]")) (js/eval (str node " != +" node ))))) From 5c40ebc5aa4a69485fa126634334f022eec1de6b Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 30 Aug 2022 14:30:32 -0400 Subject: [PATCH 077/158] Qualify deps.edn dependencies The clojure CLI now requires these dependencies to be qualified in order to function. --- deps.edn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index 2c4d945..334fed5 100644 --- a/deps.edn +++ b/deps.edn @@ -1,5 +1,5 @@ {:paths ["resources" "src"] - :deps {fipp {:mvn/version "0.6.26"} + :deps {fipp/fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} lambdaisland/clj-diff {:mvn/version "1.3.67"} mvxcvi/arrangement {:mvn/version "2.0.0"}} @@ -13,7 +13,7 @@ :chui {:extra-deps {lambdaisland/chui {:local/root "../chui"} thheller/shadow-cljs {:mvn/version "2.18.0"} - garden {:mvn/version "1.3.10"}} + garden/garden {:mvn/version "1.3.10"}} :extra-paths ["../chui/resources" "../chui/dev"]} :test From 3632023090e3f0696e49f18128ed0fefe0c12c51 Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 30 Aug 2022 14:32:41 -0400 Subject: [PATCH 078/158] Fix bug where records with deletions are not handled Fixes #29. --- CHANGELOG.md | 2 ++ src/lambdaisland/deep_diff2/diff_impl.cljc | 2 +- test/lambdaisland/deep_diff2/diff_test.cljc | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a9d9f8..394364f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ## Fixed +- Fix issue (Fails with records with deleted keys)[https://github.com/lambdaisland/deep-diff2/issues/29] + ## Changed # 2.3.127 (2022-07-01 / a8186a5) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 9ead1e4..06cf438 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -107,7 +107,7 @@ (fn [[m idx] k] [(cond-> m (contains? del idx) - (assoc (->Deletion k) (exp k)) + (assoc (->Deletion k) (get exp k)) (not (contains? del idx)) (assoc k (diff (get exp k) (get act k))) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index 89bb10f..07a58b6 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -96,7 +96,9 @@ (is (= {:a (diff/->Mismatch 1 2)} (diff/diff (map->ARecord {:a 1}) (map->ARecord {:a 2})))) (is (= {(diff/->Insertion :a) 1} - (diff/diff (map->ARecord {}) (map->ARecord {:a 1})))))) + (diff/diff (map->ARecord {}) (map->ARecord {:a 1})))) + (is (= {(diff/->Deletion :a) 1} + (diff/diff (map->ARecord {:a 1}) (map->ARecord {})))))) (is (= [{:x (diff/->Mismatch 1 2)}] (diff/diff [{:x 1}] [{:x 2}]))) From 3f815a98945d181acd1e53bfdeea629bb648313f Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 1 Sep 2022 09:29:41 +0200 Subject: [PATCH 079/158] Bump deps --- deps.edn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deps.edn b/deps.edn index 334fed5..adfc16a 100644 --- a/deps.edn +++ b/deps.edn @@ -5,14 +5,14 @@ mvxcvi/arrangement {:mvn/version "2.0.0"}} :aliases {:cljs - {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.50"}}} + {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.60"}}} :dev {} :chui {:extra-deps {lambdaisland/chui {:local/root "../chui"} - thheller/shadow-cljs {:mvn/version "2.18.0"} + thheller/shadow-cljs {:mvn/version "2.20.1"} garden/garden {:mvn/version "1.3.10"}} :extra-paths ["../chui/resources" "../chui/dev"]} @@ -20,5 +20,5 @@ {:extra-paths ["test"] :extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} com.lambdaisland/kaocha-cljs {:mvn/version "1.2.123"} - org.clojure/clojurescript {:mvn/version "1.11.50"} + org.clojure/clojurescript {:mvn/version "1.11.60"} org.clojure/test.check {:mvn/version "1.1.1"}}}}} From c53b2293fedaed994826d0f458dbabcf0059fc02 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 1 Sep 2022 09:34:02 +0200 Subject: [PATCH 080/158] CHANGELOG --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 394364f..a6d8dfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,9 @@ # Unreleased -## Added - ## Fixed - Fix issue (Fails with records with deleted keys)[https://github.com/lambdaisland/deep-diff2/issues/29] -## Changed - # 2.3.127 (2022-07-01 / a8186a5) ## Fixed From 6196130f66c6700185d4f58ef7a9b8a7870750fb Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 1 Sep 2022 09:35:36 +0200 Subject: [PATCH 081/158] Modernize LIOSS tooling setup --- bb.edn | 3 ++ bb_deps.edn | 4 -- bin/bb | 109 ---------------------------------------------------- bin/proj | 2 +- 4 files changed, 4 insertions(+), 114 deletions(-) create mode 100644 bb.edn delete mode 100644 bb_deps.edn delete mode 100755 bin/bb diff --git a/bb.edn b/bb.edn new file mode 100644 index 0000000..4803007 --- /dev/null +++ b/bb.edn @@ -0,0 +1,3 @@ +{:deps + {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" + :git/sha "7f39ffb76d47e2ff83d4478957c2ca4fd180f3e5"}}} diff --git a/bb_deps.edn b/bb_deps.edn deleted file mode 100644 index 173b8f3..0000000 --- a/bb_deps.edn +++ /dev/null @@ -1,4 +0,0 @@ -{:deps - {lambdaisland/open-source {;;:git/url "https://github.com/lambdaisland/open-source" - ;;:sha "8232cc6a368db85e3ae0178445dc3bd58c60bbcb" - :local/root "../open-source"}}} diff --git a/bin/bb b/bin/bb deleted file mode 100755 index 3850e14..0000000 --- a/bin/bb +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env bash - -# Wrapper script for babashka to be dropped into projects, will run `bb` from -# the PATH if it exists, or otherwise download it and store it inside the -# project. When using the system `bb` it will do a version check and warn if the -# version is older than what is requested. -# -# Will look for a `bb_deps.edn` and run that through `clojure` to compute a -# classpath. -# -# Will use rlwrap if it is available. - -name=babashka -babashka_version="0.1.3" -store_dir="$(pwd)/.store" -install_dir="${store_dir}/$name-$babashka_version" - -system_bb="$(which bb)" -set -e - -# https://stackoverflow.com/questions/4023830/how-to-compare-two-strings-in-dot-separated-version-format-in-bash -vercomp () { - if [[ $1 == $2 ]] - then - return 0 - fi - local IFS=. - local i ver1=($1) ver2=($2) - # fill empty fields in ver1 with zeros - for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) - do - ver1[i]=0 - done - for ((i=0; i<${#ver1[@]}; i++)) - do - if [[ -z ${ver2[i]} ]] - then - # fill empty fields in ver2 with zeros - ver2[i]=0 - fi - if ((10#${ver1[i]} > 10#${ver2[i]})) - then - return 1 - fi - if ((10#${ver1[i]} < 10#${ver2[i]})) - then - return 2 - fi - done - return 0 -} - -if [[ -f "$system_bb" ]]; then - bb_path="$system_bb" -elif [[ -f "$install_dir/bb" ]]; then - bb_path="$install_dir/bb" -else - case "$(uname -s)" in - Linux*) platform=linux;; - Darwin*) platform=macos;; - esac - - echo "$name $babashka_version not found, installing to $install_dir..." - download_url="https://github.com/borkdude/babashka/releases/download/v$babashka_version/babashka-$babashka_version-$platform-amd64.zip" - - mkdir -p $install_dir - echo -e "Downloading $download_url." - curl -o bb.zip -sL "$download_url" - unzip -qqo "bb.zip" -d $install_dir - rm "bb.zip" - bb_path="$install_dir/bb" -fi - -set +e -actual_version="$($bb_path --version | sed 's/babashka v//')" - -vercomp $actual_version $babashka_version -case $? in - 0) ;; # = - 1) ;; # > - 2) echo "WARNING: babashka version is $actual_version, expected $babashka_version" ;; # < -esac -set -e - -try_exec_rlwrap() { - if [ -x "$(command -v rlwrap)" ]; then - exec "rlwrap" "$@" - else - exec "$@" - fi -} - -deps_clj="$(pwd)/.store/deps.clj" - -ensure_deps_clj() { - if [[ ! -f "${deps_clj}" ]]; then - mkdir -p "${store_dir}" - curl -sL https://raw.githubusercontent.com/borkdude/deps.clj/master/deps.clj -o "${deps_clj}" - fi -} - -if [[ -f bb_deps.edn ]]; then - ensure_deps_clj - # Note this will install clojure-tools in ~/.deps.clj/ClojureTools - cp="$($bb_path $deps_clj -Srepro -Sdeps-file bb_deps.edn -Spath)" - try_exec_rlwrap "$bb_path" "-cp" "${cp}" "$@" -else - try_exec_rlwrap "$bb_path" "$@" -fi diff --git a/bin/proj b/bin/proj index d714d9a..b0582aa 100755 --- a/bin/proj +++ b/bin/proj @@ -1,4 +1,4 @@ -#!bin/bb +#!/usr/bin/env bb (ns proj (:require [lioss.main :as lioss])) From 62a13e45be819e037f9e3659266f276cf3d80578 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 1 Sep 2022 09:36:12 +0200 Subject: [PATCH 082/158] # 2.4.138 (2022-09-01 / 6196130) ## Fixed - Fix issue (Fails with records with deleted keys)[https://github.com/lambdaisland/deep-diff2/issues/29] --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- package.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index c0943d3..7208c21 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.3 \ No newline at end of file +2.4 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a6d8dfb..8be3b26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.4.138 (2022-09-01 / 6196130) ## Fixed @@ -118,4 +118,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 184b6f1..9905bc6 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.3.127"} +lambdaisland/deep-diff2 {:mvn/version "2.4.138"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.3.127"] +[lambdaisland/deep-diff2 "2.4.138"] ``` ## Use diff --git a/package.json b/package.json index ce0316c..bb97c0d 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "dependencies": { "react": "^16.13.1", "react-dom": "^16.13.1", - "ws": "^8.8.0" + "ws": "^8.8.1" } } From be57a5de5b1647445c291173eed4cdbc0071666b Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 1 Sep 2022 09:36:29 +0200 Subject: [PATCH 083/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be3b26..25c4269 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.4.138 (2022-09-01 / 6196130) ## Fixed diff --git a/pom.xml b/pom.xml index 84c3e90..b100069 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.3.127 + 2.4.138 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - c8512e22f390d61608d5b1455ef4885c0b028478 + 62a13e45be819e037f9e3659266f276cf3d80578 @@ -76,7 +76,7 @@ - c8512e22f390d61608d5b1455ef4885c0b028478 + 62a13e45be819e037f9e3659266f276cf3d80578 From 5bb6776bba908e5b7b38b1cfe840fa61a6b8ca30 Mon Sep 17 00:00:00 2001 From: A Brooks Date: Tue, 11 Oct 2022 19:58:46 -0500 Subject: [PATCH 084/158] Convert to test matrix --- .circleci/config.yml | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7371f71..77ddbfc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,8 @@ version: 2.1 orbs: - kaocha: lambdaisland/kaocha@0.0.1 - clojure: lambdaisland/clojure@0.0.4 + kaocha: lambdaisland/kaocha@0.0.3 + clojure: lambdaisland/clojure@0.0.8 commands: checkout_and_run: @@ -26,26 +26,22 @@ commands: flags: clj jobs: - java-16-clojure-1_10: - executor: clojure/openjdk16 - steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - - java-15-clojure-1_10: - executor: clojure/openjdk15 - steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - - java-11-clojure-1_10: - executor: clojure/openjdk11 - steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] - - java-8-clojure-1_10: - executor: clojure/openjdk8 - steps: [{checkout_and_run: {clojure_version: "1.10.1"}}] + test: + parameters: + os: + type: executor + clojure_version: + type: string + executor: << parameters.os >> + steps: + - checkout_and_run: + clojure_version: << parameters.clojure_version >> workflows: kaocha_test: jobs: - - java-16-clojure-1_10 - - java-15-clojure-1_10 - - java-11-clojure-1_10 - - java-8-clojure-1_10 + - test: + matrix: + parameters: + os: [clojure/openjdk16, clojure/openjdk15, clojure/openjdk11, clojure/openjdk8] + clojure_version: ["1.10.3", "1.11.1"] From eb10a5ba14baf7a8b0ee479ca447ade25faf6f2b Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Mon, 17 Oct 2022 17:34:07 -0500 Subject: [PATCH 085/158] Bump kaocha-cljs and lock Kaocha's version. I think using Kaocha RELEASE was causing issues with our hard-coded version of Kaocha-cljs (1.2.123) because we moved from deep-diff to deep-diff2. --- deps.edn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps.edn b/deps.edn index adfc16a..9bce251 100644 --- a/deps.edn +++ b/deps.edn @@ -18,7 +18,7 @@ :test {:extra-paths ["test"] - :extra-deps {lambdaisland/kaocha {:mvn/version "RELEASE"} - com.lambdaisland/kaocha-cljs {:mvn/version "1.2.123"} + :extra-deps {lambdaisland/kaocha {:mvn/version "1.70.1086"} + com.lambdaisland/kaocha-cljs {:mvn/version "1.4.130"} org.clojure/clojurescript {:mvn/version "1.11.60"} org.clojure/test.check {:mvn/version "1.1.1"}}}}} From f85c8a01c7130fa32cef44eec335a382f364581b Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Mon, 17 Oct 2022 17:46:31 -0500 Subject: [PATCH 086/158] Add Java 17 and 19, drop Java 16. Finding issues with Java 16 that aren't in 17 or 15 seems unlikely, plus users really should have either upgraded to the latest interim release (19) or the next LTS (17), as 16 is no longer supported. (15 has limited support.) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 77ddbfc..2f31820 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -43,5 +43,5 @@ workflows: - test: matrix: parameters: - os: [clojure/openjdk16, clojure/openjdk15, clojure/openjdk11, clojure/openjdk8] + os: [clojure/openjdk19, clojure/openjdk17, clojure/openjdk15, clojure/openjdk11, clojure/openjdk8] clojure_version: ["1.10.3", "1.11.1"] From 301f9f24f128e9eafa3457c0ea41c3a1f3305f7e Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Wed, 16 Nov 2022 16:53:14 +0800 Subject: [PATCH 087/158] change the default setting of the pretty-print printer --- src/lambdaisland/deep_diff2.cljc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lambdaisland/deep_diff2.cljc b/src/lambdaisland/deep_diff2.cljc index 78ef63c..028360f 100644 --- a/src/lambdaisland/deep_diff2.cljc +++ b/src/lambdaisland/deep_diff2.cljc @@ -26,7 +26,7 @@ `:extra-handlers` (a map from symbol to function), or by using [[lambdaisland.deep-diff.printer/register-print-handler!]]" ([] - (printer {})) + (printer {:print-fallback :print})) ([opts] (printer-impl/puget-printer opts))) From adbd0104260f5cf8c0ebe4d37afaaf6e0b4eb7f8 Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Thu, 17 Nov 2022 11:29:18 +0800 Subject: [PATCH 088/158] readme for default printer --- CHANGELOG.md | 4 +++- README.md | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25c4269..e79aff9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## Changed +- [breaking] Change the default setting of the pretty-print printer to system printer. + # 2.4.138 (2022-09-01 / 6196130) ## Fixed @@ -126,4 +128,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. diff --git a/README.md b/README.md index 9905bc6..6107e1f 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,32 @@ You can register print handlers for new types using `lambdaisland.deep-diff2.printer/register-print-handler!`, or by passing and `:extra-handlers` map to `printer`. +Note: the default printer is initialized as `(ddiff/printer {:print-fallback :print})` so that it will fall back to system printer when there is no match. + +### Time, data literal + +One of the creative ways of using deep-diff is to diff two time data. + +``` +(ddiff/diff #inst "2019-04-09T14:57:46.128-00:00" + #inst "2019-04-10T14:57:46.128-00:00") +``` +or +``` +(import '[java.sql Timestamp]) +(ddiff/diff (Timestamp. 0) + (doto (Timestamp. 1000) (.setNanos 101))) +``` + +If you need to diff a rich set of time literal, using [time-literals](https://github.com/henryw374/time-literals) is probably a good choice. + +``` +(require '[time-literals.read-write]) +(require '[lambdaisland.deep-diff2 :as ddiff]) +(time-literals.read-write/print-time-literals-clj!) +(ddiff/pretty-print (ddiff/diff #time/date "2039-01-01" #time/date-time "2018-07-05T08:08:44.026")) +``` + ## Deep-diff 1 vs 2 The original deep-diff only worked on Clojure, not ClojureScript. In porting the @@ -170,4 +196,4 @@ Another library that implements a form of data structure diffing is [editscript] Copyright © 2018-2020 Arne Brasseur and contributors Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt - \ No newline at end of file + From 5d28de463ed851ce12f9eb9ff86454f512800d84 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 21 Nov 2022 11:20:42 +0100 Subject: [PATCH 089/158] Expand README regarding custom types --- README.md | 66 ++++++++++++++++++++++++++++++---- repl_sessions/custom_types.clj | 59 ++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 repl_sessions/custom_types.clj diff --git a/README.md b/README.md index 6107e1f..4d99331 100644 --- a/README.md +++ b/README.md @@ -88,28 +88,73 @@ For fine grained control you can create a custom Puget printer, and supply it to For more advanced uses like incorporating diffs into your own Fipp documents, see `lambdaisland.deep-diff2.printer/format-doc`, `lambdaisland.deep-diff2.printer/print-doc`. -You can register print handlers for new types using -`lambdaisland.deep-diff2.printer/register-print-handler!`, or by passing and +### Print handlers for custom or built-in types + +In recent versions deep-diff2 initializes its internal copy of Puget with +`{:print-fallback :print}`, meaning it will fall back to using the system +printer, which you can extend by extending the `print-method` multimethod. + +This also means that we automatically pick up additional handlers installed by +libraries, such as [time-literals](https://github.com/henryw374/time-literals). + +You can also register print handlers for deep-diff2 specifically by using +`lambdaisland.deep-diff2.printer-impl/register-print-handler!`, or by passing an `:extra-handlers` map to `printer`. -Note: the default printer is initialized as `(ddiff/printer {:print-fallback :print})` so that it will fall back to system printer when there is no match. +If you are dealing with printing of custom types you might find that there are +multiple print implementations you need to keep up-to-date, see +[lambdaisland.data-printers](https://github.com/lambdaisland/data-printers) for +a high-level API that can work with all the commonly used print implementations. + +#### Example of a custom type + +See [repl_sessions/custom_type.clj](repl_sessions/custom_type.clj) for the full +code and results. + +```clj +(deftype Degrees [amount unit] + Object + (equals [this that] + (and (instance? Degrees that) + (= amount (.-amount that)) + (= unit (.-unit that))))) + +;; Using system handler fallback +(defmethod print-method Degrees [degrees out] + (.write out (str (.-amount degrees) "°" (.-unit degrees)))) + +;; OR Using a Puget-specific handler +(lambdaisland.deep-diff2.printer-impl/register-print-handler! + `Degrees + (fn [printer value] + [:span + (lambdaisland.deep-diff2.puget.color/document printer :number (str (.-amount value))) + (lambdaisland.deep-diff2.puget.color/document printer :tag "°") + (lambdaisland.deep-diff2.puget.color/document printer :keyword (str (.-unit value)))])) +``` ### Time, data literal -One of the creative ways of using deep-diff is to diff two time data. +A common use case is diffing and printing Java date and time objects +(`java.util.Date`, `java.time.*`, `java.sql.Date|Time|DateTime`). -``` +Chances are you already have print handlers (and data readers) set up for these +via the [time-literals](https://github.com/henryw374/time-literals) library +(perhaps indirectly by pulling in [tick](https://github.com/juxt/tick). In that +case these should _just work_. + +```clj (ddiff/diff #inst "2019-04-09T14:57:46.128-00:00" #inst "2019-04-10T14:57:46.128-00:00") ``` or -``` +```clj (import '[java.sql Timestamp]) (ddiff/diff (Timestamp. 0) (doto (Timestamp. 1000) (.setNanos 101))) ``` -If you need to diff a rich set of time literal, using [time-literals](https://github.com/henryw374/time-literals) is probably a good choice. +If you need to diff a rich set of time literal, using ``` (require '[time-literals.read-write]) @@ -125,6 +170,13 @@ code to CLJC we were forced to make some breaking changes. To not break existing consumers we decided to move both the namespaces and the released artifact to new names, so the old and new deep-diff can exist side by side. +We also had to fork Puget to make it cljc compatible. This required breaking +changes as well, making it unlikely these changes will make it upstream, so +instead we vendor our own copy of Puget under `lambdaisland.deep-diff2.puget.*`. +This does mean we don't automatically pick up custom Puget print handlers, +unless they are *also* registered with our own copy of Puget. See above for more +info on that. + When starting new projects you should use `lambdaisland/deep-diff2`. However if you have existing code that uses `lambdaisland/deep-diff` and you don't need the ClojureScript support then it is not necessary to upgrade. The old version still diff --git a/repl_sessions/custom_types.clj b/repl_sessions/custom_types.clj new file mode 100644 index 0000000..3830ad2 --- /dev/null +++ b/repl_sessions/custom_types.clj @@ -0,0 +1,59 @@ +(ns repl-sessions.custom-types + (:require [lambdaisland.deep-diff2 :as ddiff])) + +;; Demonstration of how to set up print handlers for custom types. + +;; New custom type for reprsenting "degrees" amount, like Celcius or Fahrenheit. +;; Using `deftype` and not `defrecord` because we handle `defrecord` instances +;; already as if they are maps. + +(deftype Degrees [amount unit] + Object + (equals [this that] ; needed for proper diffing + (and (instance? Degrees that) + (= amount (.-amount that)) + (= unit (.-unit that))))) + +;; No custom handler yet, defaults to Object#toString rendering: + +(pr-str (->Degrees 10 "C")) +;; => "#object[custom_types.Degrees 0x75634af8 \"custom_types.Degrees@75634af8\"]" + +;; And so does ddiff +(ddiff/pretty-print (ddiff/diff [(->Degrees 20 \C)] + [(->Degrees 80 \F)])) +;; => +;; [-#object[custom_types.Degrees 0x660a955 "custom_types.Degrees@660a955"] +;; +#object[custom_types.Degrees 0x40241557 "custom_types.Degrees@40241557"]] + + +;; Now we set up a custom handler + +(defmethod print-method Degrees [degrees out] + (.write out (str (.-amount degrees) "°" (.-unit degrees)))) + + +(pr-str (->Degrees 10 "C")) +;; => "10°C" + +(ddiff/pretty-print (ddiff/diff [(->Degrees 20 \C)] + [(->Degrees 20 \C) + (->Degrees 80 \F)])) +;; => [-20°C +80°F] + +;; Add Puget handler, to tap into Puget's rich rendering. Will take precedence +;; over `print-method`. + +(lambdaisland.deep-diff2.printer-impl/register-print-handler! + `Degrees + (fn [printer value] + [:span + (lambdaisland.deep-diff2.puget.color/document printer :number (str (.-amount value))) + (lambdaisland.deep-diff2.puget.color/document printer :tag "°") + (lambdaisland.deep-diff2.puget.color/document printer :keyword (str (.-unit value)))])) + +(ddiff/pretty-print (->Degrees 20 \C)) +;; => 20°C (printed with specific colors) + +(ddiff/pretty-print (->Degrees 20 \C) (ddiff/printer {:color-markup :html-inline})) +;;=> 20°C From a1027b2a53b5a14e5b8c8a0856554476bacc46f1 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 21 Nov 2022 11:23:08 +0100 Subject: [PATCH 090/158] Update CHANGELOG --- CHANGELOG.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e79aff9..fbd6dd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,8 @@ # Unreleased -## Added - -## Fixed - ## Changed -- [breaking] Change the default setting of the pretty-print printer to system printer. +- [breaking] Fall back to the system printer when no deep-diff2 specific print handler is available for a given type. See the README for details. # 2.4.138 (2022-09-01 / 6196130) From 92232a110cbb53e0365a9767dbaee2b612ff11c5 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 21 Nov 2022 11:25:36 +0100 Subject: [PATCH 091/158] Version bumps --- .gitignore | 1 + bb.edn | 2 +- deps.edn | 6 +++--- package.json | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 0bd745f..6125203 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ resources/public/ui test resources/public/ .store +package-lock.json diff --git a/bb.edn b/bb.edn index 4803007..488b542 100644 --- a/bb.edn +++ b/bb.edn @@ -1,3 +1,3 @@ {:deps {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "7f39ffb76d47e2ff83d4478957c2ca4fd180f3e5"}}} + :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}}} diff --git a/deps.edn b/deps.edn index 9bce251..b43de2b 100644 --- a/deps.edn +++ b/deps.edn @@ -2,7 +2,7 @@ :deps {fipp/fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} lambdaisland/clj-diff {:mvn/version "1.3.67"} - mvxcvi/arrangement {:mvn/version "2.0.0"}} + mvxcvi/arrangement {:mvn/version "2.1.0"}} :aliases {:cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.60"}}} @@ -12,13 +12,13 @@ :chui {:extra-deps {lambdaisland/chui {:local/root "../chui"} - thheller/shadow-cljs {:mvn/version "2.20.1"} + thheller/shadow-cljs {:mvn/version "2.20.12"} garden/garden {:mvn/version "1.3.10"}} :extra-paths ["../chui/resources" "../chui/dev"]} :test {:extra-paths ["test"] - :extra-deps {lambdaisland/kaocha {:mvn/version "1.70.1086"} + :extra-deps {lambdaisland/kaocha {:mvn/version "1.71.1119"} com.lambdaisland/kaocha-cljs {:mvn/version "1.4.130"} org.clojure/clojurescript {:mvn/version "1.11.60"} org.clojure/test.check {:mvn/version "1.1.1"}}}}} diff --git a/package.json b/package.json index bb97c0d..4643b2a 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "dependencies": { "react": "^16.13.1", "react-dom": "^16.13.1", - "ws": "^8.8.1" + "ws": "^8.11.0" } } From 5b69025bde4ad2b8fabe5b3181a3077a79f229d1 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 21 Nov 2022 11:25:59 +0100 Subject: [PATCH 092/158] # 2.5.151 (2022-11-21 / 92232a1) ## Changed - [breaking] Fall back to the system printer when no deep-diff2 specific print handler is available for a given type. See the README for details. --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 7208c21..68151b2 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.4 \ No newline at end of file +2.5 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index fbd6dd4..1d73a8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.5.151 (2022-11-21 / 92232a1) ## Changed @@ -124,4 +124,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 4d99331..59f723a 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.4.138"} +lambdaisland/deep-diff2 {:mvn/version "2.5.151"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.4.138"] +[lambdaisland/deep-diff2 "2.5.151"] ``` ## Use From 909c9eaccc8c43d59df3341ff675dfec08cff0e8 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Mon, 21 Nov 2022 11:26:16 +0100 Subject: [PATCH 093/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d73a8e..ea2ba80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.5.151 (2022-11-21 / 92232a1) ## Changed diff --git a/pom.xml b/pom.xml index b100069..22fca35 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.4.138 + 2.5.151 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 62a13e45be819e037f9e3659266f276cf3d80578 + 5b69025bde4ad2b8fabe5b3181a3077a79f229d1 @@ -46,7 +46,7 @@ mvxcvi arrangement - 2.0.0 + 2.1.0 @@ -76,7 +76,7 @@ - 62a13e45be819e037f9e3659266f276cf3d80578 + 5b69025bde4ad2b8fabe5b3181a3077a79f229d1 From 9f9c716a7dad77b9f4ee2f9563089511cf5a1074 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Nov 2022 11:41:59 +0100 Subject: [PATCH 094/158] Babashka compatibility --- .gitignore | 1 + CHANGELOG.md | 4 +++- bb.edn | 8 +++++++- deps.edn | 4 +++- src/lambdaisland/deep_diff2/puget/printer.cljc | 18 ++++++++++-------- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 6125203..34c8515 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ test resources/public/ .store package-lock.json +.cache diff --git a/CHANGELOG.md b/CHANGELOG.md index ea2ba80..6ffc4f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ## Fixed +- Babashka compatibility + ## Changed # 2.5.151 (2022-11-21 / 92232a1) @@ -132,4 +134,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. diff --git a/bb.edn b/bb.edn index 488b542..048404a 100644 --- a/bb.edn +++ b/bb.edn @@ -1,3 +1,9 @@ {:deps {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}}} + :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} + :tasks + {test:bb {:doc "Run babashka tests with custom runner" + :extra-paths ["src" "test"] + :extra-deps {current/project {:local/root "."} + org.clojure/test.check {:mvn/version "1.1.1"}} + :task (exec 'lambdaisland.deep-diff2.runner/run-tests)}}} diff --git a/deps.edn b/deps.edn index b43de2b..95bfe8a 100644 --- a/deps.edn +++ b/deps.edn @@ -1,7 +1,9 @@ {:paths ["resources" "src"] :deps {fipp/fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} - lambdaisland/clj-diff {:mvn/version "1.3.67"} + lambdaisland/clj-diff {:git/url "https://github.com/borkdude/lambdaisland-clj-diff" + :git/sha "55ea1d4200e2ea6a2e4ba3c8ec2a615df7e60d24"} + ;; lambdaisland/clj-diff {:mvn/version "1.3.67"} mvxcvi/arrangement {:mvn/version "2.1.0"}} :aliases {:cljs diff --git a/src/lambdaisland/deep_diff2/puget/printer.cljc b/src/lambdaisland/deep_diff2/puget/printer.cljc index 0ac6210..0069df9 100644 --- a/src/lambdaisland/deep_diff2/puget/printer.cljc +++ b/src/lambdaisland/deep_diff2/puget/printer.cljc @@ -319,14 +319,16 @@ (doto (.setTimeZone (java.util.TimeZone/getTimeZone "GMT"))) (.format ^java.util.Date %))) - java.util.GregorianCalendar - (tagged-handler - 'inst - #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) - offset-minutes (- (.length formatted) 2)] - (str (subs formatted 0 offset-minutes) - ":" - (subs formatted offset-minutes)))) + #?@(:bb [] + :clj + [java.util.GregorianCalendar + (tagged-handler + 'inst + #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) + offset-minutes (- (.length formatted) 2)] + (str (subs formatted 0 offset-minutes) + ":" + (subs formatted offset-minutes))))]) java.sql.Timestamp (tagged-handler From f1c99c111aa84380c424049d469d6bfdf46aa610 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 22 Nov 2022 12:20:47 +0100 Subject: [PATCH 095/158] Support older clojure CLI --- deps.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps.edn b/deps.edn index 95bfe8a..c5e54c6 100644 --- a/deps.edn +++ b/deps.edn @@ -2,7 +2,7 @@ :deps {fipp/fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} lambdaisland/clj-diff {:git/url "https://github.com/borkdude/lambdaisland-clj-diff" - :git/sha "55ea1d4200e2ea6a2e4ba3c8ec2a615df7e60d24"} + :sha "55ea1d4200e2ea6a2e4ba3c8ec2a615df7e60d24"} ;; lambdaisland/clj-diff {:mvn/version "1.3.67"} mvxcvi/arrangement {:mvn/version "2.1.0"}} From 2b49481c9530ebb66e49c57b68a12c2bdbcfae9b Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Thu, 24 Nov 2022 12:02:58 +0100 Subject: [PATCH 096/158] Update clj-diff --- deps.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps.edn b/deps.edn index c5e54c6..f025692 100644 --- a/deps.edn +++ b/deps.edn @@ -2,7 +2,7 @@ :deps {fipp/fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} lambdaisland/clj-diff {:git/url "https://github.com/borkdude/lambdaisland-clj-diff" - :sha "55ea1d4200e2ea6a2e4ba3c8ec2a615df7e60d24"} + :sha "ca0971cb76deacf00ff52e3332e5d72479f6468d"} ;; lambdaisland/clj-diff {:mvn/version "1.3.67"} mvxcvi/arrangement {:mvn/version "2.1.0"}} From a4fa3647a6241a30d4e97e969deb3fd6c9710ed4 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Thu, 24 Nov 2022 12:07:00 +0100 Subject: [PATCH 097/158] Add test:clj task --- bb.edn | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bb.edn b/bb.edn index 048404a..97c2582 100644 --- a/bb.edn +++ b/bb.edn @@ -2,8 +2,14 @@ {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} :tasks - {test:bb {:doc "Run babashka tests with custom runner" + {:requires ([babashka.fs :as fs]) + test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] :extra-deps {current/project {:local/root "."} org.clojure/test.check {:mvn/version "1.1.1"}} - :task (exec 'lambdaisland.deep-diff2.runner/run-tests)}}} + :task (exec 'lambdaisland.deep-diff2.runner/run-tests)} + npm-ws (when-not (fs/exists? "node_modules/ws") + (shell "npm install ws")) + test:clj {:doc "Run kaocha tests" + :depends [npm-ws] + :task (apply clojure "-M:dev:test -m kaocha.runner" *command-line-args*)}}} From 0214e88fa8c9216def790d7d56517375b1ca0199 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Thu, 24 Nov 2022 12:17:32 +0100 Subject: [PATCH 098/158] Fix CLJS tests --- bb.edn | 6 +- .../deep_diff2/puget/printer.cljc | 79 +++++++++---------- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/bb.edn b/bb.edn index 97c2582..57c0ed0 100644 --- a/bb.edn +++ b/bb.edn @@ -10,6 +10,6 @@ :task (exec 'lambdaisland.deep-diff2.runner/run-tests)} npm-ws (when-not (fs/exists? "node_modules/ws") (shell "npm install ws")) - test:clj {:doc "Run kaocha tests" - :depends [npm-ws] - :task (apply clojure "-M:dev:test -m kaocha.runner" *command-line-args*)}}} + test:kaocha {:doc "Run kaocha tests" + :depends [npm-ws] + :task (apply clojure "-M:dev:test -m kaocha.runner" *command-line-args*)}}} diff --git a/src/lambdaisland/deep_diff2/puget/printer.cljc b/src/lambdaisland/deep_diff2/puget/printer.cljc index 0069df9..5b6888b 100644 --- a/src/lambdaisland/deep_diff2/puget/printer.cljc +++ b/src/lambdaisland/deep_diff2/puget/printer.cljc @@ -296,46 +296,45 @@ "Map of print handlers for Java/JavaScript types. This supports syntax for regular expressions, dates, UUIDs, and futures." #?(:clj - {java.lang.Class - (fn class-handler - [printer value] - (format-unknown printer value "Class" (get-type-name value))) - - java.util.concurrent.Future - (fn future-handler - [printer value] - (let [doc (if (future-done? promise) - (format-doc printer @value) - (color/document printer :nil "pending"))] - (format-unknown printer value "Future" doc))) - - java.util.UUID - (tagged-handler 'uuid str) - - java.util.Date - (tagged-handler - 'inst - #(-> (java.text.SimpleDateFormat. inst-pattern) - (doto (.setTimeZone (java.util.TimeZone/getTimeZone "GMT"))) - (.format ^java.util.Date %))) - - #?@(:bb [] - :clj - [java.util.GregorianCalendar - (tagged-handler - 'inst - #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) - offset-minutes (- (.length formatted) 2)] - (str (subs formatted 0 offset-minutes) - ":" - (subs formatted offset-minutes))))]) - - java.sql.Timestamp - (tagged-handler - 'inst - (fn [ts] - (str (.format ^SimpleDateFormat (utc-timestamp-format) ts) - (format ".%09d-00:00" (.getNanos ^Timestamp ts)))))} + (-> + {java.lang.Class + (fn class-handler + [printer value] + (format-unknown printer value "Class" (get-type-name value))) + + java.util.concurrent.Future + (fn future-handler + [printer value] + (let [doc (if (future-done? promise) + (format-doc printer @value) + (color/document printer :nil "pending"))] + (format-unknown printer value "Future" doc))) + + java.util.UUID + (tagged-handler 'uuid str) + + java.util.Date + (tagged-handler + 'inst + #(-> (java.text.SimpleDateFormat. inst-pattern) + (doto (.setTimeZone (java.util.TimeZone/getTimeZone "GMT"))) + (.format ^java.util.Date %))) + + java.sql.Timestamp + (tagged-handler + 'inst + (fn [ts] + (str (.format ^SimpleDateFormat (utc-timestamp-format) ts) + (format ".%09d-00:00" (.getNanos ^Timestamp ts)))))} + #?(:bb identity + :clj (assoc java.util.GregorianCalendar + (tagged-handler + 'inst + #(let [formatted (format "%1$tFT%1$tT.%1$tL%1$tz" %) + offset-minutes (- (.length formatted) 2)] + (str (subs formatted 0 offset-minutes) + ":" + (subs formatted offset-minutes))))))) :cljs {inst? From f464871a2d80032ccab38975cf397d96c2e45bdd Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 10:43:52 +0100 Subject: [PATCH 099/158] Update clj-diff --- deps.edn | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/deps.edn b/deps.edn index f025692..dbf61bb 100644 --- a/deps.edn +++ b/deps.edn @@ -1,9 +1,7 @@ {:paths ["resources" "src"] :deps {fipp/fipp {:mvn/version "0.6.26"} org.clojure/core.rrb-vector {:mvn/version "0.1.2"} - lambdaisland/clj-diff {:git/url "https://github.com/borkdude/lambdaisland-clj-diff" - :sha "ca0971cb76deacf00ff52e3332e5d72479f6468d"} - ;; lambdaisland/clj-diff {:mvn/version "1.3.67"} + lambdaisland/clj-diff {:mvn/version "1.4.78"} mvxcvi/arrangement {:mvn/version "2.1.0"}} :aliases {:cljs From 3bf1ea31ee15a8623175d56ac23b62ff6d7592a5 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 10:45:06 +0100 Subject: [PATCH 100/158] Remove task --- bb.edn | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/bb.edn b/bb.edn index 57c0ed0..8e44704 100644 --- a/bb.edn +++ b/bb.edn @@ -7,9 +7,4 @@ :extra-paths ["src" "test"] :extra-deps {current/project {:local/root "."} org.clojure/test.check {:mvn/version "1.1.1"}} - :task (exec 'lambdaisland.deep-diff2.runner/run-tests)} - npm-ws (when-not (fs/exists? "node_modules/ws") - (shell "npm install ws")) - test:kaocha {:doc "Run kaocha tests" - :depends [npm-ws] - :task (apply clojure "-M:dev:test -m kaocha.runner" *command-line-args*)}}} + :task (exec 'lambdaisland.deep-diff2.runner/run-tests)}}} From 25d0f7da6e356dc9616214a8afb4a8e4d9997ed0 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 10:56:25 +0100 Subject: [PATCH 101/158] Add bb test action --- .github/workflows/bb.yml | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/bb.yml diff --git a/.github/workflows/bb.yml b/.github/workflows/bb.yml new file mode 100644 index 0000000..9c1baa5 --- /dev/null +++ b/.github/workflows/bb.yml @@ -0,0 +1,51 @@ +name: bb + +on: [push, pull_request] + +jobs: + + clojure: + + strategy: + matrix: + os: [ubuntu-latest, macOS-latest, windows-latest] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v3 + + # It is important to install java before installing clojure tools which needs java + # exclusions: babashka, clj-kondo and cljstyle + - name: Prepare java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '11' + + - name: Install clojure tools + uses: DeLaGuardo/setup-clojure@10.1 + with: + # Install just one or all simultaneously + # The value must indicate a particular version of the tool, or use 'latest' + # to always provision the latest version + bb: latest + + # Optional step: + - name: Cache clojure dependencies + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository + ~/.gitlibs + ~/.deps.clj + # List all files containing dependencies: + key: cljdeps-${{ hashFiles('deps.edn') }} + # key: cljdeps-${{ hashFiles('deps.edn', 'bb.edn') }} + # key: cljdeps-${{ hashFiles('project.clj') }} + # key: cljdeps-${{ hashFiles('build.boot') }} + restore-keys: cljdeps- + + - name: Execute bb tests + run: bb test:bb From 0a90c49930acf22eecbf5422977e539e55d406d4 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 11:03:13 +0100 Subject: [PATCH 102/158] debug action --- .github/workflows/bb.yml | 5 ++++- bb.edn | 3 +-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bb.yml b/.github/workflows/bb.yml index 9c1baa5..4d3a8fc 100644 --- a/.github/workflows/bb.yml +++ b/.github/workflows/bb.yml @@ -48,4 +48,7 @@ jobs: restore-keys: cljdeps- - name: Execute bb tests - run: bb test:bb + run: | + bb --version + bb -e '(babashka.classpath/get-classpath)' + bb test:bb diff --git a/bb.edn b/bb.edn index 8e44704..048404a 100644 --- a/bb.edn +++ b/bb.edn @@ -2,8 +2,7 @@ {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} :tasks - {:requires ([babashka.fs :as fs]) - test:bb {:doc "Run babashka tests with custom runner" + {test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] :extra-deps {current/project {:local/root "."} org.clojure/test.check {:mvn/version "1.1.1"}} From e653eb37ccab5e04cf309e426c4ace238473f306 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 11:18:17 +0100 Subject: [PATCH 103/158] debug bb runner --- .github/workflows/bb.yml | 2 -- bb.edn | 9 ++++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bb.yml b/.github/workflows/bb.yml index 4d3a8fc..dc22acc 100644 --- a/.github/workflows/bb.yml +++ b/.github/workflows/bb.yml @@ -49,6 +49,4 @@ jobs: - name: Execute bb tests run: | - bb --version - bb -e '(babashka.classpath/get-classpath)' bb test:bb diff --git a/bb.edn b/bb.edn index 048404a..6446680 100644 --- a/bb.edn +++ b/bb.edn @@ -1,9 +1,12 @@ -{:deps +{:paths ["src" "test"] + :deps {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" - :extra-paths ["src" "test"] + ;; :extra-paths ["src" "test"] :extra-deps {current/project {:local/root "."} org.clojure/test.check {:mvn/version "1.1.1"}} - :task (exec 'lambdaisland.deep-diff2.runner/run-tests)}}} + :task (do + (prn (babashka.classpath/get-classpath)) + (exec 'lambdaisland.deep-diff2.runner/run-tests))}}} From 9624fed1caa1fdf358288358b25e8a5c9af2799a Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 12:07:30 +0100 Subject: [PATCH 104/158] Remove test dir from gitignore --- .gitignore | 1 - bb.edn | 9 +++------ test/lambdaisland/deep_diff2/runner.clj | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 test/lambdaisland/deep_diff2/runner.clj diff --git a/.gitignore b/.gitignore index 34c8515..91d15fb 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ package.json yarn.lock .shadow-cljs resources/public/ui -test resources/public/ .store package-lock.json diff --git a/bb.edn b/bb.edn index 6446680..048404a 100644 --- a/bb.edn +++ b/bb.edn @@ -1,12 +1,9 @@ -{:paths ["src" "test"] - :deps +{:deps {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" - ;; :extra-paths ["src" "test"] + :extra-paths ["src" "test"] :extra-deps {current/project {:local/root "."} org.clojure/test.check {:mvn/version "1.1.1"}} - :task (do - (prn (babashka.classpath/get-classpath)) - (exec 'lambdaisland.deep-diff2.runner/run-tests))}}} + :task (exec 'lambdaisland.deep-diff2.runner/run-tests)}}} diff --git a/test/lambdaisland/deep_diff2/runner.clj b/test/lambdaisland/deep_diff2/runner.clj new file mode 100644 index 0000000..6d5ba0b --- /dev/null +++ b/test/lambdaisland/deep_diff2/runner.clj @@ -0,0 +1,14 @@ +(ns lambdaisland.deep-diff2.runner + "Test runner for babashka, until kaocha works with bb :)" + (:require [clojure.test :as t])) + +(defn run-tests [_] + (let [test-nss '[lambdaisland.deep-diff2.diff-test + #_lambdaisland.deep-diff2.printer-test + lambdaisland.deep-diff2.puget-test]] + (doseq [test-ns test-nss] + (require test-ns)) + (let [{:keys [fail error]} + (apply t/run-tests test-nss)] + (when (and fail error (pos? (+ fail error))) + (throw (ex-info "Tests failed" {:babashka/exit 1})))))) From 06fec7e9b0bdeb4146bee7bce6a09c40110f1d79 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 25 Nov 2022 12:35:26 +0100 Subject: [PATCH 105/158] tidy up CHANGELOG --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ffc4f9..172e3a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,9 @@ # Unreleased -## Added - ## Fixed - Babashka compatibility -## Changed - # 2.5.151 (2022-11-21 / 92232a1) ## Changed From e3828abe1ffb4b1888892ef48db117255bb69b58 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 25 Nov 2022 12:35:52 +0100 Subject: [PATCH 106/158] # 2.6.166 (2022-11-25 / 06fec7e) ## Fixed - Babashka compatibility --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 68151b2..c20c8ac 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.5 \ No newline at end of file +2.6 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 172e3a4..73f8cc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.6.166 (2022-11-25 / 06fec7e) ## Fixed @@ -130,4 +130,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 59f723a..7349b9d 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.5.151"} +lambdaisland/deep-diff2 {:mvn/version "2.6.166"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.5.151"] +[lambdaisland/deep-diff2 "2.6.166"] ``` ## Use From 863520c1802c81d5e745c6e7a81c7282eda44d52 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 25 Nov 2022 12:36:03 +0100 Subject: [PATCH 107/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73f8cc2..8f7805f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.6.166 (2022-11-25 / 06fec7e) ## Fixed diff --git a/pom.xml b/pom.xml index 22fca35..1ed34bf 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.5.151 + 2.6.166 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 5b69025bde4ad2b8fabe5b3181a3077a79f229d1 + e3828abe1ffb4b1888892ef48db117255bb69b58 @@ -41,7 +41,7 @@ lambdaisland clj-diff - 1.3.67 + 1.4.78 mvxcvi @@ -76,7 +76,7 @@ - 5b69025bde4ad2b8fabe5b3181a3077a79f229d1 + e3828abe1ffb4b1888892ef48db117255bb69b58 From 343811ea9c6fd1c1c212717ce25139b54bf71999 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 25 Nov 2022 13:06:55 +0100 Subject: [PATCH 108/158] Fix printing of diffed structures on babashka --- CHANGELOG.md | 4 +--- bb.edn | 3 ++- src/lambdaisland/deep_diff2/printer_impl.cljc | 4 +++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f7805f..708ec3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,8 @@ # Unreleased -## Added - ## Fixed -## Changed +- Fix printing of mismatch/deletion/insertion on Babashka # 2.6.166 (2022-11-25 / 06fec7e) diff --git a/bb.edn b/bb.edn index 048404a..058af91 100644 --- a/bb.edn +++ b/bb.edn @@ -1,5 +1,6 @@ {:deps - {lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" + {lambdaisland/deep-diff2 {:local/root "."} + lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" diff --git a/src/lambdaisland/deep_diff2/printer_impl.cljc b/src/lambdaisland/deep_diff2/printer_impl.cljc index cd1915c..0f76acc 100644 --- a/src/lambdaisland/deep_diff2/printer_impl.cljc +++ b/src/lambdaisland/deep_diff2/printer_impl.cljc @@ -103,7 +103,9 @@ the class of the object. For ClojureScript, gets either the `name` attribute or the protocol name if the `name` attribute doesn't exist." [x] - #?(:clj + #?(:bb + (symbol (str (type x))) + :clj (symbol (.getName (class x))) :cljs (let [t (type x) From 312c86cd1c220d688c26c538bfc68ce0a0e863cd Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 25 Nov 2022 13:07:26 +0100 Subject: [PATCH 109/158] # 2.7.169 (2022-11-25 / 343811e) ## Fixed - Fix printing of mismatch/deletion/insertion on Babashka --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index c20c8ac..e6b7b62 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.6 \ No newline at end of file +2.7 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 708ec3a..2f4f916 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.7.169 (2022-11-25 / 343811e) ## Fixed diff --git a/README.md b/README.md index 7349b9d..2705c72 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.6.166"} +lambdaisland/deep-diff2 {:mvn/version "2.7.169"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.6.166"] +[lambdaisland/deep-diff2 "2.7.169"] ``` ## Use From 372c838f2df1b94babbe109e665701cec1afec40 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Fri, 25 Nov 2022 13:07:43 +0100 Subject: [PATCH 110/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f4f916..20bf4a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.7.169 (2022-11-25 / 343811e) ## Fixed diff --git a/pom.xml b/pom.xml index 1ed34bf..90a56dd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.6.166 + 2.7.169 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - e3828abe1ffb4b1888892ef48db117255bb69b58 + 312c86cd1c220d688c26c538bfc68ce0a0e863cd @@ -76,7 +76,7 @@ - e3828abe1ffb4b1888892ef48db117255bb69b58 + 312c86cd1c220d688c26c538bfc68ce0a0e863cd From 42ce74d9cabe1bf2a37fed6e879af851295364a2 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 13:30:16 +0100 Subject: [PATCH 111/158] Enable print tests in bb --- test/lambdaisland/deep_diff2/printer_test.cljc | 13 +++++++++---- test/lambdaisland/deep_diff2/runner.clj | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/test/lambdaisland/deep_diff2/printer_test.cljc b/test/lambdaisland/deep_diff2/printer_test.cljc index 155593d..b99f749 100644 --- a/test/lambdaisland/deep_diff2/printer_test.cljc +++ b/test/lambdaisland/deep_diff2/printer_test.cljc @@ -5,16 +5,19 @@ #?(:clj (:import (java.sql Timestamp) (java.util Date - GregorianCalendar TimeZone)))) +#?(:bb nil ;; GregorianCalender not included in favor of java.time + :clj (import '[java.util GregorianCalendar])) + (defn- printed [diff] (let [printer (printer/puget-printer {})] (with-out-str (-> diff (printer/format-doc printer) (printer/print-doc printer))))) -#?(:clj +#?(:bb nil + :clj (defn- calendar [date] (doto (GregorianCalendar. (TimeZone/getTimeZone "GMT")) @@ -26,13 +29,15 @@ (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" #inst "2019-04-10T14:57:46.128-00:00"))))) - #?(:clj + #?(:bb nil ;; bb TimeStamp constructor not included as of 1.0.166 + :clj (testing "timestamp" (is (= "\u001B[31m-#inst \"1970-01-01T00:00:00.000000000-00:00\"\u001B[0m \u001B[32m+#inst \"1970-01-01T00:00:01.000000101-00:00\"\u001B[0m\n" (printed (diff/diff (Timestamp. 0) (doto (Timestamp. 1000) (.setNanos 101)))))))) - #?(:clj + #?(:bb nil + :clj (testing "calendar" (is (= "\u001B[31m-#inst \"1970-01-01T00:00:00.000+00:00\"\u001B[0m \u001B[32m+#inst \"1970-01-01T00:00:01.001+00:00\"\u001B[0m\n" (printed (diff/diff (calendar (Date. 0)) (calendar (Date. 1001)))))))) diff --git a/test/lambdaisland/deep_diff2/runner.clj b/test/lambdaisland/deep_diff2/runner.clj index 6d5ba0b..f323d7e 100644 --- a/test/lambdaisland/deep_diff2/runner.clj +++ b/test/lambdaisland/deep_diff2/runner.clj @@ -4,7 +4,7 @@ (defn run-tests [_] (let [test-nss '[lambdaisland.deep-diff2.diff-test - #_lambdaisland.deep-diff2.printer-test + lambdaisland.deep-diff2.printer-test lambdaisland.deep-diff2.puget-test]] (doseq [test-ns test-nss] (require test-ns)) From 755f40892921834e6156a257da7b92e74603f102 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 13:31:34 +0100 Subject: [PATCH 112/158] changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20bf4a7..665bf73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Added +- Enable print tests in babashka + ## Fixed ## Changed @@ -144,4 +146,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. From 9003c7d0eeaf04cb16ff8617ff1558f4f8f3874e Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 13:35:15 +0100 Subject: [PATCH 113/158] Fix Windows --- test/lambdaisland/deep_diff2/printer_test.cljc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/lambdaisland/deep_diff2/printer_test.cljc b/test/lambdaisland/deep_diff2/printer_test.cljc index b99f749..08277a5 100644 --- a/test/lambdaisland/deep_diff2/printer_test.cljc +++ b/test/lambdaisland/deep_diff2/printer_test.cljc @@ -1,7 +1,8 @@ (ns lambdaisland.deep-diff2.printer-test (:require [clojure.test :refer [deftest testing is are]] [lambdaisland.deep-diff2.diff-impl :as diff] - [lambdaisland.deep-diff2.printer-impl :as printer]) + [lambdaisland.deep-diff2.printer-impl :as printer] + [clojure.string :as str]) #?(:clj (:import (java.sql Timestamp) (java.util Date @@ -25,9 +26,10 @@ (deftest print-doc-test (testing "date" - (is (= "\u001B[31m-#inst \"2019-04-09T14:57:46.128-00:00\"\u001B[0m \u001B[32m+#inst \"2019-04-10T14:57:46.128-00:00\"\u001B[0m\n" - (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" - #inst "2019-04-10T14:57:46.128-00:00"))))) + (let [expected (str/replace "\u001B[31m-#inst \"2019-04-09T14:57:46.128-00:00\"\u001B[0m \u001B[32m+#inst \"2019-04-10T14:57:46.128-00:00\"\u001B[0m\n" "\r\n" "\n")] + (is (= expected + (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" + #inst "2019-04-10T14:57:46.128-00:00")))))) #?(:bb nil ;; bb TimeStamp constructor not included as of 1.0.166 :clj From d24b516d89336592c56de5924777b69ffde9dc66 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 13:38:23 +0100 Subject: [PATCH 114/158] Fix windows --- test/lambdaisland/deep_diff2/printer_test.cljc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/lambdaisland/deep_diff2/printer_test.cljc b/test/lambdaisland/deep_diff2/printer_test.cljc index 08277a5..b3642fd 100644 --- a/test/lambdaisland/deep_diff2/printer_test.cljc +++ b/test/lambdaisland/deep_diff2/printer_test.cljc @@ -26,10 +26,11 @@ (deftest print-doc-test (testing "date" - (let [expected (str/replace "\u001B[31m-#inst \"2019-04-09T14:57:46.128-00:00\"\u001B[0m \u001B[32m+#inst \"2019-04-10T14:57:46.128-00:00\"\u001B[0m\n" "\r\n" "\n")] + (let [expected "\u001B[31m-#inst \"2019-04-09T14:57:46.128-00:00\"\u001B[0m \u001B[32m+#inst \"2019-04-10T14:57:46.128-00:00\"\u001B[0m\n"] (is (= expected - (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" - #inst "2019-04-10T14:57:46.128-00:00")))))) + (str/replace (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" + #inst "2019-04-10T14:57:46.128-00:00")) + "\r\n" "\n"))))) #?(:bb nil ;; bb TimeStamp constructor not included as of 1.0.166 :clj From 5b28b91dc9f5563769c8b538453804242fba2bfe Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 25 Nov 2022 13:41:20 +0100 Subject: [PATCH 115/158] Test only on Ubuntu --- .github/workflows/bb.yml | 2 +- test/lambdaisland/deep_diff2/printer_test.cljc | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/bb.yml b/.github/workflows/bb.yml index dc22acc..25317de 100644 --- a/.github/workflows/bb.yml +++ b/.github/workflows/bb.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - os: [ubuntu-latest, macOS-latest, windows-latest] + os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/test/lambdaisland/deep_diff2/printer_test.cljc b/test/lambdaisland/deep_diff2/printer_test.cljc index b3642fd..b99f749 100644 --- a/test/lambdaisland/deep_diff2/printer_test.cljc +++ b/test/lambdaisland/deep_diff2/printer_test.cljc @@ -1,8 +1,7 @@ (ns lambdaisland.deep-diff2.printer-test (:require [clojure.test :refer [deftest testing is are]] [lambdaisland.deep-diff2.diff-impl :as diff] - [lambdaisland.deep-diff2.printer-impl :as printer] - [clojure.string :as str]) + [lambdaisland.deep-diff2.printer-impl :as printer]) #?(:clj (:import (java.sql Timestamp) (java.util Date @@ -26,11 +25,9 @@ (deftest print-doc-test (testing "date" - (let [expected "\u001B[31m-#inst \"2019-04-09T14:57:46.128-00:00\"\u001B[0m \u001B[32m+#inst \"2019-04-10T14:57:46.128-00:00\"\u001B[0m\n"] - (is (= expected - (str/replace (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" - #inst "2019-04-10T14:57:46.128-00:00")) - "\r\n" "\n"))))) + (is (= "\u001B[31m-#inst \"2019-04-09T14:57:46.128-00:00\"\u001B[0m \u001B[32m+#inst \"2019-04-10T14:57:46.128-00:00\"\u001B[0m\n" + (printed (diff/diff #inst "2019-04-09T14:57:46.128-00:00" + #inst "2019-04-10T14:57:46.128-00:00"))))) #?(:bb nil ;; bb TimeStamp constructor not included as of 1.0.166 :clj From 31a6f33c5a224cb1e8cc2d082f6f65d31478e241 Mon Sep 17 00:00:00 2001 From: Lee Read Date: Fri, 25 Nov 2022 10:52:48 -0500 Subject: [PATCH 116/158] readme: add bb compatible badge Lets folks know, at-a-glance that this library will work with babashka! --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2705c72..43cb6dc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # lambdaisland/deep-diff2 -[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) +[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) [![bb compatible](https://raw.githubusercontent.com/babashka/babashka/master/logo/badge.svg)](https://babashka.org) Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. From 9dba6d1fb305b0bb0fed1905053637e8831dd243 Mon Sep 17 00:00:00 2001 From: ArielA147 Date: Tue, 29 Nov 2022 23:00:48 +0200 Subject: [PATCH 117/158] Set up add-to-project action workflow --- .github/workflows/add_to_project_board.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/workflows/add_to_project_board.yml diff --git a/.github/workflows/add_to_project_board.yml b/.github/workflows/add_to_project_board.yml new file mode 100644 index 0000000..188e1d9 --- /dev/null +++ b/.github/workflows/add_to_project_board.yml @@ -0,0 +1,9 @@ +name: Add new pr or issue to project board + +on: [issues, pull_request] + +jobs: + add-to-project: + uses: lambdaisland/open-source/.github/workflows/add-to-project-board.yml@main + secrets: inherit + \ No newline at end of file From 61440d4fec407f2ae1124ed05550b3c758ced1d5 Mon Sep 17 00:00:00 2001 From: ArielA147 <43312651+ArielA147@users.noreply.github.com> Date: Thu, 12 Jan 2023 17:52:45 +0200 Subject: [PATCH 118/158] Update add_to_project_board.yml remove pr from the add-to-project-board workflow --- .github/workflows/add_to_project_board.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/add_to_project_board.yml b/.github/workflows/add_to_project_board.yml index 188e1d9..39f7c02 100644 --- a/.github/workflows/add_to_project_board.yml +++ b/.github/workflows/add_to_project_board.yml @@ -1,9 +1,9 @@ name: Add new pr or issue to project board -on: [issues, pull_request] +on: [issues] jobs: add-to-project: uses: lambdaisland/open-source/.github/workflows/add-to-project-board.yml@main secrets: inherit - \ No newline at end of file + From 120e9d72f65b8e89dde88416cfffaaf5a829d6fe Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Wed, 29 Mar 2023 00:29:35 +0800 Subject: [PATCH 119/158] add remove-unchanged API --- CHANGELOG.md | 1 + src/lambdaisland/deep_diff2/strip.cljc | 43 ++++++++++++++++++++ test/lambdaisland/deep_diff2/strip_test.cljc | 23 +++++++++++ 3 files changed, 67 insertions(+) create mode 100644 src/lambdaisland/deep_diff2/strip.cljc create mode 100644 test/lambdaisland/deep_diff2/strip_test.cljc diff --git a/CHANGELOG.md b/CHANGELOG.md index 665bf73..4aac67a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Added - Enable print tests in babashka +- Add namespace `lambdaisland.deep-diff2.strip` ns with `remove-unchanged` API ## Fixed diff --git a/src/lambdaisland/deep_diff2/strip.cljc b/src/lambdaisland/deep_diff2/strip.cljc new file mode 100644 index 0000000..b60b186 --- /dev/null +++ b/src/lambdaisland/deep_diff2/strip.cljc @@ -0,0 +1,43 @@ +(ns lambdaisland.deep-diff2.strip + "Provide API for manipulate the diff structure data " + (:require [clojure.walk :refer [postwalk]] + #?(:clj [lambdaisland.deep-diff2.diff-impl] + :cljs [lambdaisland.deep-diff2.diff-impl :refer [Mismatch Deletion Insertion]])) + #?(:clj (:import [lambdaisland.deep_diff2.diff_impl Mismatch Deletion Insertion]))) + +(defn diff-item? + "Checks if x is a Mismatch, Deletion, or Insertion" + [x] + (or (instance? Mismatch x) + (instance? Deletion x) + (instance? Insertion x))) + +(defn extend-flatten + "Flatten, which can apply on hashmap" + [x] + (filter (complement coll?) + (rest (tree-seq coll? seq x)))) + +(defn has-diff-item? + "Checks if there are any diff items in x or sub-tree of x" + [x] + (some + #(or (= :- %) (= :+ %)) + (extend-flatten x))) + +(defn remove-unchanged + "Postwalk diff, removing values that are unchanged" + [diff] + (postwalk + (fn [x] + (cond + (map-entry? x) (cond + (diff-item? (key x)) (do + ;(println "cond 1, keep" x) + x) + (has-diff-item? (val x)) (do + ;(println "cond 2, keep" x) + x)) + :else x)) + diff)) + diff --git a/test/lambdaisland/deep_diff2/strip_test.cljc b/test/lambdaisland/deep_diff2/strip_test.cljc new file mode 100644 index 0000000..cbc4a31 --- /dev/null +++ b/test/lambdaisland/deep_diff2/strip_test.cljc @@ -0,0 +1,23 @@ +(ns lambdaisland.deep-diff2.strip-test + (:require [clojure.test :refer [deftest testing is are]] + [lambdaisland.deep-diff2.diff-impl :as diff] + [lambdaisland.deep-diff2.strip :as strip] + [lambdaisland.deep-diff2 :as ddiff])) + +(deftest strip-test + (testing "removing the same items" + (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} + y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] + (is (= (ddiff/diff x y) + {:a 1 + (diff/->Deletion :b) 2 + :d {:e (diff/->Mismatch 1 15)} + :g [:e [:k 14 :g 15]] + (diff/->Insertion :c) 3})))) + (testing "removing the same items" + (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} + y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] + (is (= (strip/remove-unchanged (ddiff/diff x y)) + {(diff/->Deletion :b) 2 + :d {:e (diff/->Mismatch 1 15)} + (diff/->Insertion :c) 3}))))) From cb9f98772b63624afc070ec352c1e42a37fb435a Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Thu, 30 Mar 2023 11:54:04 +0800 Subject: [PATCH 120/158] change strip namespace to manipulate --- src/lambdaisland/deep_diff2/{strip.cljc => manipulate.cljc} | 2 +- .../deep_diff2/{strip_test.cljc => manipulate_test.cljc} | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/lambdaisland/deep_diff2/{strip.cljc => manipulate.cljc} (97%) rename test/lambdaisland/deep_diff2/{strip_test.cljc => manipulate_test.cljc} (83%) diff --git a/src/lambdaisland/deep_diff2/strip.cljc b/src/lambdaisland/deep_diff2/manipulate.cljc similarity index 97% rename from src/lambdaisland/deep_diff2/strip.cljc rename to src/lambdaisland/deep_diff2/manipulate.cljc index b60b186..e6ca1fa 100644 --- a/src/lambdaisland/deep_diff2/strip.cljc +++ b/src/lambdaisland/deep_diff2/manipulate.cljc @@ -1,4 +1,4 @@ -(ns lambdaisland.deep-diff2.strip +(ns lambdaisland.deep-diff2.manipulate "Provide API for manipulate the diff structure data " (:require [clojure.walk :refer [postwalk]] #?(:clj [lambdaisland.deep-diff2.diff-impl] diff --git a/test/lambdaisland/deep_diff2/strip_test.cljc b/test/lambdaisland/deep_diff2/manipulate_test.cljc similarity index 83% rename from test/lambdaisland/deep_diff2/strip_test.cljc rename to test/lambdaisland/deep_diff2/manipulate_test.cljc index cbc4a31..9a9ab50 100644 --- a/test/lambdaisland/deep_diff2/strip_test.cljc +++ b/test/lambdaisland/deep_diff2/manipulate_test.cljc @@ -1,7 +1,7 @@ -(ns lambdaisland.deep-diff2.strip-test +(ns lambdaisland.deep-diff2.manipulate-test (:require [clojure.test :refer [deftest testing is are]] [lambdaisland.deep-diff2.diff-impl :as diff] - [lambdaisland.deep-diff2.strip :as strip] + [lambdaisland.deep-diff2.manipulate :as manipulate] [lambdaisland.deep-diff2 :as ddiff])) (deftest strip-test @@ -17,7 +17,7 @@ (testing "removing the same items" (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] - (is (= (strip/remove-unchanged (ddiff/diff x y)) + (is (= (manipulate/remove-unchanged (ddiff/diff x y)) {(diff/->Deletion :b) 2 :d {:e (diff/->Mismatch 1 15)} (diff/->Insertion :c) 3}))))) From e3e1f0a4050dfcf1d74498351f83a7f4246c68d4 Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Thu, 30 Mar 2023 12:09:02 +0800 Subject: [PATCH 121/158] replace cond to when --- src/lambdaisland/deep_diff2/manipulate.cljc | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/lambdaisland/deep_diff2/manipulate.cljc b/src/lambdaisland/deep_diff2/manipulate.cljc index e6ca1fa..b92a1e8 100644 --- a/src/lambdaisland/deep_diff2/manipulate.cljc +++ b/src/lambdaisland/deep_diff2/manipulate.cljc @@ -31,13 +31,11 @@ (postwalk (fn [x] (cond - (map-entry? x) (cond - (diff-item? (key x)) (do - ;(println "cond 1, keep" x) - x) - (has-diff-item? (val x)) (do - ;(println "cond 2, keep" x) - x)) + (map-entry? x) (when ;; Either k or v of a map-entry contains/is? diff-item, + ;; keep the map-entry. Otherwise, remove it. + (or (diff-item? (key x)) + (has-diff-item? (val x))) + x) :else x)) diff)) From 337924dcbc004f2ea62d9750a9f8d4a8ea8ef869 Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Thu, 30 Mar 2023 12:10:41 +0800 Subject: [PATCH 122/158] change wordings in CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aac67a..9d2f8c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## Added - Enable print tests in babashka -- Add namespace `lambdaisland.deep-diff2.strip` ns with `remove-unchanged` API +- Add namespace `lambdaisland.deep-diff2.manipulate` ns with `remove-unchanged` API ## Fixed From e8027e5ea2c00c5904d2eb307487b26b238b165c Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Thu, 30 Mar 2023 18:34:22 +0800 Subject: [PATCH 123/158] improve remove-unchanged --- src/lambdaisland/deep_diff2/manipulate.cljc | 27 +++++--- .../deep_diff2/manipulate_test.cljc | 63 ++++++++++++++++++- 2 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/lambdaisland/deep_diff2/manipulate.cljc b/src/lambdaisland/deep_diff2/manipulate.cljc index b92a1e8..293afc7 100644 --- a/src/lambdaisland/deep_diff2/manipulate.cljc +++ b/src/lambdaisland/deep_diff2/manipulate.cljc @@ -28,14 +28,21 @@ (defn remove-unchanged "Postwalk diff, removing values that are unchanged" [diff] - (postwalk - (fn [x] - (cond - (map-entry? x) (when ;; Either k or v of a map-entry contains/is? diff-item, - ;; keep the map-entry. Otherwise, remove it. - (or (diff-item? (key x)) - (has-diff-item? (val x))) - x) - :else x)) - diff)) + (let [y (postwalk + (fn [x] + (cond + (map-entry? x) (when + ;; Either k or v of a map-entry contains/is? diff-item, + ;; keep the map-entry. Otherwise, remove it. + (or (diff-item? (key x)) + (has-diff-item? (val x))) + x) + (or (set? x) (sequential? x)) (into (empty x) (filter #(or (diff-item? %) + (has-diff-item? %)) x)) + :else (do + x))) + diff)] + (cond + (coll? y) y + :else nil))) diff --git a/test/lambdaisland/deep_diff2/manipulate_test.cljc b/test/lambdaisland/deep_diff2/manipulate_test.cljc index 9a9ab50..b53ee97 100644 --- a/test/lambdaisland/deep_diff2/manipulate_test.cljc +++ b/test/lambdaisland/deep_diff2/manipulate_test.cljc @@ -1,11 +1,15 @@ (ns lambdaisland.deep-diff2.manipulate-test (:require [clojure.test :refer [deftest testing is are]] + [lambdaisland.deep-diff2.diff-test :as diff-test] + [clojure.test.check.clojure-test :refer [defspec]] + [clojure.test.check.generators :as gen] + [clojure.test.check.properties :as prop] [lambdaisland.deep-diff2.diff-impl :as diff] [lambdaisland.deep-diff2.manipulate :as manipulate] [lambdaisland.deep-diff2 :as ddiff])) -(deftest strip-test - (testing "removing the same items" +(deftest basic-strip-test + (testing "diff without remove-unchanged" (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] (is (= (ddiff/diff x y) @@ -14,10 +18,63 @@ :d {:e (diff/->Mismatch 1 15)} :g [:e [:k 14 :g 15]] (diff/->Insertion :c) 3})))) - (testing "removing the same items" + (testing "diff with remove-unchanged" (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] (is (= (manipulate/remove-unchanged (ddiff/diff x y)) {(diff/->Deletion :b) 2 :d {:e (diff/->Mismatch 1 15)} (diff/->Insertion :c) 3}))))) + +(deftest remove-unchanged-on-diff-test + (testing "diffing atoms" + (testing "when different" + (is (= (manipulate/remove-unchanged + (ddiff/diff :a :b)) + (diff/->Mismatch :a :b)))) + + (testing "when equal" + (is (= (manipulate/remove-unchanged + (ddiff/diff :a :a)) + nil)))) + + (testing "diffing collections" + (testing "when different collection types" + (is (= (manipulate/remove-unchanged + (ddiff/diff [:a :b] #{:a :b})) + (diff/->Mismatch [:a :b] #{:a :b})))) + + (testing "when equal with clojure set" + (is (= (manipulate/remove-unchanged + (ddiff/diff #{:a :b} #{:a :b})) + #{}))) + + (testing "when different with clojure set" + (is (= (manipulate/remove-unchanged + (ddiff/diff #{:a :b :c} #{:a :b :d})) + #{(diff/->Insertion :d) (diff/->Deletion :c)}))) + + (testing "when equal with clojure vector" + (is (= (manipulate/remove-unchanged + (ddiff/diff [:a :b] [:a :b])) + []))) + + (testing "when equal with clojure hashmap" + (is (= (manipulate/remove-unchanged + (ddiff/diff {:a 1} {:a 1})) + {}))) + + (testing "when equal with clojure nesting vector" + (is (= (manipulate/remove-unchanged + (ddiff/diff [:a [:b :c :d]] [:a [:b :c :d]])) + []))))) + +;; "diff itself and remove-unchanged yields empty" +(comment + (defspec diff-itself 100 + (prop/for-all [x diff-test/gen-any-except-NaN] + (if (coll? x) + (= (manipulate/remove-unchanged (ddiff/diff x x)) + (empty x)) + (= (manipulate/remove-unchanged (ddiff/diff x x)) + nil))))) From 5793228ce808453cbbed915c7c167eb1fcd68cea Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 30 Mar 2023 11:12:19 -0400 Subject: [PATCH 124/158] Improve handling for sets and maps Make sure we don't report a difference when there is none. For sets the issue came from handling them as ordered collections when they aren't, with maps we had a case of using sets as predicates, which breaks when one of the elements is false or null. Closes #43 --- src/lambdaisland/deep_diff2/diff_impl.cljc | 29 +++++++++++++++---- test/lambdaisland/deep_diff2/diff_test.cljc | 14 ++++++--- .../deep_diff2/manipulate_test.cljc | 15 +++++----- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 06cf438..55ec549 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -97,11 +97,31 @@ (diff-seq-insertions ins) (into [])))) +(defn diff-set [exp act] + (into + (into #{} + (map (fn [e] + (if (contains? act e) + e + (->Deletion e)))) + exp) + (map ->Insertion) + (remove #(contains? exp %) act))) + +(let [exp {false 0, 0 0} + act {false 0, 0 0} + exp-ks (keys exp) + act-ks (concat (filter #(contains? (set (keys act)) %) exp-ks) + (remove #(contains? (set exp-ks) %) (keys act))) + [del ins] (del+ins exp-ks act-ks)] + [del ins]) +(del+ins [0 false] [0 false]) + (defn diff-map [exp act] (first (let [exp-ks (keys exp) - act-ks (concat (filter (set (keys act)) exp-ks) - (remove (set exp-ks) (keys act))) + act-ks (concat (filter #(contains? (set (keys act)) %) exp-ks) + (remove #(contains? (set exp-ks) %) (keys act))) [del ins] (del+ins exp-ks act-ks)] (reduce (fn [[m idx] k] @@ -162,10 +182,7 @@ (extend-protocol Diff #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) (-diff-similar [exp act] - (let [exp-seq (seq exp) - act-seq (seq act)] - (set (diff-seq exp-seq (concat (filter act exp-seq) - (remove exp act-seq)))))) + (diff-set exp act)) #?@(:clj [java.util.List (-diff-similar [exp act] (diff-seq exp act)) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index 07a58b6..04c4f58 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -212,10 +212,16 @@ (gen/such-that (complement NaN?) gen/simple-type))) (defspec round-trip-diff 100 - (prop/for-all [x gen-any-except-NaN - y gen-any-except-NaN] - (let [diff (diff/diff x y)] - (= [x y] [(diff/left-undiff diff) (diff/right-undiff diff)])))) + (prop/for-all + [x gen-any-except-NaN + y gen-any-except-NaN] + (let [diff (diff/diff x y)] + (= [x y] [(diff/left-undiff diff) (diff/right-undiff diff)])))) + +(defspec diff-same-is-same 100 + (prop/for-all + [x gen-any-except-NaN] + (= x (diff/diff x x)))) (deftest diff-seq-test (is (= [(diff/->Insertion 1) 2 (diff/->Insertion 3)] diff --git a/test/lambdaisland/deep_diff2/manipulate_test.cljc b/test/lambdaisland/deep_diff2/manipulate_test.cljc index b53ee97..b8adf9f 100644 --- a/test/lambdaisland/deep_diff2/manipulate_test.cljc +++ b/test/lambdaisland/deep_diff2/manipulate_test.cljc @@ -70,11 +70,10 @@ []))))) ;; "diff itself and remove-unchanged yields empty" -(comment - (defspec diff-itself 100 - (prop/for-all [x diff-test/gen-any-except-NaN] - (if (coll? x) - (= (manipulate/remove-unchanged (ddiff/diff x x)) - (empty x)) - (= (manipulate/remove-unchanged (ddiff/diff x x)) - nil))))) +(defspec diff-itself 100 + (prop/for-all + [x diff-test/gen-any-except-NaN] + (if (coll? x) + (= (manipulate/remove-unchanged (ddiff/diff x x)) + (empty x)) + (nil? (manipulate/remove-unchanged (ddiff/diff x x)))))) From 41d3153d74226eb97e8f215a69fd06de29f3ded1 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 30 Mar 2023 11:42:55 -0400 Subject: [PATCH 125/158] Clean up and rework minimize implementation --- CHANGELOG.md | 3 +- README.md | 15 +++++ package.json | 2 +- repl_sessions/poke.clj | 62 +++++++++++++++++++ src/lambdaisland/deep_diff2.cljc | 11 +++- src/lambdaisland/deep_diff2/manipulate.cljc | 48 -------------- .../deep_diff2/minimize_impl.cljc | 47 ++++++++++++++ ...anipulate_test.cljc => minimize_test.cljc} | 33 +++++----- tests.edn | 4 +- 9 files changed, 155 insertions(+), 70 deletions(-) create mode 100644 repl_sessions/poke.clj delete mode 100644 src/lambdaisland/deep_diff2/manipulate.cljc create mode 100644 src/lambdaisland/deep_diff2/minimize_impl.cljc rename test/lambdaisland/deep_diff2/{manipulate_test.cljc => minimize_test.cljc} (72%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d2f8c2..01af062 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ ## Added - Enable print tests in babashka -- Add namespace `lambdaisland.deep-diff2.manipulate` ns with `remove-unchanged` API +- Add a `lambdaisland.deep-diff2/minimize` function, which removes any items + that haven't changed from the diff. ## Fixed diff --git a/README.md b/README.md index 43cb6dc..103a8ae 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,21 @@ For fine grained control you can create a custom Puget printer, and supply it to For more advanced uses like incorporating diffs into your own Fipp documents, see `lambdaisland.deep-diff2.printer/format-doc`, `lambdaisland.deep-diff2.printer/print-doc`. +### Minimizing + +If you are only interested in the changes, and not in any values that haven't +changed, then you can use `ddiff/minimize` to return a more compact diff. + +This is especially useful for potentially large nested data structures, for +example a JSON response coming from a web service. + +```clj +(-> (ddiff/diff {:a "apple" :b "pear"} {:a "apple" :b "banana"}) + ddiff/minimize + ddiff/pretty-print) +;; {:b -"pear" +"banana"} +``` + ### Print handlers for custom or built-in types In recent versions deep-diff2 initializes its internal copy of Puget with diff --git a/package.json b/package.json index 4643b2a..79c39c8 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "dependencies": { "react": "^16.13.1", "react-dom": "^16.13.1", - "ws": "^8.11.0" + "ws": "^8.13.0" } } diff --git a/repl_sessions/poke.clj b/repl_sessions/poke.clj new file mode 100644 index 0000000..11ea252 --- /dev/null +++ b/repl_sessions/poke.clj @@ -0,0 +1,62 @@ +(ns repl-sessions.poke + (:require [lambdaisland.deep-diff2 :as ddiff])) + +(seq #{{:foo 1M} {:bar 2}}) ;; => ({:foo 1M} {:bar 2}) +(seq #{{:foo 1} {:bar 2}}) ;; => ({:bar 2} {:foo 1}) + +(def d1 {{:foo 1M} {:bar 2}}) +(def d2 {{:foo 1} {:bar 2}}) +(ddiff/pretty-print (ddiff/diff d1 d2)) +;; #{+{:foo 1} -{:foo 1M} {:bar 2}} + +(def d1 #{{:foo 1M}}) +(def d2 #{{:foo 1}}) +(ddiff/pretty-print (ddiff/diff d1 d2)) + +(-> (ddiff/diff {:a "apple" :b "pear"} {:a "apple" :b "banana"}) + ddiff/minimize + ddiff/pretty-print) +;; {:b -"pear" +"banana"} + +;; {:b -2 +3} + +[#{1.1197369622161879e-14 1.3019822841584656e-21 0.6875 + #uuid "a907a7fe-d2eb-482d-b1cc-3acfc12daf55" + -30 + :X/*!1:3 + :u7*A/p?2IG5d*!Nl + :**d7ws + "ý" + "ÔB*àñS�¬ÚûV¡ç�¯±·á£H� + �û?'V$ëY;CL�k-oOV" + !U-h_C*A7/x0_n1 + A-*wn./o_?4w18-! + "ìêܼà4�^¤mÐðkt�ê1_ò�· À�4\n@J\"2�9)cd-\t®" + y3W-2 + #uuid "6d507164-f8b9-401d-8c44-d6b0e310c248" + "M" + :cy7-3 + :w4/R.-s?9V5 + #uuid "1bcb00c9-88b9-4eae-9fea-60600dfaefa0" + -20 + #uuid "269ab6f9-f19d-4c9d-a0cb-51150e52e9f7" + -235024979 + :O:m_9.9+A/N+usPa6.HA*G + 228944.657438457 + :x/w? + :__+o+sut9!t/?0l + "�â��«" + false + #uuid "b6295f83-8176-47b5-946e-466f74226629" + e3zQ!E*5 + :T5rb + :++y:2 + -7364 + zG/ex23 + "¡" + -4318364480 + :D+?2?!/Hrc!jA7z_2 + :z-I/!8Uq+d? + -0.5588235294117647 + -0.5925925925925926 + -0.8108108108108109}] diff --git a/src/lambdaisland/deep_diff2.cljc b/src/lambdaisland/deep_diff2.cljc index 028360f..428740f 100644 --- a/src/lambdaisland/deep_diff2.cljc +++ b/src/lambdaisland/deep_diff2.cljc @@ -1,6 +1,8 @@ (ns lambdaisland.deep-diff2 - (:require [lambdaisland.deep-diff2.diff-impl :as diff-impl] - [lambdaisland.deep-diff2.printer-impl :as printer-impl])) + (:require + [lambdaisland.deep-diff2.diff-impl :as diff-impl] + [lambdaisland.deep-diff2.printer-impl :as printer-impl] + [lambdaisland.deep-diff2.minimize-impl :as minimize])) (defn diff "Compare two values recursively. @@ -41,3 +43,8 @@ (-> diff (printer-impl/format-doc printer) (printer-impl/print-doc printer)))) + +(defn minimize + "Return a minimal diff, removing any values that haven't changed." + [diff] + (minimize/minimize diff)) diff --git a/src/lambdaisland/deep_diff2/manipulate.cljc b/src/lambdaisland/deep_diff2/manipulate.cljc deleted file mode 100644 index 293afc7..0000000 --- a/src/lambdaisland/deep_diff2/manipulate.cljc +++ /dev/null @@ -1,48 +0,0 @@ -(ns lambdaisland.deep-diff2.manipulate - "Provide API for manipulate the diff structure data " - (:require [clojure.walk :refer [postwalk]] - #?(:clj [lambdaisland.deep-diff2.diff-impl] - :cljs [lambdaisland.deep-diff2.diff-impl :refer [Mismatch Deletion Insertion]])) - #?(:clj (:import [lambdaisland.deep_diff2.diff_impl Mismatch Deletion Insertion]))) - -(defn diff-item? - "Checks if x is a Mismatch, Deletion, or Insertion" - [x] - (or (instance? Mismatch x) - (instance? Deletion x) - (instance? Insertion x))) - -(defn extend-flatten - "Flatten, which can apply on hashmap" - [x] - (filter (complement coll?) - (rest (tree-seq coll? seq x)))) - -(defn has-diff-item? - "Checks if there are any diff items in x or sub-tree of x" - [x] - (some - #(or (= :- %) (= :+ %)) - (extend-flatten x))) - -(defn remove-unchanged - "Postwalk diff, removing values that are unchanged" - [diff] - (let [y (postwalk - (fn [x] - (cond - (map-entry? x) (when - ;; Either k or v of a map-entry contains/is? diff-item, - ;; keep the map-entry. Otherwise, remove it. - (or (diff-item? (key x)) - (has-diff-item? (val x))) - x) - (or (set? x) (sequential? x)) (into (empty x) (filter #(or (diff-item? %) - (has-diff-item? %)) x)) - :else (do - x))) - diff)] - (cond - (coll? y) y - :else nil))) - diff --git a/src/lambdaisland/deep_diff2/minimize_impl.cljc b/src/lambdaisland/deep_diff2/minimize_impl.cljc new file mode 100644 index 0000000..5bef87c --- /dev/null +++ b/src/lambdaisland/deep_diff2/minimize_impl.cljc @@ -0,0 +1,47 @@ +(ns lambdaisland.deep-diff2.minimize-impl + "Provide API for manipulate the diff structure data " + (:require [clojure.walk :refer [postwalk]] + #?(:clj [lambdaisland.deep-diff2.diff-impl] + :cljs [lambdaisland.deep-diff2.diff-impl :refer [Mismatch Deletion Insertion]])) + #?(:clj (:import [lambdaisland.deep_diff2.diff_impl Mismatch Deletion Insertion]))) + +(defn diff-item? + "Checks if x is a Mismatch, Deletion, or Insertion" + [x] + (or (instance? Mismatch x) + (instance? Deletion x) + (instance? Insertion x))) + +(defn has-diff-item? + "Checks if there are any diff items in x or sub-tree of x" + [x] + (or (diff-item? x) + (and (map? x) (some #(or (has-diff-item? (key %)) + (has-diff-item? (val %))) x)) + (and (coll? x) (some has-diff-item? x)))) + +(defn minimize + "Postwalk diff, removing values that are unchanged" + [diff] + (let [y (postwalk + (fn [x] + (cond + (map-entry? x) + ;; Either k or v of a map-entry contains/is? diff-item, + ;; keep the map-entry. Otherwise, remove it. + (when (or (has-diff-item? (key x)) + (has-diff-item? (val x))) + x) + + (map? x) + x + + (coll? x) + (into (empty x) (filter has-diff-item?) x) + + :else + x)) + diff)] + (cond + (coll? y) y + :else nil))) diff --git a/test/lambdaisland/deep_diff2/manipulate_test.cljc b/test/lambdaisland/deep_diff2/minimize_test.cljc similarity index 72% rename from test/lambdaisland/deep_diff2/manipulate_test.cljc rename to test/lambdaisland/deep_diff2/minimize_test.cljc index b8adf9f..5982f70 100644 --- a/test/lambdaisland/deep_diff2/manipulate_test.cljc +++ b/test/lambdaisland/deep_diff2/minimize_test.cljc @@ -1,15 +1,14 @@ -(ns lambdaisland.deep-diff2.manipulate-test +(ns lambdaisland.deep-diff2.minimize-test (:require [clojure.test :refer [deftest testing is are]] [lambdaisland.deep-diff2.diff-test :as diff-test] [clojure.test.check.clojure-test :refer [defspec]] [clojure.test.check.generators :as gen] [clojure.test.check.properties :as prop] [lambdaisland.deep-diff2.diff-impl :as diff] - [lambdaisland.deep-diff2.manipulate :as manipulate] [lambdaisland.deep-diff2 :as ddiff])) (deftest basic-strip-test - (testing "diff without remove-unchanged" + (testing "diff without minimize" (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] (is (= (ddiff/diff x y) @@ -18,62 +17,62 @@ :d {:e (diff/->Mismatch 1 15)} :g [:e [:k 14 :g 15]] (diff/->Insertion :c) 3})))) - (testing "diff with remove-unchanged" + (testing "diff with minimize" (let [x {:a 1 :b 2 :d {:e 1} :g [:e [:k 14 :g 15]]} y {:a 1 :c 3 :d {:e 15} :g [:e [:k 14 :g 15]]}] - (is (= (manipulate/remove-unchanged (ddiff/diff x y)) + (is (= (ddiff/minimize (ddiff/diff x y)) {(diff/->Deletion :b) 2 :d {:e (diff/->Mismatch 1 15)} (diff/->Insertion :c) 3}))))) -(deftest remove-unchanged-on-diff-test +(deftest minimize-on-diff-test (testing "diffing atoms" (testing "when different" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff :a :b)) (diff/->Mismatch :a :b)))) (testing "when equal" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff :a :a)) nil)))) (testing "diffing collections" (testing "when different collection types" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff [:a :b] #{:a :b})) (diff/->Mismatch [:a :b] #{:a :b})))) (testing "when equal with clojure set" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff #{:a :b} #{:a :b})) #{}))) (testing "when different with clojure set" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff #{:a :b :c} #{:a :b :d})) #{(diff/->Insertion :d) (diff/->Deletion :c)}))) (testing "when equal with clojure vector" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff [:a :b] [:a :b])) []))) (testing "when equal with clojure hashmap" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff {:a 1} {:a 1})) {}))) (testing "when equal with clojure nesting vector" - (is (= (manipulate/remove-unchanged + (is (= (ddiff/minimize (ddiff/diff [:a [:b :c :d]] [:a [:b :c :d]])) []))))) -;; "diff itself and remove-unchanged yields empty" +;; "diff itself and minimize yields empty" (defspec diff-itself 100 (prop/for-all [x diff-test/gen-any-except-NaN] (if (coll? x) - (= (manipulate/remove-unchanged (ddiff/diff x x)) + (= (ddiff/minimize (ddiff/diff x x)) (empty x)) - (nil? (manipulate/remove-unchanged (ddiff/diff x x)))))) + (nil? (ddiff/minimize (ddiff/diff x x)))))) diff --git a/tests.edn b/tests.edn index 58bf3fb..edd4abc 100644 --- a/tests.edn +++ b/tests.edn @@ -1,4 +1,6 @@ #kaocha/v1 {:tests [{:id :clj} {:id :cljs - :type :kaocha.type/cljs}]} + :type :kaocha.type/cljs}] + :kaocha/bindings {kaocha.stacktrace/*stacktrace-filters* []} + } From 6dcdae64622b80024a112e55d7442632fcb841bc Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 30 Mar 2023 12:11:32 -0400 Subject: [PATCH 126/158] # 2.8.190 (2023-03-30 / 34d5e17) ## Added - Enable print tests in babashka - Add a `lambdaisland.deep-diff2/minimize` function, which removes any items that haven't changed from the diff. ## Fixed ## Changed --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index e6b7b62..af65e02 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.7 \ No newline at end of file +2.8 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 01af062..282eeb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.8.190 (2023-03-30 / 34d5e17) ## Added @@ -148,4 +148,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 103a8ae..08bd561 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.7.169"} +lambdaisland/deep-diff2 {:mvn/version "2.8.190"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.7.169"] +[lambdaisland/deep-diff2 "2.8.190"] ``` ## Use From c87d9db854e2999053af6ece909136dcac000804 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 30 Mar 2023 12:11:53 -0400 Subject: [PATCH 127/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 282eeb0..f1e5463 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.8.190 (2023-03-30 / 34d5e17) ## Added diff --git a/pom.xml b/pom.xml index 90a56dd..4ddcb65 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.7.169 + 2.8.190 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 312c86cd1c220d688c26c538bfc68ce0a0e863cd + 6dcdae64622b80024a112e55d7442632fcb841bc @@ -76,7 +76,7 @@ - 312c86cd1c220d688c26c538bfc68ce0a0e863cd + 6dcdae64622b80024a112e55d7442632fcb841bc From 41bdb40c3b102d6c716fa4f9ac8cb66d71b0ed79 Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Fri, 14 Apr 2023 18:16:14 +0800 Subject: [PATCH 128/158] add color-scheme.png --- color-scheme.png | Bin 0 -> 172559 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 color-scheme.png diff --git a/color-scheme.png b/color-scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd9f30c2b52b5bbc61398cb42c5d72433d12fad GIT binary patch literal 172559 zcmZU)2Ut@}w*X3&-V{Mqe$Vr zrB5v$dc+^2uS*tr(SfgEB1MaGJp2{)#E>~lCu0ny*0$KICMet8Hv#1jE$2Rkmf-qM z*KlhCNKo+*CA~h-{>WB%FB|dv&&DwAi19pn?t1m?zu? z>Sd|N0_h#P%kt3*FQN1&8CwpNf0jO6i3)M`ni~o(Pk2Z6G?Hwue=wddWu3}>-S07` zz3yQKR^17o%n0`m#tuCQ!iU~En<;k=wh#WMz8)bm57&mV<;VDaWId_94i~oS%TnKd zZOL48B~Eyyo$~s4_lVY+sqcXTrcKP)<&6q&up%{;7&FPnEi!k`w`3KeA1X@=ndW+5 zgp*Lks9jhfe?ciN!*4n!5IJsjn;M9WVLEu(eb)c{>;uVxUG%-PQQlAe&*>fuRJ2}- z@mIUj6LxxWQe?5LhGPH9&2VJUdP`pvX07GM4tR=Z#%0^9UwhE1`%-0i^rcvASO>`? zYN;5Ph^=K%je3+F>#Gh6x`-K;lj7;A2}YWX*kAs=YCNrhWneMldWjkoaBK7ZaqH^ej-Hb@D=*U(<1py%nBe}#TGZlJe&HJ>Y+ck!ek?kqBUXVSfBD3R zGI{}{z>az~*qX6mj(yt5;@w@kz_gFRbA{k& zSM3B(li_AEA{MOP`rJZsH&J)=TtB@3IP#ZGEHpsi}P|m&E+F*e=bxis4#!_)!)3x zoXZ?q)O=T<=w5-;=(WPjU(E}4EE@{O@{KKO?m8Fx|6VV!EP~uY=fXayja0GQ`@?BK#Yl@4CS6if8yc?4! zHZDeZ8hNtsQ0)Af8lBRqY6y_zG2p2-P8_(I9ilWI085bMZsl%;lm}_H$Mg%#Z6*Fb z9$DQ=-`pK*`hwF-Dq%0kD6Ua2)!WN~m3S9His44cCg3`uIpw}UleV8udg6@yK{ct{ zLw9Be$&rVZYSFEsxheK#xjjC`i+b%a0UiN(o>-o_c6a>q1lKND7um9TS8>J59Gpk4>i&&k{r3`*Xj%n6`Mcc=x_paY%9g{qg&DRad7ZJt{oM zCLdI2dD?hNdlq>@r*fZqJtb=hcxsbJou{HrqcfUVZ(sUo@H@1uvfNjft{jI`y<@RkcXytQzT4zpQ5mnBJWGqq zrki(c>Nm2?+)@~iD)B6_o1K~M@M7?4+Fjc%+?Cyxzj8lbr0ZhWJ*MzzboYZK0bYpe ztjeM4=`&!}aW8GBs(owHs;C@aZruetkUL%r@;=x-$;Ev-_c;11t$T)Hmw7R=LOilL6bn?bD&j+#UNH_T~2G_Dt=b?VXF_%R|1o%NB_ZT=pzi z<6T}+q-^)3rJR2J_VJ50PvSLg9W6^8cr3>yY0))9G4ZE<+ldo_zJPE4(r$-!x53i% z#orh2T->}kCwxILUHEAdL=|y@rPDjt3;(qC_>Q0Y!PrU|P1q$1lMOvzqw9KguwQOV zN3rYI{+RT=d-9}W>hZt|p)m4y$8VlOJB5_@_XloqDi>cXM)fb1EH*EkVJtAu&*t!c zz{r!mqk|)7jyVod>F3fR(xNwU6k=*=3+5KOV=up*PNqywS5Wz1^nbd3WA)1#??pG- z%BUT)_%DX2VWEmkX)*Qr&y8(VtL(V1&1FWf82xY`7!QXZ@LY87g}$bugi(%CLcRzY zPQz^+>V2Mf(@%56Ije}%-@tobgQY50dZzb&JFDdV;WRKOL-j6IF5k0ca%QPc^)P(h z6J_!ar3#+%cYi$iSVMP_{W~ic+n^}o$Y39OEc8`q=`|N!6PuS+B=n-#=7a6Vpq(Y} z&yB-}j){(!9qrP6GTws$KT6Zkj1oq6Q*}Q)C(lMX zkoF7h431ndPgak{y6Zt^4#ke1olZ+@;Xh5P1w9lGxt43{i_fk5s}Zx;X2zOSonE}i zeql4q7{SxO`Rln}$lk!4?2M1kUVox#;$;Yzhqwoi zf`rmsApdelUUjc$pm8GnS(R#i)8XBT!pi&zW0Xp}%ELNWxme8?IUT zXY#1ozPjVhr>#4KforouGvZD8h|;CzR>BnA1DKfI84Ed5Yl%pVE@#?PS%N*sDC}V} za+ZXD3tu)#K#i&TKY#j3zTkBDkY@0OZH#U3uIQQB@?d7h7?cUWdTOZyVu2jXCCiA? zjK*ItDtC(er>nyX!f<)iP@mnqF5D7S+hg+Ec z$v|@A5!MYYC`~83#dAf~BFC`dU;D2XXjVuX=${Wq;mDndg3Pd*t5 zNwg~o#eeD;6W@QIWMcf==HEB@>z5={#IK9Q81#Yce`-_1K9K)Un)EKQj6}^$Lr;(R zHgoWEboBCf@qPlN3W3B78Xw(z{v;%9LVqKv-W|bxV*lf=cdedS85t@$cza6NKlXm) zC=ul8^S2)ol^`Wz($n#YJztQghnK%nkShN_HI#_yzu8cJzJIDbaaZNHGP=#D;qB+h zCnq5(A;}M;<>TX1@q6r~bVpPBKh23>s{Afbp7vn=8Qp?^!DQWBET|MpF6s`58i>9%W-qsKi>S5G3$h-1K{Wh7PpssH~g z`QH)$PfM%+ZFy5l>i^aB{}layo0|JO`e}H3632W3```Wg&$$1$@IMVzpnsSCe?ajs zod3xs0vblE0{!o%!DyedF-H;ik=s?%l??#-~W~7CRt!qj| zd^e@m{4+gQ1^PQczh*TxK5uZp z#?{9DQfA3a+M|LnI+xdX+%CcQ7Yfp7dTz8z&lyF%%9bQIc}*%I;TimThN0B@LXb*X zFt;zw6~j;gYzJx|dVUGi18&Lb1DUqEqj7&|=3WCSKpMe5IAxzAUYOIg@qk?AfkX^J z)^kc`{FAGhXz923L?)jnj%3sr)JhUDm}vAtCXp53W6%wVI#j>r>@p|W3nUXhV^C{$ zSE(N(vE{bc_+nF{q=8g|5YFHvV;lN+RgOrFd^fy(b!Vw3-hB8=fasC9?t7jGoZOcr z2Rg(Dp5Zp=CFS%;kIbnf7k-5aOh%+GV^@(XH3va$tgHF$5$wXfAuojLx`V?}3NJ~L zS`zm6Ft;*U2w`d+NXmoArOwF2m89;7mC_@oj>seLHfmO;3U~~qK~*{0HrV%-b#bSg z*U9#zSE`YmR5#ThyZ-@ufp zga1Uj0hWjJnc&!YDr#^9YrX89fTr8Io`8-erB|u~Rx!7uF@ZES_4_@`4RUVMcZYex zP6@v<4Cbj0o%u@gG$Av7T)PvjbxrN3`o0U}(RyKW)MceC&yogT>%hpNcq4EEZgjZt zWq}U-h<@Yhvy_T8InX)CsMk4VsLXrnA7+sd`0tuAdDq=(e6kXhy|3RPd-l#GKHX7Q0k)(0%4dKtTt5@cFy^ZfvTp~Ad1l{p@7*rQp zM&d7g=^lT;0Gg*^Yx9l%&%LzO4oxzVAA^VR#I<>d zkH5VA=c=%H8}p?>_Fa5l5|&w+HCcp)=X#zIQd;GesE&koT4Nsl-1REaxjdxro#ZqN zEZh8by}282Z`0qRu)|XI2F)=OQm&J`v--XM2T{hkWj`Z7A+HKwzwU_aArh18xapU? zoJbP#D2u!#r1x|-2l_W zq)eoYCDXs@(o7`KIfxdvw(+6uDDuu?UUuo0+xYm4NxEB%XU0IBH}lrMi$g_Ya94C^ z>P`aPIxU?I!^Z{o!pp0Yf;+Zv!!HGAGPS`s)QQ-TipLzJt6Lth`e*)hWqr{Y%!s~98*niwvCN?P`9{BU6V#OZs&_y>-JokVGo)P=Gmr9 z4^_r%w(#Szr|s@1alt2)YPDr=S1k0yO~Ay3OKNRs25mLt%OBy(SCnHwK_nknZSd7I zQGx)0u22NmzD@ZrDRal?V%YDJUC88yvkLw_U28$ZF=QPd&Zs0`t=Z|ae4+toE7s7B zzklOX*HDt(x1JTA)%=Jjf&E1d;h$(%BA82u80LJ!gI8kL>|{VPrJ?iEHAs5sS;lL* z;_170BNKj&^j^ImbcJH6n@*mQTwix29lucEQ)ZRZ+>bL{yikgT(O+ZyZu;Rm!;GA7 zEcAq8{*%_rn~$`y?1Wh2%tZvR#t0$*;)JW^+e||QfkIrIeiCx++K(^%FnR;0mcJb5 zIuYnh31}H2b+A5U%0&LcUlQa0J3W@X$UA?J-@QZdii8H=0et;|Ea-(DI%jfGJ1p&D z%|!m)0hH&XG`F^k>u>OV@oT7z?`MH=*cMxvGh3fWAz3^R`EV`}J!3bDxia}PjiRt` zEW3*t_ayr??`m1sN{hF3U;XSzjR+s5W+Bz2!S&p;aDRfxq(?M7B~7!wWCw z&ZQ9*x~mkyO4>mmPA#J?mEZZ@5%ZT@yE>J9NIV~4Q) zqHi^0lQm_4VQk!!1-nM#ZNwX!soOnFG&{&=R>$2n4Ckg zRj;kzrArWy3fLo;16M`tQR%`+G$aim&+w|Abn>cO%?R{g9|$OIKFM4`e*FCjY+O6l zc|@*vZg-Njjs7iXtQl34oN)&y-$Oj?w^SsemLbQ;k5@avk4Ox94J8YfoI!sgT>&VE zkPE?RE9pLR^t^Hm!Umj2Bw)fgCFEgX}ztHwTO@3cozd3S`yCH`0 z?%V`l2`g6zM%BRnO@D?04XprFWvO(5oCkdiUs^Rb@wV=X?e^hkjK4UaAOubJEJ^!tQSr}wPrL@+E0(mc@yu+$t89AU z`S5Hycy+Br1IL&H6G381+g@b96GPy30%zFm@PibGrKUh2)`)7n@t(iD|C-_HfdLfy zlu)U7j_6$b(Ejd2dxlyx!whIp1ndmi`|smk<;*h--U^UC(dkd$s-+nWH{sF>rhO;% z;%QrcP|cl>)FrLJb=SK~7PhXA;{~Py{@iaF&JGV}6a&)XE7NI~iGA-9{G0|0S%B~p z`0Cgj_WWA5qUy4>)6LO-RqR3p@8v2NFuYCvR-w_mEz(x+eSjSZBmITy9pFBlY|30g zVIfv@_2g(ykcSkC7@Xi7>!j!k2ynFvfB8gk0Wj=vkh(isZu`r(>5Gr5A#-aqjJEsF*5t`k2KSvW z$)zW;*G5IZ7inpw@4cv`Xhq`_-cqMpq5Pw5Yl6J(=DDA*TPbbxRY%_iG({X&&D`^% zY5QoNZ{1x4NK}$5&)B=-4^;tvzJdR(_noTB{Sd{}=Fwc7TVVS&k+TYHmZKny& zpZC|b&Pp!=-)p`!e33%?LnIv5D9Gzh_QvXHVFZ~)vz1fAN{U4`q0%kRd{(NPcZ+cX ziL5!9a&PEL;1a$?7~H9uT|3VS^h&_m1yr%^zIC`gfDp-dEcf#Y3>n<9{!FL>o^RD9 z@+j9Q$WQeYPk&9zl5%+Y;?L)d?Y#&lcmWHd46F~>T6@XJ1Tar1#vIBP;FW`3yxsrj!u1L-Al{>)ars20J0Nn;L! zg6zYHD!X}nM!C{82|-YZ7gwuE9p?Svj~NPRmd%#=mFuPkf!-fg@| zR*p4w_MnKo2>NCjf6b-|SX5H~^~L$0eDNs?>-JJS)5h}!{#3M1D`s(+liQhW&v`nZuf!dSfUc-GY!6D7koYdGwc^6iju$ zg*?@(P!-6Mwfm)d&?8V{lqKhz!S;UMcb#YVedS=G1@J9qLq;~;zniCIPjUTmqG&AM zyV1}gaLP5m&dfx$>h*|LK~Hwz+@JFkRd&XQhlf9GV*&kz;~qQ_9gCZQl~j}Zyd>Dv zK!OE%in!Xjvo8j{?d|fqQv?}>B#O*6*lh>~g*Cwwr6mI8;kz#X)mGaS>naG+1-Kl+ zlBn~V_2sq3Z(exzgTorX3~JC|6Q6WGKO+6-{t?*!02#ZQMpV&Ck4(a7TnYjP*wZ5=!f(?%MWz5L}uqb&fGsLF}G2zM~H%RzPrhR(J# zq`R&wP@wB?SIct{{CO$Cj3}h`3+yQx+?lHObkBa$dD*hoy`=8ij>j>alCe-xOYcVL zwk^*Fd=D#mIgzPQp(q?Al06}hgtEF;rfAjEseYcxyl9&_pJj%D=85jhlRkQj=oA5+ zPb`ohn8nF;&bxqNd&Y@T9(1RUne*`*y~-Q=Xvqy^)A4wX%MCb)ujEpG`VB|K_~IHi z%HWrigCm2sA5gqu2xh4cZU|=?A@;fCbDQ4>$nzt0od{ZmMloZ8z`SjhR?Wp$C5)y7c2Ipm&d4L!f^HhZU}eBxO9Fv&9GrewL^nM~mk!a8Oa1fiVucB!No3yypE79R zdH!qeM84_x?c;v^huHNytgXs25?3Cj^tRu?OurI$+|QEt-c7gmQaoK{w*&a62epQ_ zO3`!Yv2>O6?cnja-Lx#zCK#my4x;yi*)aBYn!!QYiA*_gy!Q^ablRR;71j~WyKcb_ z#DyFjzivn7eJqx!KW(vKA2beqUtohv9qo_QmZrBDM<~HMtm%g^Vb@<|5r%yB@0~-n zfTzkbbT*KUe2F7V2p(E;V)+V7B3`R-Ogy;rViV6D5SyWuM?>=;TaeB3qGh9<9~aQp zUS|!{ju|$F)%2V)Jx|<2wozzM)o#Gf^b5352_Ukeo!On5c}9V`^^ncN{26mgn^hQo zUt_#JzIj=>^Z$cS0%$16n1YBH(k6HzGtH~iIqk_l=OR-8Mfug5&^tI@SwxwX~QEr1TXV6cE( zLbaG7z23KJ+?;e}@^M82;Ws*)OWJ7GNnCyW7$pz+9wFA+$YBQ8s59iSA?NRx5g=~9 zp{TTZDxu@i9=`4nVTy&=+s)ykl9hLBXR}B0y@&0#WsZ^hXqxLd8gG-;fX^U%4(hEU zjEFGW!F=Ao(})a4S!UKhn{J%E%&7Nu7t)uwpA(x)_dEjBUP(WA+h|pLB>&es^j*)4 zmfzCCVy&-#ot*dK0@4O!a!=c@z#Y6a0aXKdo=@0+KwW(qw}5S-d(@b_Z}MI|@dT#} zxrcUUfv_b3S%6b6xv|z#492|^ZF-r;o#hnyxrcLR*q&v79@`BG+?lF!i1-=1KVkwu zjyLZwbCkILdAokK(BHu;N*_!+(k$gWti6M;UyJ5}S{?Re>5?BV<3Bq9Se zMIGFN)C28y_EAn=<2Hc-T;7d(H_z;r=7N?3&&kmhV zw*N}?MBs~UfL|B(zK&$h`a_?{Y>!prjB6XZbgH8 zMCnVA$j7d#w^w?h2`8Q7KY3=Sz0o_n4SO)1b0^4d)9D=BO@MfWDnd5zdFh4$+6gf= z^&6!1S=-eUkLYTCR!`R&wVc9(LDh3aeFOU{0^A9dJ($1QFBSot|5@dYe&=4JrY!Hg z%dL=Z7!Ww`UxPcD_P!eJXKf=17|9+upUyVaR(tl%aJs8$2WKpP|E+17gaBhF02jDl?bfaHp7Lz087Vbt zTE8E{T19C!8%o9iV7WCpGnyo7R~jJ0s%={g*o zET4ZXv4bqcksiG_@ixqMJ24bPUJ(kHOU+mml90$pg1~M!q)ye?{yF(hcBUo+?ZIE6 z`vN?mES`$zNpjY~Qrs7gwyX}&V%lS8mon!q48$Y7xE@Ha{u!j8vpl+l&uFpzK&a}w zQDg6V+ z*Pz<4F8J&n-#-Q@u1{p&1vMXQB*MuBiEatV)Z^Fazd`MWKA;ckf_*>%g78dj4UG7d zLOAX(Lo;J?87y`yV`HTpx@wKHmF~fR-CG>Bv||WiBUse-rshBNeZtUCL&|2f_A}f4 zQ28=`M$tEBIl;EcxZ4goJ$Cg5pX%pj(rh{eHrMBB=q|;Bw~Xdn6Xkgg+ZFw^Y?p@B zecH5s+vaDlHJ|NHlVK4{KkI^);E287BgO$m-x^;vV3*=-^0X6{be=Y|umw5|=43aR zd(JtIL9uka^1G;lZlUUl_uk0&NkKNZu@AmKoNzz% zqti7G{oYO1D_|vJf6ig&9hfKPS)1|+lf^ot|?;po4{?I+YE`}06 zA|R(+o4$TVMXSL>)Zp;fh_9{4?!<;r#05(Oczzh7R-ub^Vg0tlAe$Uer~93#rCCqn z_?OzZtUeSo1uMbmIXJxoTBF>dZim>xQ!rLI$0f*X?1yrLAVU>IiPd*;f5v~XD(X)# z4)Pp(wdPs$PagCm;HYwNCf(;Q^`Cqc!VlN>jwnOywLHRRE>?@b$$1sB0^v|*>vTMb zwqrb`d-TQ3SaC9&26hiJpnIknU4&TAc4lM_b}IgH3_jmVt3%^gIcv_=vexb7bH2>v z8oCaDidBV*I&@I&sibuy1F(zZXQwke80kQu@#DdIL5|L3xbx>%g7Pn!AiEcsc;CYY z+D#x6G^?8sOyK=dzhnEJ(dKs#iVMMe9&^49!)Wuj_l(U^{(0BRl?JS;=FU{rR%G6R5)V%l-UA zeE$MAS&=gm!Su|%4QaEo_k63EN(paZss~Jz^1-!$Ajm#$q5r~VkL!1gColCvs-qYw%|9=;M{}UY zeuEAWF6%dlq8k~fd$r4ql~F;wQ{YD4@%44%HzVEpGz1gjv12|RXLa7as#9C9wIsOt zFu08tMg_lK@U$)xU+lS<+qH|+a0JkpF0NVL7u)tpdRvyZ&x8hwzMxe=ov3M77o_JR zm*eURn&`m^1N2N7#F4tYRaKxCxRG?D3&KjW1h!$kbA!K$A%(zrmkwmz8GA3>+g~3r z0QErmZL9&&LIU65UFViIU;Mgw}t&XJ`>RPB#E8apJ63WKn#>BaAXcJt;k_ zJ6>WFd+YLmlq~WdruUL?gDi7zSS;PRf0^Vi+E-tR-O_g>q(6q7y_QSfi(6vnw2o%5 zPT)DW{r8vNxPwTf!MnM9rdK$7 z+rr8|>L@@W(gsO5PNd6)JETY$;x8fMk(`!7wTmcW&toftz8fC!D8{RoDhsKvA<9WE zpThllUM8PvyoRDtFBn7oDbBy7?{~-7)g>cr!v#%Jg(+ z8hCZYaKXnT>9C^_0=0WCY2}Z5xWINY8_$jPkfA{^46)JCe)7onX$n!G?r751vTH=9R|^TOBf zo0Lji8Nr-rU>Rt7i2eAs#qk?TsEY9qbcJ>SwwnXbEz+bB2u z%G3G0Q@SZQmVX976#4yce>@~{E%^Ed^T(lQNh)m*c_H;9q4oY475J06_=`3I8oqvZ zc!?^N0$_=GeuoFe$R)=;;OKMvs~QM9-^lZ-{3%yNE2OnIkHGPiK;Ne=oxl%tRr^}U z?uHCrMUiG`oujT?qvs_9S-@yWdasDK`lA)zLA&j$&7CBNB-JjPpv9=MlJ4^2ZV2G> zAbSz23tDy}16%lRQhKl2=_u3CP*?o~`Z;17nSgwa zfvA@WrvON7RoJT2TOFr@UXUP`OKq*VFPG@!Zo)(T%wq@U6F@R%;YMtd?HZk z{Y`Cff$OE;pfT+1G4B3*tzoGSHW@b>q~UrKRUdl4_6HZ=U502 zHo89iv~cFN^1k-I`)CicsGDhb3*T*Rv)#Z{UEgvdE;i2?5Q?&^<<;$u{`B_iIa)9E zOG{^eVxofKCy+&cc4h9_p3Uj>Jbp|{OsR(JAwR^UX101_cq#6aTQh+Pe!$#TfGePd zHY-rt8QRfKmZOwUCg2k8J~q20d)}leV8@qQRYp@S6pFQ^MMR-bYUcFr)GK}v4KI zhTCA47pHyjN!C1TcTzrNtaCitlUw?^;ihD#pVPp5SGxo_;b=rV5TDr?xHnfg!o9kr zC!8I_PkXk9Kg5~u1}dZlpG@XYbWsx!jOQWCeFWP?YB~=Va5NIEB|O7+=nWw~=FZkp zc7?F^@*v>)7P*oN)sr4^fu*|^Ydk(=&$01-+ZaqzLx8oG-}X%N?&l2KljmhrM-TU` zm~34trfV)x3WoeZ^ks~&r#!Gl^lpvt&c3LfD_3bGS-th8QX&kP02FT0ZFTE%TH5*w z@v9lV}uTEKC0Jr}U`#CZ@U`($XvHx=Hr_c7ikmJ!<+U|mjc8D{f zK3$RpTbh-5;h49}0v?YK@>i9_i@7V!l9NJMxG&rrV7CjV;m)s8qq{vIjH>r;CUl*0 z%q^O!w8Rct(u1NhHm!t1R8pNq@qOtUMK{|B7sV4^?}gD?&@4s|7uaDTTQlb;>K}g1 z&d-Kv^S&_FcNY6`bdtRMrhE9_AuhcWpOKH0E3m>*&I@GKvH*WCF*!us?y93`4WSHd zIyTCC%|@{%KeM7&2R&g4=T5KVxPstq{@rxY*YCBOW?5Y!*9u#bb{=R`gr}_(Ukp4O z>gUn$I;`vl0%PIKsr2AYm*vihc_pbtO;oltFfrY?Vn6on-7X%1d>S~vby}0SnDH@w2w1;n z7`hx`7o=}jvf68ltsoc$_j1?FUwdT*+n;BoYoVtZ=*(3xdb=;i%_PwVoa}u#;Q*fL z%Y51S&cy+Y;IyW^p$9FoUnvk9$Tk=xu3Y%NPq_Iq)Y5LXq;b@* z@xuzcn84ld*R3f?2lC!;Imxvdi@$hE>*BqdcJut5?4dABw*KK*Ka`5_kd8IybSp52 zOCHg9HR_0cYX11cTSPM{VSA|=x2P;C{2jzzGSU4*R9%UA6{%@@=W#f++>Z0~BW&kJ z(z95xrjrZVhQ;i7ubAJau8Z|AfqD9A8Wp7zmKIT8kg$TT7VjKi zkY0MTWB2r3m)A_KZ{p(lyV{A9-ycvT5lH|I682_OK|r1jFyKLRGUBFE ztG%0!^a=XK9whs_R6{6Ji_}FRfxEc;H;OnjXkB1Kv_oI454ElZT%T!@i?cG2~Pd z)rYCvhzY=v)3R%D#6)$~-ux=^HtU^OW$cHD)a3nvDgQ}k^r)8kLH86BG|RG;T~sSr z>M;ME2vaR4etGpPMk`90DUoCuP%OCxP-4S?2z-*j(GbR-q`JN!7Lf0>+$6sUw6)uj&H_ zdk^~AJN+p)c{k8s0r_C*M`^H^a`~)D?agT5lOC-H%%0zE=F=D>G`J>Ir<)d34;IJ4R zd>%O2xk|;n8vci901LI&zq;4LdhEK-Urk&i;nK*K`C3qPU1D<_bPeWIyqO%YUzbOiKPf z(vSlS&(NRUfl@)uU=clwOH0Yi)jotxcWq%S-h~-dKF3P7$}|4z`WW_-^(lYex2Z3? zimW26*)5y ze*|87r%DI4og9j8nR~MIuj}66yutm-0I8vf|N3O9V;!@4(*X0s>D}8f8gwpUdao=Z zM2Ne2W6eQ=q;l5s;k?HSp>g0l?~nMEayn-w6_GI@a~~1$7}97Lrc(*4b@8TtOSbo25)pxeGzi9G3`w2HKtK6%jt zSXtx!aje?VtJy(R>|?yQJt@pyU}uRoPh;H{}*1mOx{-b$BL@M0c{eoIT1n&fYHa9$T+>FRhAUZXDckhJg@% zLBS9ue!t*-Yk?!tSKy1irfGuLR`I<^O#eIx1S+rFn`>GGahQs|wG!6;hMi|e<>}`@ z)IsTrpF}mz<19!-^w4faN zDOL4C2C$rmoGKKNNPpzdwh@h0d!+Ghe~SmAH1#>@ra#MWo)8Nt^+n+(PCOp3HqUj4m+w4ZuQhwPwb!&V6ZC#)y?%75r+t^}veTH!5edM6DgTurQMm z>Z55G7!$Q>I`FC2?1M>!%FM*iNSGt-4n)x{^6y29*@nZCh6kw1!D@eAs|!hQkf-o{ zrkYMRbQRH>?<@US-35gCJgnHDRK!N6aX zTVQsddwG8U$}zl@93T(ge7=cKzLK&I0fUm$)TQ0?kz+Q_Hu7Nu&boU|r#aIBH8!G) za43>I7#OQ2bWrveiUJP6V2vG7m-}VcX0{-PeCfc0g|nQm46JI zb~`&vy%2p{)TSHQ`;WG#Lo~&dK1nCt)cp63SyeWeLb&`5nn1j;_?k@yOhF+*p`S#1 zPVVImR{fmcuTWA})Y~1UQ7IeP7OiS#eZ`eUY3tg=>iW0R-i&MMb!CwqG}5ec+eB8- zjN9o}ev2#hS;lC=Kv^v?t^OmXF-qMs>lF<5N*s=-sU`!e2V?ZO(=XdqzP;!KK zso+lRbkcAezCpHzo6i00#F7#ol9E>S#vQ)v8y6NQQQsr$y~~cO<(vEL&t4>8=cOsOL?%jyF!1ODyXttCVG3UE>*(0E}Q3{v@daFmZRus%A!0}eSFd`F| z3O-(5z6GB+i99+aZN?gp!M}Eb^In{;M=dwW2+S|$I*f*5pC)k2_7!Jo9`ZFc5l*Iq zJ5zsr+(mwuy}G5;3f~?QSt398U_LLoLdcJ)WIIUy1rd;uG*m{O)wI!yKD18J7}gr7 z9B69;W&_!W=G&Q6x0O8RT0;`Wc{h3<@`Q6sfzmVh#=4bq+CW#3^m@p`g??muvhBouKe1l{gKT6@(+h1d+L*HYJT^~Yi1-_h6G8ql#j z&R5i57k;B>frR3$fR!_3r;})XdW%Wr=Dz=+jmS@^q(w9mVIQ)Z2E+xuT!n-~dk+tw zOsJTovv9hTYnGRq9|}f>g7tkUujl~LC&3?<>8Z=F0I}td@HOGTObmvMrSniAKi@3ewO1ICTwOFly5FxaewoB7Ex!sDS5MFq5NM)r3b$7` zFtL_*1;~;soY`CT(HHP?k3ffcQp=ZU4{d8#gU znctkYVwldo2aThYHGFlazzZ`V?oa7n-MYQO>s0J3oGA9_=DsW6dzwo*23u|%n?4hl zSl)cO%1^!ZeU;6+t(E^z;K7S^8`C?E!17br$d@M9LF%u>zY`cE;!=mI9}$o}SDys$ z2P*|Da6>Nm8)SaxxK1$72O&Bg(NB}Z4B0S?2AXwxm-HRr2ULW++4#bhTVdkTx?aas z@RQat{TZk34RZ6^H$_-rM5CR(*yq!au)#6VDzA4iCHaf^EoGQj7DEe2*8&dO+5! zkMPnZw;}Wr`pu&bq9RpkEri_kM&{25o{66I+s7Q4R4v>6nZNr;7t|*Pb?-i+H$V3b z9aRg&KeNuvGb9oYo8f)C;d&!3tl*Gx)WuH}xNvr_0L+c*8)Z5)7sD4*0)yZ7YZ(dB z<}QfWQL-VlAGUtcieozwg9V4tyfA(v{psA=>M`Sf?1sWDqI)ONZg)(G2Z3Fr&IcPg zhR6I1Wa1oWhcq=`Y-B6Jh#m>mT@&Y=dqTnP(D`_D8knSdVinj00XNdSA2EzH_ylioE5as>xH-uX5V2q%OiHZXN2acfjVe!g zjs72Mos0huTkjoD_5a5I8`x5S+6aL%WJzcE6c{Y3r5)gYqrNl6$kfwL5Y={OWyPmmHQ6vPi+`}&(6o07rAR1`KT+qR(JJT_o;ug{@mw`I` zV66V4>EYJYRED;Vo_;M;Yz;|q)pL0Rcw9O0vz~D|9_ci}=7G6+3#=QxnH#nV_6@2k z>@h@?#CmDb3OapHq~r;FTc6PidW^C^mSHnJOZv#xp7edImSIJ*6sN{1&^oh>k$@`Q zkLeRhd+5x=6Q#IPkXpbGzvKB6KGX;yK^GuZSNWA9;brRcXD>4!UF2!%vre1{=72F! z!#2lnnZlx>YClU__(JMh2dNo^s8H%%Y~5D}ID8Y~ZWZ;ZvfGpHt$6u;G$+~{)<%sciFc20o&%H@odFXi1M47B54@NLEI4jz~W zoJYB+$o3;|k>Dkg*XQu|Y>q)V>s!D?^9i>^>leSVCq-zVagv~2mGDOqsOGGl1PHt_ z;R_qlamPiyUs`-o4y-EDuYr%Tq9~5fLH7D3{BZ7`!*IyuBQF+ysmq=HM=Bo3^Z0!? z?3gUuM)lvA!TR; zoE%3F0{7gy!3AD->@=Y-ms{ox&h)_gZaZkz`Z2|yK(Q!wkw2;I8-tpxK7X?HLDh!m zRTO+2pZ)3j`f&PTkKEjO)ny?lwlzd-5Zk;q&v-`FnX6JZMohEkgEB*Am4nH#Txuc; zjJ_u7#s0YEeXxJZfJ@hW=7asypQ$S>u8u9ROWpLr+03q$&G_)0!rlXO*E}(=@26LZ zP4SOD%l6~K&A#YX^c%V3!xk#WyR$Hx7nNb9zFC(|u`ktgCo`P;fQ#G?6n|SXn9?8- z(w-pv=&^j{?1TU)?h^8!3EOgyWLvgA6a`arri>A=mUt26aSvNzZjB(0NXX>LMi|`w z!)Pm6!o$fw8g-LU!x++tR-7rYss8@!1Dj#Yp7Z-#48T&|ya^Xh6oO=~s*PDiB`D_` zhyeVg4fk93Kg{v`>O;(&HbquVhcF01D-+?Lag)FL^cKVib(G}B^?f({nwMF8TVcEH z_{#47fa-kakg8@*oG8Xi`0AG|AkFUCCBMEOhw1a-C=1fd1c=}HIo)sp^0~R@B~WPe zDMn2x3=|_xFlFrxQoosRu8iT(ZbxY$#SOvt?vHnFHF5P>N9NWOtO7T$rDDy(Tnc%f z&c#4iO(b?F;CNT<+0yCOB7^j^M0^Wgm1uvK$z$>6yQjmpF5+U*@D28(f;Aw5 z12_BSenG6mN5?B>ueSr%5^@*tv#=A2gQpL!krTZ8M{e=ugr-5SScb8`3Ks|;ql877r z#A;wJ`Sj;*zjf5Us0*$y@3{LLFQUwrXFOP4NM>z~F*OZU2;_HYcj9>xWRDKYmZsSC zd0uw^P-gpZTCs*N0pbq@W=l%q?S8bbxk{oEo=ROE?_Tb>e^bsY_K0+id};H(6D@M@qbY;95~vuQeqnr70Nx3%$3YwG zR#y=4gvIh_VCKC)tX%duc6Rv)`Rn?{==Zhll{Sv`tDZj=*~2uB$tY-{=iEU%Ho$|l zeA5XpO;osh`Cal^^sfW4-pGZCn6uL-fRLS%ubaz{T4xkZ2q@pHXCEy`jf6us7LMU~ zxc@=bN^#P(28&b^E$dZf8c;1V<>J;traU3^E#k$>;AvBx}@ z%O#?nON(nqqp8R@+0lEBu*hGSpFgLyRT30Bt;Fe1ciFIpP?LnbGJ;lLrxiU5z!zg~ zULbMktso0du!FMR+zGe#n2@gVXu|`+U#62}JCE-}o2<1?Vx&6uW6^pg_so+gV(uSO zrHlS9qw@mfI%mEYgyG3=4Yt^I`9c{@iYGxrdNTU8O=+39SC- z+zoeWPc?!Cgw-3cA8CYUDA6(Nv9E*ON&FLIB*ejv<}y8xyDxP^vzD$yfuIi}9j&I> z!U+X6gom#LPDS=_kCo*GG2gs0xL`c>_6d=x{rhgCqRAbzO{6jY)nv^m&SCJA@s^of z{i#PtW4AM402Wk5hKu;jxo=e`!~GX8GyNGNkZDSq%N; zTGlC|i{0HjCv{c`9kO!b(S7SG`kTvF4%P)8-BPqpjJy-P^v30-prW)V~Q^O zC36#^iHH0;>rHUNTj}Wma+hT*?_r(dMSj7*9k6Hy>f#UeTz*S|hUEa3zo=IjjKt86_5 z5zwt@d6e@|v#4hHt;b-C@#>~Owe0K418QjrPn$@WElUn{u$)Lf6%+z#A4$_JZCn}1 zo{HkV7kWA6L2_va^5|rm(<~Q@fsxDm0l}c^X%rp5Ou%n}#7*^qIHTm$68)iuym{Ri ze8VnSVC?I1d>(+8qGPS~VcEck>RVaGS1i2Tv;kA?Qvu5#P>NFDCCrF@zdu{ZuQh>Q zA)d+Q*6>PLH2kN6&YKozS72Ozs<&6`$;XfG99aqz&pR0y?)iiZs*=z1 z%!zU_nvOJuv+(BYh>`G$RR!(H4pThlsP|MQxcbMvMbY4Ni{NTOXYbJD8+%l z+G%xKdR8ywcbq33(eVD=i+Cl!mRUm^5rvKE_$X33Fju78$8G-~7Jx!!n0SP*64o;T zQd6Wb3edh#)AYBruD&U5_ zcKpTY$>Y2$1W+wGnQG_mwtRE|7C>&(y>#g6>MEhSF%~|~VT`ZYJkTLd`p?I|#(VZV zH<+69Zu31ct=N&Cf&E!?JOd!lC8`GUt-&J`Px1-pQD4aWJ1ogiHfkAPi;NQ)T zAJ_&=j!6Z@qE(gW@Bv4^xNgSG#b`M@Hx6VxJZjeW8IDbG+qR#`Y!?aY2_{VW4XvRm z1|X7hQDR}00RKSw@L^^U=WFa7Aji7wdZGN9e#dTk-ziz^E!fdQ z^43ar;z3{Xx4PonQR-9!bXKjOLXL>ce%(b?qa*89rwopHN>UTqTIC*ly8Cj9X?o$7 zL+tdr#`&77k|soA?_!HZ=x*X*O2?W?jJ>w{mD=S^X`U-c+n zxejiM<|AI)T>Czg$@Gh;@r=q@xOxj0W!3`9ekGoiGTXIX6% z3#c&O*=<|Tkyog1yE+9_ziz%e+C`m@V|oJ(ToIj+6_3X!rDz>Bu85krwJ>1ebwjNe zC*0S`s2E6Cn_)svWvxHU?8xD`k0PQ%Wb;yDsg|YE1Q|(x^v?=%mlN{hB1882_($Lf8(VQ~M2E_>J==hQm{ z+h#4G1u1#lnB^;?>A+Y1iPVba-fdRuR=I)w6S(E zw@~u`gGLE49}RK1?m`%cx* zRGjO?(d*Sn?#8^8#0Id)(7I=u1iLT*J!`?!=VjvX;;7gL)5q}fVfgg^%-7LZZH9=9 zh*yt&U+!g!iZ@}XzZlAFZ|9UwRSP_tUK5hcw zj!C$AFZX&dcjB0f=Fy+#^H~^d9OgjdA+qd2ubh(2d|SNy#NXsMhLrH39sB4N>_A5b zZT64}Q@P2DIL&+P=dg>$ZeNn>_l$!KAQy3ID}5GMgBM`aJ>Apke-NGgS6-0ykl#qs zM-X;ncU~NP7T?#MaQZsMC|;;RmWnq5M*CaJSYFPapDW&!AqhqnQViy$u+tD3u7~MJ zHky`e5TOge&3R(k?5!Q%Pux-qM*1JaHwr(lBYoc><7YV^Aml;k2yiV0kPIncIrl<- zR9&uN?}>|(X!P^Uts2ICO(EWr@KANhEr7fY^oTlwweKDhC3e8*sDrgstlnp8hd2 z5$?g4j0v{eI-*Xkxv2gSyqqNydK0$%UULgHuw9>?uU~vR3W__=VkL1^ZUjN*dQXN% zLOml1Iu7HQkcf<`f6guKcr)du>Z`hgcUC`UB7{kxF_J zB3=iA_yIF{5jhva$2gr3JE4wy+-Z@J*E~;ecgzoX8G|66AB2PZl($0 z3!cl0RnU7w71|P|+4X^AGwd)1>hZyX8z=)vX$v9RzW5Rc8#DcK_BqjT^fq!hCrPpH zj-PFS16*x5t&w;zE-$M*leR#C0vkY5DeVeIi{+%+=UCR_SOi zuHUhf#RsPGxEnWzdsffV`;9qA^cp|k^c;Um=QniA`f_FB^Baio8+EY+d^SL3NZ+xQ z_d0e4bcj=j>^wQ2EdJ zRYbyBfp+1v$1XcZfTrI>oyDLGJf`paqr4wL4Gg+m9uBN)c zz><7NPQ{=};tKB%zElmw=FyddAS5$9y*^q$9~9?zADo?bosS>P3j7dK8-#@dM#Wcj zk8{v!te2I~-Ps3=1TH~Yo)tq@TYi`c*}ExoG#$p$A0q=0a%10^(nA#+b>`XxJ(r%1 zIlG)i$DRk}JyfCqJi!rAgISc{ExhL0Bphne_Jq5ZRz;j z8VG}sk|!oh4LIr>B6;rvnc*dmp$gSA;o-%<1qDLJbMNbi7VTW|xb?())c?D;GY+=2bbj?fum@;j;ns$6Yr(F^vr`f@U?>9%nce%8e4~l~ z(fq1n>yXX{P~Ibpg>w^oFPB$oioPr}9fjI8c8X({Cm7rN^p(~XvrcS^BCo$oFkU8>&4d3p$0A01O<1xrjT!9b;Pkk($Y%tk6>|bqGwp^255o(({SDJDT_fu z2J1c-J!${+akrSY#He;ye41^p5=-Rx(Y<v1!`hIg@kiU#G@x9GHX^uPlPy?I7j3`>uX0$ zUptN3_p{gPfiVZrhgYkg()sbI4Ai>XT1N3{?lK%RT%DpOY;J$8xoC>&t3JwTUpjm1 zF4Ru#X9cW{^AX3M{V%EOlc~83K2J6lk}XKQhp?)gmEWI}J@qVaaHq`gyM2A1d_zw` zg`SPM{G8YeJO^_iVYAAl()`(W=`};W;D`JoH51#_&HGoDh0aQ)!otS6nN4>IaTRG8 zg6N!uWQZZA56u#SD*Js=e`kXrlkAnlT7y4+RwQ$IuR zJSP=4S8~^VFa;X)U>}6Rjl6OYPkmjlRR0en^_d1*c?7suQA8_d%^XuBUIOjPKVud% zt{m>mddu5=eGCurEFXxb+g?E_FXEeercVyKFE zn(rrK&*SOpf8C$0*8R9pj~sCkC90?^;1#O2SB5vwwR5Zi{!}cMu#Y&yX+w8f^U0J{dAslsgFMojkELeYUh?a2c+Si z;OYI@a3bhdyf?J&(Nxw4N{c+w6+WfCc4o;$JlFRoB-@3duRn@~>LF&V*z317T%U|T z$J6|{N4oIDa=0=QfM{eC2wuKlV)vE4rc05~M+LwCKHT5`zy`U4*j4ztw6wcwr##1FL&=Sd~rZCdR!}7g>^<5F{lb1fKjt{7k69+}An?>LB^~jd>tH1;(Qg@z3~3B%Rj5{L z-sIfD+VTg!`({>@%Q&1$M-kiyY=nfsCnd3E#?1T^NEcU&>@JmrfAFntZ(sVl= z%bC=w3ibbahz!L@R`SX(j@KC0lqj zgkGB}s`~SALa2w#zgO1z;MM`q7Nhj!PXOt~U>{No)*KhI_4O552PiISV%{n&>uWnD z5Hzd>o2DIjz3S;b1Cvxdu>1-nwpekd-CL_##tPf+euGqMRD()^n>^oM?ISJp>iGhX z%&MftGUXy-XiT2^r(gD!)ft6vzrFCtgWaUAugHXNwh{Z*68lqq`^khu<9e`~*v9xb zi>rVxJ)|9VP@U^C`4 zU}5^b^6^A1I@9ms7^{lDi$M3AeI%2kyl_Ma>=fyb?8r8^lm^3<{=O?zF3N+JD~Csm zy9GnAcj8%0g!GbCXaA%A%q=M&n)6?jd6rlE`kTi^LCL1W!kZA%&%PC}Q!5%P$4?Pgj0s#uh!%$Pm#63PYdpeYjuz<6#m?rk#s9cGdI5)5l(Bj=v$7 zzulB-MI6xL_o%UFJ`f(fG8M-kks-vs;~{G@y#~~0<9xp1(x)aP6^a?1upLCjP9^wu zO26mxRdOvazOZY4$f)i$zRQ)JSGUu3mi+n-zhPgoNe%$LwY8E5;Fs56ls3o8u`>Xz|ss-onDfk zw*!N)L0Aft+bb}Y`kEYd_Xe0$y-;J;ev}qfK^6zun0m;DP<*jH8T6E6E|5Qy@OhvP z!s-FD|6RUQ24+;!#U)gexz`0po_z3~BrpaLS6$Fca&DyxDBhUx1~{4Fpw~G}+N2X= zI$|Jmus;lkOgtd2faI0tg>J2F6EjxLs_6$;Ovb#lPn5p$U?4sz1$9rS>WQFD>Ipjd z;0^!N3ypbARkcxpwy)Rer`I|Ue?{s%93x9|l5Jy5yf0UZIvg_+%KTPKzsn1Zv8h{5 zg@kNQ=3ZD~;N<;-1cDF8^3ZY|{IJFa!4=8=yK~o`-FUqs6YPQ`~HIZBF3PBEx?|9WeeGT5(k9$ z18W5pB}w~}@5tcECdis8BL+n=!;1QX)r-`^4+^2UhqtAN%c9ALcv~p`Xe^kS*qRMsD~cc8zhmO_o#BmX*c!QPG8|<8|$?WPCOOvanWl$5LJlDaag> zgq)lUeR*Zn@b}4R^r!lqn3e`v?`urgSiX^{L++8&!bgHJY2)F$hQLw(A=_CqQ+&6| z?Y2|h-4>epZ^(!U?R#g0vouG;XJJWsZs-!t3;pm(;LgIdJ#EK%Y%9WjdS}28`c5R0 zsz8vG`Tm(qUes&afS95?`KHe^))wG(lGhVK1yxy0R^!3In@^X7ax}vV0X$~LqVlY< zn_a+NQ)2t#k>lBUj6|EVkW<|B%Yd7W@ZUuENs?fQ00%(J!2aY);8WFe#ZD|=XhBwQ zg3+~Wgn}$s1^R`&XdV40*eseaUk=bif-+pNzTasG(w3!6%pa25pVFS!sm(}lc|JAo zE8GT^Ym#0?w>l$PfR@k|(>?3&`zXudm+lf^z)dL#P;8pnY@!6e&!xcQ0v1n=!Dzkh zdDwMhc9j28;I&)|*+%;qa|_jxJ2|VM)c;U{a*r$C6i%6f#QfmvH)$bRfU3 zHM`wOx|P#Ift~0B*#`M>IkOd}FjAt&&VunujofF@&OL|h((HtF0y(G_e|sm-M?E#{$cq6WIRPrY5$|H1$cETpWQj#2(ljgVj`p|I`=9|U?JsTy zvw<7~N&z?J9n%9CR?F#+;9fM(7@%bsp7_+AleJ4awpfXSS3HNFu2#9RNfHs%BOB|`uw2by=jeY>#g0$_j2)lbnt%(qNn*O{LoY? zk~-H=+JIS~vlLP4E2Vo8_;+_g*=2$OMW8&;&h9TAiaPq8FfSZ zEg&ZBUla;ew-Z_ij9VDsba1xq@g$hbt+O*5W?XT>#eEz4+>b80w%g8ezr19q$N%}n zn?!llZT62mxpzFe*L)c3|6;Bs9hJFwUcr*$Ut#!Mt^#thBs*}YngHRBL=K=SM*B)B zF#=2tWf=XU4JH7%5eq;7CWvgxK2j`ZVa@|yIhUTBU)I;J9weqMVN`&eBgL=!E#W%5 z$hW{RqVz)eKj2*HUf6)1Q3SUu`HY}`zX#P5{Ir;63p<;hfOk|%d@r#VD`OyeEo^*0 z;n+X#_gDW!vb?dj)$Lh3M4m)IfxQ-YD0se*SE3&Tas+<(56XR#7y$WiJMA?3p%xOz z9}ixV-E2teh|zOZ+w}xto=0j{BbgFWMo`pa9CCENaH4ARBJJgT1YfDQ8xlfDq0u4jtu@eO(Xp= z^aI5X@-PV1R-|BlqpvpT(Y8bAj480(*?*b8(jfD9`XA=+7ZCUSe=&b4_xS(K{I$^; z20#y`hs90Ki}a?_4EeL?85gv z^#4Zed2Q2gk)isZj(B@v4k>0|j#MdVW!`3IMm_TK`*%xlHt1V`LEe?zo329vLJtwk zt{0kLw;4RnTbd?y#SKGK%lCO>@mdNONg(aF?t}0-t*pnc2BNm;Q`DZL?}&{7O!`jM z?Hbiha&~bR)8v#=jP|Lw$P52JJg{mTM;qf< zgII-VmV=?=J?A&Cl>b9cPyAh(CCB6woWyx8opg8bi|;zKk85bJiTFTJ-7&p)X*BJ1 za@li1;<4ph4P%8)juu@p73HTAAPtzabk^425rg>aKSARmG+~2nP)U$#Oc|Y&vB{h& z9&bE`zNgH^YgCTTRCPuM-MOE_Wx!uujALMwNEV}3KDc%~fWHR5c^DOPxE6>ee#8N? zd5J~1sy6U3J|cdw{VC){!KX{-=)6*)(8psyTJ{VBHoWR%r{Kl!GjH@L@a!YHUKm*A zynmb7)7;%l;Ns4rJD;Vd$cg!44gOPt7hHI@o~sMpyhnGD@oX!-!{6A>V(lgSOJ8p6#Fz25n)_;ei=@DuZuJ5N&HLZ zev3RvHohm7?uE5rdW)`#`?S*we8MQqp)Nuw+qo|;$;fVVSov+h5322`-^S_@J zDb{4ZX!i;x6nDb*YMBP3t@<_S%+(#$j5gOZ8PU9ym!5J|n#mEYkJGx8Epl=d{qqsm z{)!vmjj69lZ;Tn$uW?44r8F)uh8Qz{YP|NJmlqNbvv+y~rssI$^LkRQsyz5+Cjh=a zIXLSQ$qVGJ$mkC_F^#V&^ho`AMa&T0KC6dSe=uFQD>>bat?(O{&0jJo+X9_}Paxvh zukJ}{P_;wQABnzI>mWR*VfDu=LA5(OPYy?Bo2Qx+HJS=jPtg%mAcYs)wNp=EW(jco zA#wHx>TeqjbSO2L$e50sImph==M78o&iLRK_d@h;tG z>RL`cxe=J#V>ENcl!N>nwi9q>%i0V29-F%SQNqrOrrEQ&?8Y@!ho%$Ox3BUtE-&@G znZLN*-`M++RHm58jPHF{yfE(Pny6~_kw2`^<#hkQ9O`;}QNO#EzK$7Rf0E@-$p3T=0rN5c_LvA%_;;aWQwLX)zs&Lf!pHyTg9NYZe}=Z| z!ZD!un4AgbZLCUY&hv%t?TWw_>y!#k;~+D)8bja;YU-o38s%`LcJkn}>&;9g?os*1apG`bo)+B9kPv#3~itFudPs4)F_&uXQmBS+F1MR6SPa=R5uN~+w zyGlGZ@lf$6(7_sO{%sEePQc8s$hg4F%uUEDd=>7bMk!BG205jQ72(4jqN6nr(0>Fy zaew=JEI}^-SAU&-N%zmR+`&PikX~3h&IXqoG(}ZUPbjl5h<)OJ#)e7=%a|?E&l2;z zvHfbzRFwYh62U*&nL>RpQGLD9Ws_<%A2)4XMiAz+R(E}G9fB(M?+<$4j!mV(L&k(b zefzVYwAv>l;DYTaYFdV2Mi|x3{-?Bekk6@qifJ^_ig5>dUK@IU9e;AlU*?d1Tb68x zuY;wyMCw)Koc7;w171wHRem6`RcH`1h+(-*hNMW5u9^Jf;kgRXf0iK?9HHlSr$2Fk zw14ng8Xavy_w!D>IU~8a|8WVVkoZ5%4Z0x3=5z)975o`ctZXWkvNIc0sxe)ONxdfL zh2)JAemu~NtUJkinDl3<`(vHWANqCAnP;O842Qe#(Nm*_?X^%OzA-4^BsJHJPeCkb zN1e2fY`zz?xf-~qHmD#!r|X5trw&>B*eKiRmJNof@NWk6c>OQYY3m~)jfds-5~5&` zPQiV@!VJRnQwsOCo2tOG?I54awmm2YhY>g>ID;xD=Kv1eZ+V{Y{0lhVF+4UsM&d@1{~=INzJei-_Oapr91OKo%-%PD0@wc9t0)$$ ze~#g9vg=eWs9EM>&(aOQ+mJMSh4=;)4s(f&d_vs4!73tj$BIZ(xOiyVr5!IhdNE>~ zF!<_8+|@VIKH()oshza*%JnwF#O7LI5T)G7r zwYgf18$e}M!gY&G*)F$|1b$T_2P%ev>DnRAapP1KRJ6g$3_qmnx zPIo|Kw+#Q?<)0s>K0%-0e&syb7 z&o)PYZ`7qH5H8v@Q%7O%f-=4G^MlhC_ZFBFWTH=l~wC7k&WXBjd z_!oxo%KR3APe(65m-q1U<~dX$A80s9WbZ@GBLCeZ^}=$PX{9ygnRZRR5Ux>yI`7LW z@%%o!ygb>u=Z>^eMR!+1P|l zllfYB+c%=`5NmLoHI|3iME*aWuV7v&;KQfX94MW8wx7-kc!ifX&O_|UPepLUU*_!mg`50 zqpj*L@*I^Vqt{eE1F<^fMA*#DaP(=(Jq*^=k=8se!`SVg{L=zRZtA=Wj_|)L_nHSF zm1`xYPwCn}R}5uSt_iKl6Z5@wE!hzHl6hwt>b)79P{|;&i^cVqFNHXW8 zANT;pXqPljB4|1G(M7RVOsGzJMF^^SnH9~T#FY4$cy6!{QP=-KmnXx7bcS+C;gI{( z4j^1Zoy#kD1-{2n_Z%?N3<2Bo817V^0!1tB%5jupQq_4%mmV$O4l;wd7i$E7$JIHc zI9!Z|-5&u3_2Oe_gHw7DZI~IhG5Cd_0Ju#n&J3*1{Mz6zr>J9`k=MP|L2w_)noR2H?dt*7Cig3ng1FhK=sbpBn9-@VVG zOdHxrFyu~`Q38r_(&bWS*+-s~NY8|?v08NYdCRZ_xRj@oHVv1UZemf)!;yKIynV1) z&zd?}mSR=Vx~B5SQ)Jg~1SHR87g}(R&4Sh51Itsw*Gfu&rShsfpbTPTi(b%uW`*jd zx#Tsu)|~4K;kVgn#59FYw4(|TEhq;N8N-tRS$t01Rp~u_X7s7J$<^a`ocED|d|;0t zV=)S67?PH2cUMCGGmR!cDlt9QurgZ{dvuSE*>Qig$Ha)G-dK7TBSZQ>8xcxmPEk~* zP?9@U3~Nf{U;ndAP}Tx4BlQ;9yJV>XyfxY3wMF(*CWi~a+fHUmODb(jYQ@N^=$qKR z@B4?~q`^YbZl}lFcjJGyazfeFW~eBVh&d)yy6xOhN@wzvz@tJ3RpoY666z9hhh17G zM&=Z!r|)@pn>lmnOEMEaiQKuN zxC$+a-ZQmlTZM}=tWMV^{M~)o-?zCY5#8~p!^27h+__MxQzAH~ZLHz0DP_O;`*g06 zNicrkY{IP`VBBXFZ8CHfpy3TW9dpW5`&lj+UBaZ-O-o^ooTV^}oBz(dIlssXIJ>(I zW}#tP6Qa)$qey@>1&U*$2?&umCP2N0xt&2%UjNeQPBW%m2ZydS62dv)z1)4ztGWAz zp_mW^`KVc#_85m;sIZ{DzMCu_w*H*N zlXMJ_q&kBFwu9hf&VJe-8tS))OqAZ3JdjF$-UXFK<`Xk_3{%Pa37I=-U2s|C7h=(l zs-&dU5X=&wlFujS9H*7g2w4Jhu1IUryU14`ECDN$-M;4#<`zJYT&R;@e8g`pkFf;N zKu{}sFor>tJUq9mJc66OJGp=KlP{aqQ49O58pSUj-OMslkP-U za|vG-a`UJk^YHan7t`EZpN1-q5`|7Y*nEYE^C3&kD$nTx4Y;b_Jx z_USln4gCeF9&xhv#BoH2%~y<9`py4b{lB*XX>nYorWvE4<;E+0$X+u7Zu4JQgHmmq zX#U57Ps1W$k)l19P2RlvJ``2g+>?~0;k}hB&&3I)KMh`6$WsL4A2!&Ft>&WBbQmYu zIo)Z^;CVmh23~s^R#zV9ot!Ufh+%X9USh%c6NhRwlOO$q27=px1* z^{gbu-}$N7`@#6knt5~r>@xWa(Sg92D2t@iXev!HIkG#KOL@8(oI^-Uz~Tth%o}aI zxUn(ns7U+gs^>KqpdU9f7h@=lq!kby;E={!5KtLn{d;oezsb4t#s9n}4h*rbg)uke zrpwbBN3(WNl$XU3Ye_(_K~oKP@{bMA8H|eR??d|aMM(wj-Sl<}^O~c39z}Fd*=kfb z@eMH$BmbxY5x(4T&pdHWx!dI(vTC7H^JOFnnxAr)pRRBiBC3Tsp(}VQR2YXQb41YS zenP?td>dVQ!v#-UJSgj`7>bH{MK|+nu9N7k_jA$~@|g>pb7x1M-CXO>w-|$G0qe!s zlfYHvIQSaK07E##b~q>4{v^MIn75Pm`hpX+?LQAb!!ncdT#q&&UyudlqT{Ny>Hqm) z7gm$Ct4R4lFQ?unq#^7la7o9E@_L7;AEcGi+YR$tQ?0X@MaMvN%{ifeTE*4WOCl_+ zxDs4?7K~%?W}Z%y=W@aNR&)a7ex#%Sjx=KB&$1gz{M%3~jNEA9LkOiV9in^9v81@| z;3H9xE(V>v{bGh|SY3k&HiFB9JdyAsGH7%rN}Es<8B;NeXiK5`1wrAY=a9~#f3HtN zdYA2C7Jw5#)lZo1QOuLq*IpJSkJJ?( zqt>8bkojb71GDDiGRf;y7tj!i;hbnpFFl! zK0T}1!5+P-i_o<}P9|`z*YWU2?=Sl?L)FB0@Ok(u6^1)9B-_B4c4NxYnbCv@_cj`oKN{u`Z)EiMF>Y!A-x|y<~|E7;|oz##c{yt z8}}@u>MgSQQTIAvwNq~R8g`3pNx6lT4|@mjE;d=DU4X@+CkHJP4N?}V8*NEy9;7h} z&&L{80HqN&?khxYetJn}L*XyTFXY~OPROgu{$zF* zDf|h7a6(%GufA}aGpqQ0N%MEI`o+0s$M?I!i~!%5sd`aC4akgN2>6Tw{l#sp0ve2C z5h^`*wc8$e;FZ{L=yTyP>wj z=ADV9gDHicA$MlHCL1xN%3{S`DB}o^GdxnPjZA3geqTPQX5BJ^44Wc`1p z*6!Hk4b}Sv&wUm#oj6s!galYad;*5DWS;B<2TI_g$)e|3FQ1HCB*T4}%-<1`Nf|0B zZ!FGSxc!B6wkdH9o=LLaH|2<4*Ze!h956hkr>vaM9#)M*f0ONhxR`V0`~;u<53W(D zdke}-2OT9=B-UE{?Z+xK>Qj$Z+f+ARSVX{+@9dq9Qju`qKd(8 zr8ZM{RuexA`o-Tj{r{+X>#(T0FYa4FK&cUsP+|z_7NubXqy#BxP(Y-+n~@gj21yAK z5b2T_x&}W;9tf! zRjC|0+reMmWX&)C0#`}D9=4CJoL`0$pFy0;i9dCGL$Zu2I_itq6xtAKX*hgoqM1|Y zx=b8p9&7>iO6OEABf{Oo!{UM|qF(v*;YhoUQ+({wN52Ztxt2%#{NH0%GB}Iv>>%+L z%Ht4eWSkcN@(|E7u{f5aNeyK$AkzpPVB~jug`Jb9W0;dJ#`q9o2iLku{=W}YEjp=L zd1+k_E5{ff9!UWCXAlVh7hiT8>VcJ2<3^05Xy*3hwo;$pE;0;LnMD)_{y0U2(X`#* zI!9NA26WK7M5;bFi|6ka2p@djRs4-9F{>#-TIdl?tNq!g=p|3MK$qCPTD22sGWqf6 zbL&5mbpRKjh2;VJF6d=F&=V {K;pKrmstR^k;sQ@aqDhLvg%>3+plToMw!u!Eb& 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 diff --git a/src/lambdaisland/deep_diff2/printer_impl.cljc b/src/lambdaisland/deep_diff2/printer_impl.cljc index 0f76acc..9c46687 100644 --- a/src/lambdaisland/deep_diff2/printer_impl.cljc +++ b/src/lambdaisland/deep_diff2/printer_impl.cljc @@ -127,25 +127,37 @@ [type handler] (swap! print-handlers assoc type handler)) +(defn- color-scheme-mapping + "Translates user-friendly keys to internal namespaced keys." + [colors] + (let [mapping {:lambdaisland.deep-diff2/deletion ::deletion + :lambdaisland.deep-diff2/insertion ::insertion + :lambdaisland.deep-diff2/other ::other}] + (reduce-kv (fn [m k v] + (assoc m (get mapping k k) v)) ;; Fallback to original key if not in mapping + {} + colors))) + (defn puget-printer ([] (puget-printer {})) ([opts] - (let [extra-handlers (:extra-handlers opts)] - (puget-printer/pretty-printer (merge {:width (or *print-length* 100) - :print-color true - :color-scheme {::deletion [:red] - ::insertion [:green] - ::other [:yellow] + (let [opts (update opts :color-scheme color-scheme-mapping) + extra-handlers (:extra-handlers opts)] + (puget-printer/pretty-printer (puget-printer/merge-options {:width (or *print-length* 100) + :print-color true + :color-scheme {::deletion [:red] + ::insertion [:green] + ::other [:yellow] ;; lambdaisland.deep-diff2.puget uses green and red for ;; boolean/tag, but we want to reserve ;; those for diffed values. - :boolean [:bold :cyan] - :tag [:magenta]} - :print-handlers (dispatch/chained-lookup - (print-handler-resolver extra-handlers) - puget-printer/common-handlers)} - (dissoc opts :extra-handlers)))))) + :boolean [:bold :cyan] + :tag [:magenta]} + :print-handlers (dispatch/chained-lookup + (print-handler-resolver extra-handlers) + puget-printer/common-handlers)} + (dissoc opts :extra-handlers)))))) (defn format-doc [expr printer] (puget-printer/format-doc printer expr))

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 literal 0 HcmV?d00001 From b4af97d4c140a7145c291dc3513d06d41749106e Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Fri, 14 Apr 2023 18:24:28 +0800 Subject: [PATCH 129/158] add the color customization into README --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index 08bd561..f9b2307 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,37 @@ code and results. (lambdaisland.deep-diff2.puget.color/document printer :keyword (str (.-unit value)))])) ``` +### Set up a custom print handler with different colors by utilizing Puget library + +Sometimes, we need to tune the colors because: + +- To ensure adequate contrast on a different background +- To ensure readability by people who are colorblind +- To match your editor or main diff tool's color scheme. + +#### Config of Puget + +Fortunately, the Puget library included in deep-diff2 already allows customization through a custom printer. + +In the Puget libray, 8-bit scheme is expressed via `[:fg-256 5 n]` where n is between 0 and 255. We can combine foreground and background, for example, like so: `[:fg-256 5 226 :bg-256 5 56]`. + +24-bit scheme is expressed via `[:fg-256 2 r g b]` where r g b are each between 0 and 255. Foreground and background can be combined, for example: `[:fg-256 2 205 236 255 :bg-256 2 110 22 188]`. + +#### An example of customizing color + +For example, if we change the `:lambdaisland.deep-diff2.printer-impl/deletion` from `[:red]` to `[:bg-256 5 13]`, the color code it outputs will change from `\u001b[31m` to `\u001b[48;5;13m` + +``` +user=> (use 'lambdaisland.deep-diff2) +nil +user=> (def color-printer (printer {:color-scheme {:lambdaisland.deep-diff2.printer-impl/deletion [:bg-256 5 13]}})) +#'user/color-printer +user=> (pretty-print (diff {:a 1} {:b 2}) color-printer) +{+:b 2, -:a 1} +``` + +![screenshot showing color customization](color-scheme.png) + ### Time, data literal A common use case is diffing and printing Java date and time objects From 6900ecc52aeea12a082bfec690002f1532f63690 Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Sat, 15 Apr 2023 15:37:22 +0800 Subject: [PATCH 130/158] Update README.md Co-authored-by: A Brooks --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f9b2307..247f43b 100644 --- a/README.md +++ b/README.md @@ -150,11 +150,11 @@ code and results. ### Set up a custom print handler with different colors by utilizing Puget library -Sometimes, we need to tune the colors because: +Sometimes, we need to tune the colors to: -- To ensure adequate contrast on a different background -- To ensure readability by people who are colorblind -- To match your editor or main diff tool's color scheme. +- Ensure adequate contrast on a different background. +- Ensure readability by people who are colorblind. +- Match your editor or main diff tool's color scheme. #### Config of Puget From d406b7aead2c7d98c703959db9cf492e0b74d522 Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Sat, 15 Apr 2023 15:37:47 +0800 Subject: [PATCH 131/158] Update README.md Co-authored-by: A Brooks --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 247f43b..1320757 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,7 @@ user=> (pretty-print (diff {:a 1} {:b 2}) color-printer) {+:b 2, -:a 1} ``` +That results in the following highlighting: ![screenshot showing color customization](color-scheme.png) ### Time, data literal From 882738ee83fe5717f97b4bdcf15e367f03561985 Mon Sep 17 00:00:00 2001 From: A Brooks Date: Mon, 17 Apr 2023 14:21:15 -0500 Subject: [PATCH 132/158] Add CHANGELOG entry for Laurence's doc change. --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1e5463..e2a6ae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Added + - Add documentation for using a custom color scheme using custom data printers. + ## Fixed ## Changed @@ -156,4 +158,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. From 61a0b1fb94070f596d28254c8efde60d4a07990f Mon Sep 17 00:00:00 2001 From: Paul Rutledge Date: Mon, 5 Jun 2023 11:00:36 -0500 Subject: [PATCH 133/158] - don't perform unnecessary work when diffing maps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (A ∩ B) ∪ (B - A) = B --- src/lambdaisland/deep_diff2/diff_impl.cljc | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 55ec549..e864f87 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -108,20 +108,10 @@ (map ->Insertion) (remove #(contains? exp %) act))) -(let [exp {false 0, 0 0} - act {false 0, 0 0} - exp-ks (keys exp) - act-ks (concat (filter #(contains? (set (keys act)) %) exp-ks) - (remove #(contains? (set exp-ks) %) (keys act))) - [del ins] (del+ins exp-ks act-ks)] - [del ins]) -(del+ins [0 false] [0 false]) - (defn diff-map [exp act] (first (let [exp-ks (keys exp) - act-ks (concat (filter #(contains? (set (keys act)) %) exp-ks) - (remove #(contains? (set exp-ks) %) (keys act))) + act-ks (keys act) [del ins] (del+ins exp-ks act-ks)] (reduce (fn [[m idx] k] From ed478cce9cc07ce38a5e31713f27413c46e3ea38 Mon Sep 17 00:00:00 2001 From: Paul Rutledge Date: Thu, 8 Jun 2023 08:10:45 -0500 Subject: [PATCH 134/158] - add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2a6ae1..6af2a2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## Fixed +- Simplified internals when diffing maps for improved performance on many datasets. + ## Changed # 2.8.190 (2023-03-30 / 34d5e17) From 35494a045563009fd85a7ad985d304745a7e765b Mon Sep 17 00:00:00 2001 From: A Brooks Date: Thu, 8 Jun 2023 23:13:43 -0500 Subject: [PATCH 135/158] Add thanks message --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6af2a2d..ffd12db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ## Fixed -- Simplified internals when diffing maps for improved performance on many datasets. +- Simplified internals when diffing maps for improved performance on many datasets. (Thanks [@latacora-paul](https://github.com/latacora-paul)!) ## Changed From 782c302a28d7d7c168c6a7be8fca63767f457650 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 9 Jun 2023 15:42:34 -0500 Subject: [PATCH 136/158] # 2.9.202 (2023-06-09 / 35494a0) ## Added - Add documentation for using a custom color scheme using custom data printers. ## Fixed - Simplified internals when diffing maps for improved performance on many datasets. (Thanks [@latacora-paul](https://github.com/latacora-paul)!) ## Changed --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 4 ++-- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index af65e02..0a35d8c 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.8 \ No newline at end of file +2.9 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index ffd12db..9f4311e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.9.202 (2023-06-09 / 35494a0) ## Added @@ -160,4 +160,4 @@ ## Added -- Extracted from Kaocha, and added a top-level namespace. +- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file diff --git a/README.md b/README.md index 1320757..041d450 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.8.190"} +lambdaisland/deep-diff2 {:mvn/version "2.9.202"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.8.190"] +[lambdaisland/deep-diff2 "2.9.202"] ``` ## Use From 57dccd1aa8032e6c3ac3c4fd92f1751923084237 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 9 Jun 2023 15:42:45 -0500 Subject: [PATCH 137/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f4311e..4304757 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.9.202 (2023-06-09 / 35494a0) ## Added diff --git a/pom.xml b/pom.xml index 4ddcb65..a28207f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.8.190 + 2.9.202 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 6dcdae64622b80024a112e55d7442632fcb841bc + 782c302a28d7d7c168c6a7be8fca63767f457650 @@ -76,7 +76,7 @@ - 6dcdae64622b80024a112e55d7442632fcb841bc + 782c302a28d7d7c168c6a7be8fca63767f457650 From 6d28880058ddb3c14ef54b79f778eec915a75e78 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 9 Jun 2023 22:47:11 -0500 Subject: [PATCH 138/158] Only enable within-string diffing when selected. Create a second arity for backward compatability. For future use, add a general options hash-map. I think diff is a high-level function that might benefit from other options eventually. --- src/lambdaisland/deep_diff2/diff_impl.cljc | 46 +++++++++++++++------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index e864f87..6b61af9 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -97,6 +97,17 @@ (diff-seq-insertions ins) (into [])))) +(defn diff-string [exp act] + (->> (diff-seq exp act) + (map #(if (char? %) {:= %} %)) + (partition-by (comp first keys)) + (map (fn [[first-element :as coll]] + (let [head (first (keys first-element)) + contents (mapcat vals coll)] + {head (apply str contents) }) + ))) + ) + (defn diff-set [exp act] (into (into #{} @@ -131,7 +142,7 @@ exp-ks)))) (defn primitive? [x] - (or (number? x) (string? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) + (or (number? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) (defn diff-atom [exp act] (if (= exp act) @@ -151,23 +162,30 @@ (defn array? [x] (and x (.isArray (class x))))) -(defn diff [exp act] - (cond - (nil? exp) - (diff-atom exp act) +(defn diff + ([exp act] + (diff exp act {})) + ([exp act {:keys [diff-strings?] :as _opts}] + (cond + (nil? exp) + (diff-atom exp act) + + (and (diffable? exp) + (= (data/equality-partition exp) (data/equality-partition act))) + (diff-similar exp act) - (and (diffable? exp) - (= (data/equality-partition exp) (data/equality-partition act))) - (diff-similar exp act) + (array? exp) + (diff-seq exp act) - (array? exp) - (diff-seq exp act) + (record? exp) + (diff-map exp act) - (record? exp) - (diff-map exp act) + (and diff-strings? + (string? exp)) + (diff-string exp act) - :else - (diff-atom exp act))) + :else + (diff-atom exp act)))) (extend-protocol Diff #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) From 5a3c15ae95329f4f1d1782eac9cf7d5bab6dce81 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Fri, 9 Jun 2023 22:51:40 -0500 Subject: [PATCH 139/158] Revert "Only enable within-string diffing when selected." This reverts commit 6d28880058ddb3c14ef54b79f778eec915a75e78. --- src/lambdaisland/deep_diff2/diff_impl.cljc | 46 +++++++--------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 6b61af9..e864f87 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -97,17 +97,6 @@ (diff-seq-insertions ins) (into [])))) -(defn diff-string [exp act] - (->> (diff-seq exp act) - (map #(if (char? %) {:= %} %)) - (partition-by (comp first keys)) - (map (fn [[first-element :as coll]] - (let [head (first (keys first-element)) - contents (mapcat vals coll)] - {head (apply str contents) }) - ))) - ) - (defn diff-set [exp act] (into (into #{} @@ -142,7 +131,7 @@ exp-ks)))) (defn primitive? [x] - (or (number? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) + (or (number? x) (string? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) (defn diff-atom [exp act] (if (= exp act) @@ -162,30 +151,23 @@ (defn array? [x] (and x (.isArray (class x))))) -(defn diff - ([exp act] - (diff exp act {})) - ([exp act {:keys [diff-strings?] :as _opts}] - (cond - (nil? exp) - (diff-atom exp act) - - (and (diffable? exp) - (= (data/equality-partition exp) (data/equality-partition act))) - (diff-similar exp act) +(defn diff [exp act] + (cond + (nil? exp) + (diff-atom exp act) - (array? exp) - (diff-seq exp act) + (and (diffable? exp) + (= (data/equality-partition exp) (data/equality-partition act))) + (diff-similar exp act) - (record? exp) - (diff-map exp act) + (array? exp) + (diff-seq exp act) - (and diff-strings? - (string? exp)) - (diff-string exp act) + (record? exp) + (diff-map exp act) - :else - (diff-atom exp act)))) + :else + (diff-atom exp act))) (extend-protocol Diff #?(:clj java.util.Set :cljs cljs.core/PersistentHashSet) From 322a023fe57262c984b18cc8120e5a070fea63a4 Mon Sep 17 00:00:00 2001 From: Paul Rutledge Date: Mon, 19 Jun 2023 17:50:34 -0500 Subject: [PATCH 140/158] #47: varying key order in maps should produce consistent diffs --- .gitignore | 1 + src/lambdaisland/deep_diff2/diff_impl.cljc | 36 +++++++++------------ test/lambdaisland/deep_diff2/diff_test.cljc | 9 ++++++ 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 91d15fb..9faeae1 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ resources/public/ .store package-lock.json .cache +*.iml \ No newline at end of file diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index e864f87..ec0be33 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -1,5 +1,6 @@ (ns lambdaisland.deep-diff2.diff-impl (:require [clojure.data :as data] + [clojure.set :as set] [lambdaisland.clj-diff.core :as seq-diff])) (declare diff diff-similar) @@ -109,26 +110,21 @@ (remove #(contains? exp %) act))) (defn diff-map [exp act] - (first - (let [exp-ks (keys exp) - act-ks (keys act) - [del ins] (del+ins exp-ks act-ks)] - (reduce - (fn [[m idx] k] - [(cond-> m - (contains? del idx) - (assoc (->Deletion k) (get exp k)) - - (not (contains? del idx)) - (assoc k (diff (get exp k) (get act k))) - - (contains? ins idx) - (into (map (juxt ->Insertion (partial get act))) (get ins idx))) - (inc idx)]) - [(if (contains? ins -1) - (into {} (map (juxt ->Insertion (partial get act))) (get ins -1)) - {}) 0] - exp-ks)))) + (let [exp-ks (set (keys exp)) + act-ks (set (keys act))] + (reduce + (fn [m k] + (cond + (and (contains? exp-ks k) (not (contains? act-ks k))) + (assoc m (->Deletion k) (get exp k)) + + (and (contains? act-ks k) (not (contains? exp-ks k))) + (assoc m (->Insertion k) (get act k)) + + (and (contains? act-ks k) (contains? exp-ks k)) + (assoc m k (diff (get exp k) (get act k))))) + {} + (set/union exp-ks act-ks)))) (defn primitive? [x] (or (number? x) (string? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index 04c4f58..766546f 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -92,6 +92,15 @@ (is (= {:a [1 (diff/->Deletion 2) 3]} (diff/diff {:a [1 2 3]} {:a [1 3]})))) + (testing "map key order doesn't impact diff result" + (is (= {:name (diff/->Mismatch "Alyysa P Hacker" "Alyssa P Hacker"), :age 40} + + (diff/diff (array-map :name "Alyysa P Hacker" :age 40) + (array-map :age 40 :name "Alyssa P Hacker")) + + (diff/diff (array-map :age 40 :name "Alyysa P Hacker") + (array-map :age 40 :name "Alyssa P Hacker"))))) + (testing "records" (is (= {:a (diff/->Mismatch 1 2)} (diff/diff (map->ARecord {:a 1}) (map->ARecord {:a 2})))) From f7fe707cf908ef2c06c18e4adfc2bbc0c3362bf5 Mon Sep 17 00:00:00 2001 From: Paul Rutledge Date: Mon, 19 Jun 2023 18:03:20 -0500 Subject: [PATCH 141/158] #47: varying key order in maps should produce consistent diffs --- src/lambdaisland/deep_diff2/diff_impl.cljc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index ec0be33..8271eca 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -114,14 +114,12 @@ act-ks (set (keys act))] (reduce (fn [m k] - (cond - (and (contains? exp-ks k) (not (contains? act-ks k))) + (case [(contains? exp-ks k) (contains? act-ks k)] + [true false] (assoc m (->Deletion k) (get exp k)) - - (and (contains? act-ks k) (not (contains? exp-ks k))) + [false true] (assoc m (->Insertion k) (get act k)) - - (and (contains? act-ks k) (contains? exp-ks k)) + [true true] (assoc m k (diff (get exp k) (get act k))))) {} (set/union exp-ks act-ks)))) From 5e52d24913c931a61eeed9827454f05fc301d3dd Mon Sep 17 00:00:00 2001 From: Paul Rutledge Date: Mon, 19 Jun 2023 18:03:31 -0500 Subject: [PATCH 142/158] add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4304757..8cc5658 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ## Fixed +Varying key order in maps should produce a consistent diff (#47) + ## Changed # 2.9.202 (2023-06-09 / 35494a0) From f9e37b215f0998f8583e76000278238e80dbe117 Mon Sep 17 00:00:00 2001 From: Paul Rutledge Date: Sun, 16 Jul 2023 19:47:27 -0500 Subject: [PATCH 143/158] add a comment about why it's okay to have omitted a case --- src/lambdaisland/deep_diff2/diff_impl.cljc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 8271eca..ce90472 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -120,7 +120,10 @@ [false true] (assoc m (->Insertion k) (get act k)) [true true] - (assoc m k (diff (get exp k) (get act k))))) + (assoc m k (diff (get exp k) (get act k))) + ; `[false false]` will never occur because `k` necessarily + ; originated from at least one of the two sets + )) {} (set/union exp-ks act-ks)))) From e940bd1adbc4422da352bff53f4b7fc2828a2650 Mon Sep 17 00:00:00 2001 From: Alys Brooks Date: Mon, 24 Jul 2023 16:34:39 -0500 Subject: [PATCH 144/158] # 2.10.211 (2023-07-24 / 4d92566) ## Added ## Fixed Varying key order in maps should produce a consistent diff (#47) ## Changed --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 0a35d8c..f246360 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.9 \ No newline at end of file +2.10 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cc5658..1041b8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.10.211 (2023-07-24 / 4d92566) ## Added diff --git a/README.md b/README.md index 041d450..6517ad1 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ so that we may continue to enjoy a thriving Clojure ecosystem. deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.9.202"} +lambdaisland/deep-diff2 {:mvn/version "2.10.211"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.9.202"] +[lambdaisland/deep-diff2 "2.10.211"] ``` ## Use From 2ad3dc1d4bb3279005e59dcd5324d4b90887c06e Mon Sep 17 00:00:00 2001 From: Chris Badahdah Date: Tue, 27 Jun 2023 12:01:15 -0700 Subject: [PATCH 145/158] Diff / preserve metadata on collections --- CHANGELOG.md | 2 + src/lambdaisland/deep_diff2/diff_impl.cljc | 68 ++++++++++++--------- test/lambdaisland/deep_diff2/diff_test.cljc | 9 +++ 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1041b8f..52ffcbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Added +- Diff / preserve metadata on collections + ## Fixed Varying key order in maps should produce a consistent diff (#47) diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index ce90472..4e87b40 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -3,7 +3,7 @@ [clojure.set :as set] [lambdaisland.clj-diff.core :as seq-diff])) -(declare diff diff-similar) +(declare diff diff-similar diff-meta) (defrecord Mismatch [- +]) (defrecord Deletion [-]) @@ -92,40 +92,50 @@ (defn diff-seq [exp act] (let [[rep del ins] (replacements (del+ins exp act))] - (->> exp - (diff-seq-replacements rep) - (diff-seq-deletions del) - (diff-seq-insertions ins) - (into [])))) + (with-meta + (->> exp + (diff-seq-replacements rep) + (diff-seq-deletions del) + (diff-seq-insertions ins) + (into [])) + (diff-meta exp act)))) (defn diff-set [exp act] - (into - (into #{} - (map (fn [e] - (if (contains? act e) - e - (->Deletion e)))) - exp) - (map ->Insertion) - (remove #(contains? exp %) act))) + (with-meta + (into + (into #{} + (map (fn [e] + (if (contains? act e) + e + (->Deletion e)))) + exp) + (map ->Insertion) + (remove #(contains? exp %) act)) + (diff-meta exp act))) (defn diff-map [exp act] - (let [exp-ks (set (keys exp)) - act-ks (set (keys act))] - (reduce - (fn [m k] - (case [(contains? exp-ks k) (contains? act-ks k)] - [true false] - (assoc m (->Deletion k) (get exp k)) - [false true] - (assoc m (->Insertion k) (get act k)) - [true true] - (assoc m k (diff (get exp k) (get act k))) + (with-meta + (let [exp-ks (set (keys exp)) + act-ks (set (keys act))] + (reduce + (fn [m k] + (case [(contains? exp-ks k) (contains? act-ks k)] + [true false] + (assoc m (->Deletion k) (get exp k)) + [false true] + (assoc m (->Insertion k) (get act k)) + [true true] + (assoc m k (diff (get exp k) (get act k))) ; `[false false]` will never occur because `k` necessarily ; originated from at least one of the two sets - )) - {} - (set/union exp-ks act-ks)))) + )) + {} + (set/union exp-ks act-ks))) + (diff-meta exp act))) + +(defn diff-meta [exp act] + (when (or (meta exp) (meta act)) + (diff-map (meta exp) (meta act)))) (defn primitive? [x] (or (number? x) (string? x) (boolean? x) (inst? x) (keyword? x) (symbol? x))) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index 766546f..fa0a238 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -31,6 +31,9 @@ (is (= [] (diff/diff [] []))) + (is (= {:meta true} + (meta (diff/diff ^:meta [] ^:meta [])))) + (is (= [1 2 3] (diff/diff (into-array [1 2 3]) [1 2 3]))) @@ -68,6 +71,9 @@ (is (= #{:a} (diff/diff #{:a} #{:a}))) + (is (= {:meta true} + (meta (diff/diff ^:meta #{} ^:meta #{})))) + (is (= #{(diff/->Insertion :a)} (diff/diff #{} #{:a}))) @@ -80,6 +86,9 @@ (testing "maps" (is (= {} (diff/diff {} {}))) + (is (= {:meta true} + (meta (diff/diff ^:meta {} ^:meta {})))) + (is (= {:a (diff/->Mismatch 1 2)} (diff/diff {:a 1} {:a 2}))) From 33621d14a83019d60b4cfc01c9dda0e2e7ad04e7 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Sat, 17 Feb 2024 13:42:45 +0100 Subject: [PATCH 146/158] Version bumps --- bb.edn | 2 +- deps.edn | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bb.edn b/bb.edn index 058af91..564ce6a 100644 --- a/bb.edn +++ b/bb.edn @@ -1,7 +1,7 @@ {:deps {lambdaisland/deep-diff2 {:local/root "."} lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "f2133b2a88bff3898e027c9b50516161c237792e"}} + :git/sha "7ce125cbd14888590742da7ab3b6be9bba46fc7a"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] diff --git a/deps.edn b/deps.edn index dbf61bb..875bd33 100644 --- a/deps.edn +++ b/deps.edn @@ -5,20 +5,20 @@ mvxcvi/arrangement {:mvn/version "2.1.0"}} :aliases {:cljs - {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.60"}}} + {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.132"}}} :dev {} :chui {:extra-deps {lambdaisland/chui {:local/root "../chui"} - thheller/shadow-cljs {:mvn/version "2.20.12"} + thheller/shadow-cljs {:mvn/version "2.27.4"} garden/garden {:mvn/version "1.3.10"}} :extra-paths ["../chui/resources" "../chui/dev"]} :test {:extra-paths ["test"] - :extra-deps {lambdaisland/kaocha {:mvn/version "1.71.1119"} - com.lambdaisland/kaocha-cljs {:mvn/version "1.4.130"} - org.clojure/clojurescript {:mvn/version "1.11.60"} + :extra-deps {lambdaisland/kaocha {:mvn/version "1.87.1366"} + com.lambdaisland/kaocha-cljs {:mvn/version "1.5.154"} + org.clojure/clojurescript {:mvn/version "1.11.132"} org.clojure/test.check {:mvn/version "1.1.1"}}}}} From e77c3bf3fe316805246d0b365e15e46ca960e76d Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Sat, 17 Feb 2024 13:43:55 +0100 Subject: [PATCH 147/158] Update automated readme blocks --- README.md | 64 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 6517ad1..4b2bbc4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # lambdaisland/deep-diff2 -[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) [![bb compatible](https://raw.githubusercontent.com/babashka/babashka/master/logo/badge.svg)](https://babashka.org) +[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. @@ -14,25 +14,31 @@ if you want to programatically diff/patch Clojure data structures then [this write-up by Huahai Yang](https://juji.io/blog/comparing-clojure-diff-libraries/). +## Lambda Island Open Source -  +Thank you! deep-diff2 is made possible thanks to our generous backers. [Become a +backer on OpenCollective](https://opencollective.com/lambda-island) so that we +can continue to make deep-diff2 better. + + + +   -## Support Lambda Island Open Source +deep-diff2 is part of a growing collection of quality Clojure libraries created and maintained +by the fine folks at [Gaiwan](https://gaiwan.co). -deep-diff2 is part of a growing collection of quality Clojure libraries and -tools released on the Lambda Island label. If you are using this project -commercially then you are expected to pay it forward by -[becoming a backer on Open Collective](http://opencollective.com/lambda-island#section-contribute), -so that we may continue to enjoy a thriving Clojure ecosystem. +Pay it forward by [becoming a backer on our OpenCollective](http://opencollective.com/lambda-island), +so that we continue to enjoy a thriving Clojure ecosystem. -  +You can find an overview of all our different projects at [lambdaisland/open-source](https://github.com/lambdaisland/open-source).   +  ## Installation @@ -243,33 +249,29 @@ the future. When in doubt check the CHANGELOG. ## Contributing -Everyone has a right to submit patches to deep-diff2, and thus become a contributor. - -Contributors MUST +We warmly welcome patches to deep-diff2. Please keep in mind the following: - adhere to the [LambdaIsland Clojure Style Guide](https://nextjournal.com/lambdaisland/clojure-style-guide) -- write patches that solve a problem. Start by stating the problem, then supply a minimal solution. `*` -- agree to license their contributions as EPL 1.0. -- not break the contract with downstream consumers. `**` -- not break the tests. +- write patches that solve a problem +- start by stating the problem, then supply a minimal solution `*` +- by contributing you agree to license your contributions as EPL 1.0 +- don't break the contract with downstream consumers `**` +- don't break the tests -Contributors SHOULD +We would very much appreciate it if you also -- update the CHANGELOG and README. -- add tests for new functionality. +- update the CHANGELOG and README +- add tests for new functionality -If you submit a pull request that adheres to these rules, then it will almost -certainly be merged immediately. However some things may require more -consideration. If you add new dependencies, or significantly increase the API -surface, then we need to decide if these changes are in line with the project's -goals. In this case you can start by [writing a pitch](https://nextjournal.com/lambdaisland/pitch-template), -and collecting feedback on it. +We recommend opening an issue first, before opening a pull request. That way we +can make sure we agree what the problem is, and discuss how best to solve it. +This is especially true if you add new dependencies, or significantly increase +the API surface. In cases like these we need to decide if these changes are in +line with the project's goals. -`*` This goes for features too, a feature needs to solve a problem. State the problem it solves, then supply a minimal solution. +`*` This goes for features too, a feature needs to solve a problem. State the problem it solves first, only then move on to solving it. -`**` As long as this project has not seen a public release (i.e. is not on Clojars) -we may still consider making breaking changes, if there is consensus that the -changes are justified. +`**` Projects that have a version that starts with `0.` may still see breaking changes, although we also consider the level of community adoption. The more widespread a project is, the less likely we're willing to introduce breakage. See [LambdaIsland-flavored Versioning](https://github.com/lambdaisland/open-source#lambdaisland-flavored-versioning) for more info. ## Credits @@ -292,7 +294,7 @@ Another library that implements a form of data structure diffing is [editscript] ## License -Copyright © 2018-2020 Arne Brasseur and contributors +Copyright © 2018-2024 Arne Brasseur and contributors Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt - + \ No newline at end of file From eac1651d3e0452885be7e7df72059b88ed36fe30 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Sat, 17 Feb 2024 13:44:45 +0100 Subject: [PATCH 148/158] # 2.11.216 (2024-02-17 / e77c3bf) ## Added - Diff / preserve metadata on collections ## Fixed Varying key order in maps should produce a consistent diff (#47) ## Changed --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index f246360..372f20b 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.10 \ No newline at end of file +2.11 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 52ffcbb..30ac46a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# 2.10.211 (2023-07-24 / 4d92566) +# 2.11.216 (2024-02-17 / e77c3bf) ## Added diff --git a/README.md b/README.md index 4b2bbc4..e657c1a 100644 --- a/README.md +++ b/README.md @@ -46,13 +46,13 @@ You can find an overview of all our different projects at [lambdaisland/open-sou deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.10.211"} +lambdaisland/deep-diff2 {:mvn/version "2.11.216"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.10.211"] +[lambdaisland/deep-diff2 "2.11.216"] ``` ## Use From 0c04153e30639e0c7776500f42083d9f6a38cf89 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Sat, 17 Feb 2024 13:45:00 +0100 Subject: [PATCH 149/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30ac46a..cf815f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.11.216 (2024-02-17 / e77c3bf) ## Added diff --git a/pom.xml b/pom.xml index a28207f..896a070 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.9.202 + 2.11.216 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,7 +25,7 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - 782c302a28d7d7c168c6a7be8fca63767f457650 + eac1651d3e0452885be7e7df72059b88ed36fe30 @@ -76,7 +76,7 @@ - 782c302a28d7d7c168c6a7be8fca63767f457650 + eac1651d3e0452885be7e7df72059b88ed36fe30 From 9e6942ae142409f39a038514f78e57c71b005ae1 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 6 Feb 2025 09:49:26 +0100 Subject: [PATCH 150/158] [BREAKING] Get smarter about diffing records Before we treated them as maps, which meant maps and records with the same key/values were considered equal. We now only compare records if the two compared values are both records, and are of the same type. Otherwise it's a Mismatch. --- CHANGELOG.md | 13 +++-- bb.edn | 2 +- bin/kaocha | 2 +- deps.edn | 4 +- package.json | 2 +- src/lambdaisland/deep_diff2/diff_impl.cljc | 61 ++++++++++++++------- test/lambdaisland/deep_diff2/diff_test.cljc | 30 ++++++---- 7 files changed, 72 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf815f1..34e1162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,12 @@ # Unreleased -## Added - -## Fixed - ## Changed +- [BREAKING] Get smarter about diffing records, instead of simply diffing them + as maps. We now only recurse into records if the two compared values are both + records of the same type. +- Bump dependencies: fipp, rrb-vector + # 2.11.216 (2024-02-17 / e77c3bf) ## Added @@ -14,7 +15,7 @@ ## Fixed -Varying key order in maps should produce a consistent diff (#47) +- Varying key order in maps should produce a consistent diff (#47) ## Changed @@ -180,4 +181,4 @@ Varying key order in maps should produce a consistent diff (#47) ## Added -- Extracted from Kaocha, and added a top-level namespace. \ No newline at end of file +- Extracted from Kaocha, and added a top-level namespace. diff --git a/bb.edn b/bb.edn index 564ce6a..bfd35fc 100644 --- a/bb.edn +++ b/bb.edn @@ -1,7 +1,7 @@ {:deps {lambdaisland/deep-diff2 {:local/root "."} lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "7ce125cbd14888590742da7ab3b6be9bba46fc7a"}} + :git/sha "4cb6231e7df947ee8f5434e7ad48ffd8e273bcf5"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] diff --git a/bin/kaocha b/bin/kaocha index 45d3d58..8ddb6f8 100755 --- a/bin/kaocha +++ b/bin/kaocha @@ -2,4 +2,4 @@ [[ -d "node_modules/ws" ]] || npm install ws -exec clojure -A:dev:test -m kaocha.runner "$@" +exec clojure -A:dev:test -M -m kaocha.runner "$@" diff --git a/deps.edn b/deps.edn index 875bd33..2269b65 100644 --- a/deps.edn +++ b/deps.edn @@ -1,6 +1,6 @@ {:paths ["resources" "src"] - :deps {fipp/fipp {:mvn/version "0.6.26"} - org.clojure/core.rrb-vector {:mvn/version "0.1.2"} + :deps {fipp/fipp {:mvn/version "0.6.27"} + org.clojure/core.rrb-vector {:mvn/version "0.2.0"} lambdaisland/clj-diff {:mvn/version "1.4.78"} mvxcvi/arrangement {:mvn/version "2.1.0"}} diff --git a/package.json b/package.json index 79c39c8..01446d7 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "dependencies": { "react": "^16.13.1", "react-dom": "^16.13.1", - "ws": "^8.13.0" + "ws": "^8.18.0" } } diff --git a/src/lambdaisland/deep_diff2/diff_impl.cljc b/src/lambdaisland/deep_diff2/diff_impl.cljc index 4e87b40..e158c95 100644 --- a/src/lambdaisland/deep_diff2/diff_impl.cljc +++ b/src/lambdaisland/deep_diff2/diff_impl.cljc @@ -114,24 +114,36 @@ (diff-meta exp act))) (defn diff-map [exp act] - (with-meta - (let [exp-ks (set (keys exp)) - act-ks (set (keys act))] - (reduce - (fn [m k] - (case [(contains? exp-ks k) (contains? act-ks k)] - [true false] - (assoc m (->Deletion k) (get exp k)) - [false true] - (assoc m (->Insertion k) (get act k)) - [true true] - (assoc m k (diff (get exp k) (get act k))) - ; `[false false]` will never occur because `k` necessarily - ; originated from at least one of the two sets - )) - {} - (set/union exp-ks act-ks))) - (diff-meta exp act))) + (if (not= (record? exp) (record? act)) + ;; If one of them is a record, and the other one a plain map, that's a + ;; mismatch. The case where both of them are records, but of different + ;; types, is handled in [[diff]] + (->Mismatch exp act) + (with-meta + (let [exp-ks (set (keys exp)) + act-ks (set (keys act))] + (reduce + (fn [m k] + (case [(contains? exp-ks k) (contains? act-ks k)] + [true false] + ;; The `dissoc` is only relevant for records, which at this point + ;; we are certain are of the same type. If the key is present in + ;; one and not in the other, we know it's an optional key (not part + ;; of the record base), and we can safely `dissoc` it while + ;; retaining the record type. + (assoc (dissoc m k) (->Deletion k) (get exp k)) + [false true] + (assoc m (->Insertion k) (get act k)) + [true true] + (assoc m k (diff (get exp k) (get act k))) + ;; `[false false]` will never occur because `k` necessarily + ;; originated from at least one of the two sets + )) + ;; In case of a record, we want to preserve the type, and you can't + ;; call `empty` on records, so we start from `exp` and assoc/dissoc. + (if (record? exp) exp {}) + (set/union exp-ks act-ks))) + (diff-meta exp act)))) (defn diff-meta [exp act] (when (or (meta exp) (meta act)) @@ -160,9 +172,19 @@ (defn diff [exp act] (cond + (= exp act) + exp + (nil? exp) (diff-atom exp act) + (record? exp) + (if (= (type exp) (type act)) + (diff-map exp act) + ;; Either act is not a record, or it's a record of a different type, so + ;; that's a mismatch + (->Mismatch exp act)) + (and (diffable? exp) (= (data/equality-partition exp) (data/equality-partition act))) (diff-similar exp act) @@ -170,9 +192,6 @@ (array? exp) (diff-seq exp act) - (record? exp) - (diff-map exp act) - :else (diff-atom exp act))) diff --git a/test/lambdaisland/deep_diff2/diff_test.cljc b/test/lambdaisland/deep_diff2/diff_test.cljc index fa0a238..4e0cff2 100644 --- a/test/lambdaisland/deep_diff2/diff_test.cljc +++ b/test/lambdaisland/deep_diff2/diff_test.cljc @@ -1,12 +1,14 @@ (ns lambdaisland.deep-diff2.diff-test - (:require [clojure.test :refer [deftest testing is are]] - [clojure.test.check :as tc] - [clojure.test.check.clojure-test :refer [defspec]] - [clojure.test.check.generators :as gen] - [clojure.test.check.properties :as prop] - [lambdaisland.deep-diff2.diff-impl :as diff])) + (:require + [clojure.test :refer [deftest testing is are]] + [clojure.test.check :as tc] + [clojure.test.check.clojure-test :refer [defspec]] + [clojure.test.check.generators :as gen] + [clojure.test.check.properties :as prop] + [lambdaisland.deep-diff2.diff-impl :as diff])) (defrecord ARecord []) +(defrecord BRecord []) (deftest diff-test (testing "diffing atoms" @@ -111,12 +113,20 @@ (array-map :age 40 :name "Alyssa P Hacker"))))) (testing "records" - (is (= {:a (diff/->Mismatch 1 2)} + (is (= (map->ARecord {:a (diff/->Mismatch 1 2)}) (diff/diff (map->ARecord {:a 1}) (map->ARecord {:a 2})))) - (is (= {(diff/->Insertion :a) 1} + (is (= (map->ARecord {(diff/->Insertion :a) 1}) (diff/diff (map->ARecord {}) (map->ARecord {:a 1})))) - (is (= {(diff/->Deletion :a) 1} - (diff/diff (map->ARecord {:a 1}) (map->ARecord {})))))) + (is (= (map->ARecord {(diff/->Deletion :a) 1}) + (diff/diff (map->ARecord {:a 1}) + (map->ARecord {})))) + (is (= (diff/->Mismatch (map->ARecord {:a 1}) (map->BRecord {:a 1})) + (diff/diff (map->ARecord {:a 1}) + (map->BRecord {:a 1})))) + (is (= (diff/->Mismatch {:a 1} (map->ARecord {:a 1})) + (diff/diff {:a 1} (map->ARecord {:a 1})))) + (is (= (diff/->Mismatch (map->ARecord {:a 1}) {:a 1}) + (diff/diff (map->ARecord {:a 1}) {:a 1}))))) (is (= [{:x (diff/->Mismatch 1 2)}] (diff/diff [{:x 1}] [{:x 2}]))) From 20eeb8e4d09f6f63e0f5db147293d00c9d4ccacb Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 6 Feb 2025 09:51:04 +0100 Subject: [PATCH 151/158] # 2.12.219 (2025-02-06 / 9e6942a) ## Changed - [BREAKING] Get smarter about diffing records, instead of simply diffing them as maps. We now only recurse into records if the two compared values are both records of the same type. - Bump dependencies: fipp, rrb-vector --- .VERSION_PREFIX | 2 +- CHANGELOG.md | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.VERSION_PREFIX b/.VERSION_PREFIX index 372f20b..a202097 100644 --- a/.VERSION_PREFIX +++ b/.VERSION_PREFIX @@ -1 +1 @@ -2.11 \ No newline at end of file +2.12 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 34e1162..41f7f31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Unreleased +# 2.12.219 (2025-02-06 / 9e6942a) ## Changed diff --git a/README.md b/README.md index e657c1a..32cf968 100644 --- a/README.md +++ b/README.md @@ -46,13 +46,13 @@ You can find an overview of all our different projects at [lambdaisland/open-sou deps.edn ``` -lambdaisland/deep-diff2 {:mvn/version "2.11.216"} +lambdaisland/deep-diff2 {:mvn/version "2.12.219"} ``` project.clj ``` -[lambdaisland/deep-diff2 "2.11.216"] +[lambdaisland/deep-diff2 "2.12.219"] ``` ## Use From 6290e473aeb6f0665f94ee6e5ac2368a076a2525 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Thu, 6 Feb 2025 09:51:26 +0100 Subject: [PATCH 152/158] Update pom.xml and add CHANGELOG.md placeholders --- CHANGELOG.md | 8 ++++++++ pom.xml | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41f7f31..5419d29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased + +## Added + +## Fixed + +## Changed + # 2.12.219 (2025-02-06 / 9e6942a) ## Changed diff --git a/pom.xml b/pom.xml index 896a070..4c0f91e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 lambdaisland deep-diff2 - 2.11.216 + 2.12.219 deep-diff2 Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. https://github.com/lambdaisland/deep-diff2 @@ -25,18 +25,18 @@ https://github.com/lambdaisland/deep-diff2 scm:git:git://github.com/lambdaisland/deep-diff2.git scm:git:ssh://git@github.com/lambdaisland/deep-diff2.git - eac1651d3e0452885be7e7df72059b88ed36fe30 + 20eeb8e4d09f6f63e0f5db147293d00c9d4ccacb fipp fipp - 0.6.26 + 0.6.27 org.clojure core.rrb-vector - 0.1.2 + 0.2.0 lambdaisland @@ -76,7 +76,7 @@ - eac1651d3e0452885be7e7df72059b88ed36fe30 + 20eeb8e4d09f6f63e0f5db147293d00c9d4ccacb From b94e61a44d1b8c28b0a832610d66149d51e2f331 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Sun, 9 Feb 2025 14:44:54 +0100 Subject: [PATCH 153/158] Bump tooling --- bb.edn | 2 +- deps.edn | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bb.edn b/bb.edn index bfd35fc..7ba6a2b 100644 --- a/bb.edn +++ b/bb.edn @@ -1,7 +1,7 @@ {:deps {lambdaisland/deep-diff2 {:local/root "."} lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "4cb6231e7df947ee8f5434e7ad48ffd8e273bcf5"}} + :git/sha "6cb675d2adae284021f8cd94dcfbd078986b39bd"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] diff --git a/deps.edn b/deps.edn index 2269b65..0bdbb9c 100644 --- a/deps.edn +++ b/deps.edn @@ -12,13 +12,13 @@ :chui {:extra-deps {lambdaisland/chui {:local/root "../chui"} - thheller/shadow-cljs {:mvn/version "2.27.4"} + thheller/shadow-cljs {:mvn/version "2.28.20"} garden/garden {:mvn/version "1.3.10"}} :extra-paths ["../chui/resources" "../chui/dev"]} :test {:extra-paths ["test"] - :extra-deps {lambdaisland/kaocha {:mvn/version "1.87.1366"} + :extra-deps {lambdaisland/kaocha {:mvn/version "1.91.1392"} com.lambdaisland/kaocha-cljs {:mvn/version "1.5.154"} org.clojure/clojurescript {:mvn/version "1.11.132"} org.clojure/test.check {:mvn/version "1.1.1"}}}}} From 302ded8f32c31c21bccbfa3848601c98187d7521 Mon Sep 17 00:00:00 2001 From: Arne Brasseur Date: Tue, 11 Feb 2025 15:43:05 +0100 Subject: [PATCH 154/158] Bump lioss --- bb.edn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bb.edn b/bb.edn index 7ba6a2b..8ee3f87 100644 --- a/bb.edn +++ b/bb.edn @@ -1,7 +1,7 @@ {:deps {lambdaisland/deep-diff2 {:local/root "."} lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "6cb675d2adae284021f8cd94dcfbd078986b39bd"}} + :git/sha "0bd06e00f3b930d9a0fdd0ed90d47a9a333b19da"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] From 3a54431d4bc995ef642b400d876d8263f8e3e18a Mon Sep 17 00:00:00 2001 From: joanne cheng Date: Thu, 2 Oct 2025 10:25:16 +0200 Subject: [PATCH 155/158] Add gh workflow - run bin/kaocha in gh workflow - update readme - delete .circleci/ --- .circleci/config.yml | 47 -------------------------------------- .github/workflows/main.yml | 44 +++++++++++++++++++++++++++++++++++ README.md | 4 ++-- bb.edn | 2 +- 4 files changed, 47 insertions(+), 50 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/main.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 2f31820..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: 2.1 - -orbs: - kaocha: lambdaisland/kaocha@0.0.3 - clojure: lambdaisland/clojure@0.0.8 - -commands: - checkout_and_run: - parameters: - clojure_version: - type: string - steps: - - checkout - - clojure/with_cache: - cache_version: << parameters.clojure_version >> - steps: - - run: clojure -e '(println (System/getProperty "java.runtime.name") (System/getProperty "java.runtime.version") "\nClojure" (clojure-version))' - - run: npm install ws - - kaocha/execute: - args: "clj --reporter documentation --plugin cloverage --codecov" - clojure_version: << parameters.clojure_version >> - - kaocha/execute: - args: "cljs --reporter documentation" - clojure_version: << parameters.clojure_version >> - - kaocha/upload_codecov: - flags: clj - -jobs: - test: - parameters: - os: - type: executor - clojure_version: - type: string - executor: << parameters.os >> - steps: - - checkout_and_run: - clojure_version: << parameters.clojure_version >> - -workflows: - kaocha_test: - jobs: - - test: - matrix: - parameters: - os: [clojure/openjdk19, clojure/openjdk17, clojure/openjdk15, clojure/openjdk11, clojure/openjdk8] - clojure_version: ["1.10.3", "1.11.1"] diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..4ca015e --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,44 @@ +name: Continuous Delivery + +on: push + +jobs: + Kaocha: + runs-on: ${{matrix.sys.os}} + + strategy: + matrix: + sys: + # - { os: macos-latest, shell: bash } + - { os: ubuntu-latest, shell: bash } + # - { os: windows-latest, shell: powershell } + + defaults: + run: + shell: ${{matrix.sys.shell}} + + steps: + - uses: actions/checkout@v2 + + - name: 🔧 Install java + uses: actions/setup-java@v1 + with: + java-version: '25' + + - name: 🔧 Install clojure + uses: DeLaGuardo/setup-clojure@master + with: + cli: '1.12.3.1577' + + - name: 🗝 maven cache + uses: actions/cache@v4 + with: + path: | + ~/.m2 + ~/.gitlibs + key: ${{ runner.os }}-maven-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: 🧪 Run tests + run: bin/kaocha diff --git a/README.md b/README.md index 32cf968..6ee031a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # lambdaisland/deep-diff2 -[![CircleCI](https://circleci.com/gh/lambdaisland/deep-diff2.svg?style=svg)](https://circleci.com/gh/lambdaisland/deep-diff2) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) +[![GitHub Actions](https://github.com/lambdaisland/deep-diff2/actions/workflows/main.yml/badge.svg)](https://github.com/lambdaisland/deep-diff2/actions/workflows/main.yml) [![cljdoc badge](https://cljdoc.org/badge/lambdaisland/deep-diff2)](https://cljdoc.org/d/lambdaisland/deep-diff2) [![Clojars Project](https://img.shields.io/clojars/v/lambdaisland/deep-diff2.svg)](https://clojars.org/lambdaisland/deep-diff2) Recursively compare Clojure or ClojureScript data structures, and produce a colorized diff of the result. @@ -294,7 +294,7 @@ Another library that implements a form of data structure diffing is [editscript] ## License -Copyright © 2018-2024 Arne Brasseur and contributors +Copyright © 2018-2025 Arne Brasseur and contributors Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt \ No newline at end of file diff --git a/bb.edn b/bb.edn index 8ee3f87..13a3012 100644 --- a/bb.edn +++ b/bb.edn @@ -1,7 +1,7 @@ {:deps {lambdaisland/deep-diff2 {:local/root "."} lambdaisland/open-source {:git/url "https://github.com/lambdaisland/open-source" - :git/sha "0bd06e00f3b930d9a0fdd0ed90d47a9a333b19da"}} + :git/sha "e0e234aea52aeafac6ebb06c4a5149d83977e6a0"}} :tasks {test:bb {:doc "Run babashka tests with custom runner" :extra-paths ["src" "test"] From 36b89a6d12f96ff7422d96b954f5fe7e76d478be Mon Sep 17 00:00:00 2001 From: onbreath <65270097+onbreath@users.noreply.github.com> Date: Mon, 1 Dec 2025 06:14:00 +0100 Subject: [PATCH 156/158] Fix puget printer future-handler not checking future value --- src/lambdaisland/deep_diff2/puget/printer.cljc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lambdaisland/deep_diff2/puget/printer.cljc b/src/lambdaisland/deep_diff2/puget/printer.cljc index 5b6888b..96146e6 100644 --- a/src/lambdaisland/deep_diff2/puget/printer.cljc +++ b/src/lambdaisland/deep_diff2/puget/printer.cljc @@ -305,7 +305,7 @@ java.util.concurrent.Future (fn future-handler [printer value] - (let [doc (if (future-done? promise) + (let [doc (if (future-done? value) (format-doc printer @value) (color/document printer :nil "pending"))] (format-unknown printer value "Future" doc))) From 1f969521b68ce9dd9feed9b51a99a4569482b6ad Mon Sep 17 00:00:00 2001 From: onbreath <65270097+onbreath@users.noreply.github.com> Date: Mon, 1 Dec 2025 06:23:09 +0100 Subject: [PATCH 157/158] Add changelog entry for fix in puget printer for futures --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5419d29..3a7afa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ## Fixed +- Fixed puget printer for futures + ## Changed # 2.12.219 (2025-02-06 / 9e6942a) From b18871d66d7edc5655a84896052fc5df7d4c9ccc Mon Sep 17 00:00:00 2001 From: Laurence Chen Date: Wed, 14 Jan 2026 14:49:41 +0800 Subject: [PATCH 158/158] fix the bug pointed out from issue 41 by Yuri Govorushchenko --- README.md | 5 +-- color-scheme.png | Bin 172559 -> 172409 bytes src/lambdaisland/deep_diff2/printer_impl.cljc | 36 ++++++++++++------ 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 6ee031a..f720de8 100644 --- a/README.md +++ b/README.md @@ -172,17 +172,16 @@ In the Puget libray, 8-bit scheme is expressed via `[:fg-256 5 n]` where n is be #### An example of customizing color -For example, if we change the `:lambdaisland.deep-diff2.printer-impl/deletion` from `[:red]` to `[:bg-256 5 13]`, the color code it outputs will change from `\u001b[31m` to `\u001b[48;5;13m` +For example, if we change the `:lambdaisland.deep-diff2.printer-impl/deletion` from `[:red]` to `[:bg-256 5 11]`, the color code it outputs will change from `\u001b[31m` to `\u001b[48;5;11m` ``` user=> (use 'lambdaisland.deep-diff2) nil -user=> (def color-printer (printer {:color-scheme {:lambdaisland.deep-diff2.printer-impl/deletion [:bg-256 5 13]}})) +user=> (def color-printer (printer {:color-scheme {:lambdaisland.deep-diff2/deletion [:bg-256 5 11]}})) #'user/color-printer user=> (pretty-print (diff {:a 1} {:b 2}) color-printer) {+:b 2, -:a 1} ``` - That results in the following highlighting: ![screenshot showing color customization](color-scheme.png) diff --git a/color-scheme.png b/color-scheme.png index bdd9f30c2b52b5bbc61398cb42c5d72433d12fad..ebaf500fa3d32338bb802dc5ce4c9d0b1f7887fb 100644 GIT binary patch literal 172409 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%0DnOfE?6`EE&hWH!lw4H4N7T&d@1 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 {K;pKrmstR^k;sQ@aqDhLvg%>3+plToMw!u!Eb& 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