Skip to content

Commit 70a2958

Browse files
committed
Fixing errors
1 parent 10d76ad commit 70a2958

File tree

2 files changed

+104
-77
lines changed

2 files changed

+104
-77
lines changed

src/lambdaisland/deep_diff/diff.cljc

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
(:require [clojure.data :as data]
33
[clj-diff.core :as seq-diff]))
44

5-
(declare diff)
5+
(declare local-diff)
66

77
(defrecord Mismatch [- +])
88
(defrecord Deletion [-])
@@ -70,7 +70,7 @@
7070
(map-indexed
7171
(fn [idx v]
7272
(if (contains? replacements idx)
73-
(diff v (get replacements idx))
73+
(local-diff v (get replacements idx))
7474
v))
7575
s))
7676

@@ -98,10 +98,10 @@
9898
(into []))))
9999

100100
#?(:clj (defn- val-type [val]
101-
(let [t (type val)]
102-
(if (class? t)
103-
(symbol (.getName ^Class t))
104-
t))))
101+
(let [t (type val)]
102+
(if (class? t)
103+
(symbol (.getName ^Class t))
104+
t))))
105105

106106
(defn- diff-map [exp act]
107107
(first
@@ -116,7 +116,7 @@
116116
(assoc (->Deletion k) (exp k))
117117

118118
(not (contains? del idx))
119-
(assoc k (diff (get exp k) (get act k)))
119+
(assoc k (local-diff (get exp k) (get act k)))
120120

121121
(contains? ins idx)
122122
(into (map (juxt ->Insertion (partial get act))) (get ins idx)))
@@ -131,17 +131,17 @@
131131
exp
132132
(->Mismatch exp act)))
133133

134-
(defn diff [exp act]
134+
(defn local-diff [exp act]
135135
(if (= (data/equality-partition exp) (data/equality-partition act))
136136
(diff-similar exp act)
137137
(diff-atom exp act)))
138138

139139
#?(:clj (extend nil
140140
Diff
141141
{:diff-similar diff-atom})
142-
:cljs (extend-type nil ;; I am not pretty sure about this. Lets wait for unit tests
142+
:cljs (extend-type nil
143143
Diff
144-
{:diff-similar diff-atom}))
144+
(diff-similar [x y] (diff-atom x y))))
145145

146146
#?(:clj (extend Object
147147
Diff
@@ -151,10 +151,9 @@
151151
(diff-atom exp act)))})
152152
:cljs (extend-type object
153153
Diff
154-
{:diff-similar (fn [exp act]
155-
(if (array? exp)
156-
(diff-seq exp act)
157-
(diff-atom exp act)))}))
154+
(diff-similar [x y] (if (array? x)
155+
(diff-seq x y)
156+
(diff-atom x y)))))
158157

159158
(extend-protocol Diff
160159
#?(:clj java.util.List
@@ -168,7 +167,6 @@
168167
act-seq (seq act)]
169168
(set (diff-seq exp-seq (concat (filter act exp-seq)
170169
(remove exp act-seq))))))
171-
172170
#?(:clj java.util.Map
173171
:cljs cljs.core.map)
174172
(diff-similar [exp act] (diff-map exp act)))
@@ -208,7 +206,11 @@
208206
(left-undiff [m] (get m :-)))
209207

210208
#?(:clj (extend nil Undiff {:left-undiff identity :right-undiff identity})
211-
:cljs (extend-type nil Undiff {:left-undiff identity :right-undiff identity}))
212-
213-
$?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity})
214-
:cljs (extend-type object Undiff {:left-undiff identity :right-undiff identity}))
209+
:cljs (extend-type nil Undiff
210+
(left-undiff [m] (identity m))
211+
(right-undiff [m] (identity m))))
212+
213+
#?(:clj (extend Object Undiff {:left-undiff identity :right-undiff identity})
214+
:cljs (extend-type object Undiff
215+
(left-undiff [m] (identity m))
216+
(right-undiff [m] (identity m))))

src/lambdaisland/deep_diff/printer.cljc

Lines changed: 83 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@
1414
(java.util TimeZone)
1515
(java.sql Timestamp))))
1616

17+
(defn get-type-name
18+
"Get the type of the given object as a string. For Clojure, gets the name of
19+
the class of the object. For ClojureScript, gets either the `name` attribute
20+
or the protocol name if the `name` attribute doesn't exist."
21+
[x]
22+
#?(:clj (.getName (class x))
23+
:cljs (let [t (type x)
24+
n (.-name t)]
25+
(if (empty? n)
26+
(pr-str t)
27+
n))))
28+
1729
(defn print-deletion [printer expr]
1830
(let [no-color (assoc printer :print-color false)]
1931
(color/document printer ::deletion [:span "-" (puget/format-doc no-color (:- expr))])))
@@ -41,6 +53,29 @@
4153
[:align (interpose [:span (:map-delimiter this) :line] entries)]
4254
(color/document this :delimiter "}")]))
4355

56+
(defn- map-entry-handler [printer value]
57+
(let [k (key value)
58+
v (val value)]
59+
(let [no-color (assoc printer :print-color false)]
60+
(cond
61+
(instance? lambdaisland.deep_diff.diff.Insertion k)
62+
[:span
63+
(print-insertion printer k)
64+
(if (coll? v) (:map-coll-separator printer) " ")
65+
(color/document printer ::insertion (puget/format-doc no-color v))]
66+
67+
(instance? lambdaisland.deep_diff.diff.Deletion k)
68+
[:span
69+
(print-deletion printer k)
70+
(if (coll? v) (:map-coll-separator printer) " ")
71+
(color/document printer ::deletion (puget/format-doc no-color v))]
72+
73+
:else
74+
[:span
75+
(puget/format-doc printer k)
76+
(if (coll? v) (:map-coll-separator printer) " ")
77+
(puget/format-doc printer v)]))))
78+
4479
(def ^:private ^ThreadLocal thread-local-utc-date-format
4580
(proxy [ThreadLocal] []
4681
(initialValue []
@@ -70,7 +105,7 @@
70105
(format ".%09d-00:00" (.getNanos ^Timestamp %)))
71106
:cljs (fn [input-date]
72107
(let [dt (from-date input-date)]
73-
(cljs-time.format/unparse thread-local-utc-timestamp-format dt)))))) ;;TODO format ".%09d-00:00"
108+
(cljs-time.format/unparse thread-local-utc-timestamp-format dt))))))
74109

75110
(def ^:private print-calendar
76111
(puget/tagged-handler
@@ -81,75 +116,65 @@
81116
":"
82117
(subs formatted offset-minutes)))))
83118

84-
(def ^:private print-handlers
119+
(def ^:private common-handlers
85120
{'lambdaisland.deep_diff.diff.Deletion
86121
print-deletion
87122

88123
'lambdaisland.deep_diff.diff.Insertion
89124
print-insertion
90125

91126
'lambdaisland.deep_diff.diff.Mismatch
92-
print-mismatch
93-
94-
#?(:clj 'clojure.lang.PersistentArrayMap
95-
:cljs 'cljs.core/PersistentArrayMap)
96-
map-handler
97-
98-
#?(:clj 'clojure.lang.PersistentHashMap
99-
:cljs cljs.core/PersistentHashMap)
100-
map-handler
101-
102-
#?(:clj 'clojure.lang.MapEntry
103-
:cljs 'cljs.core/MapEntry)
104-
(fn [printer value]
105-
(let [k (key value)
106-
v (val value)]
107-
(let [no-color (assoc printer :print-color false)]
108-
(cond
109-
(instance? lambdaisland.deep_diff.diff.Insertion k)
110-
[:span
111-
(print-insertion printer k)
112-
(if (coll? v) (:map-coll-separator printer) " ")
113-
(color/document printer ::insertion (puget/format-doc no-color v))]
114-
115-
(instance? lambdaisland.deep_diff.diff.Deletion k)
116-
[:span
117-
(print-deletion printer k)
118-
(if (coll? v) (:map-coll-separator printer) " ")
119-
(color/document printer ::deletion (puget/format-doc no-color v))]
120-
121-
:else
122-
[:span
123-
(puget/format-doc printer k)
124-
(if (coll? v) (:map-coll-separator printer) " ")
125-
(puget/format-doc printer v)]))))
126-
127-
#?(:clj 'java.util.Date
128-
:cljs 'js/Date)
129-
print-date
130-
131-
;; 'java.util.GregorianCalendar
132-
;; print-calendar
133-
134-
;; 'java.sql.Timestamp
135-
;; print-timestamp
136-
137-
#?(:clj 'java.util.UUID
138-
:cljs 'cljs.core.uuid)
139-
(tagged-handler 'uuid str)})
127+
print-mismatch})
128+
129+
#?(:clj
130+
(def ^:private print-handlers
131+
{'clojure.lang.PersistentArrayMap
132+
map-handler
133+
134+
'clojure.lang.PersistentHashMap
135+
map-handler
136+
137+
'clojure.lang.MapEntry
138+
map-entry-handler
139+
140+
'java.util.Date
141+
print-date
142+
143+
'java.util.GregorianCalendar
144+
print-calendar
145+
146+
'java.sql.Timestamp
147+
print-timestamp})
148+
:cljs
149+
(def ^:private print-handlers
150+
{'cljs.core.PersistentArrayMap
151+
map-handler
152+
153+
'cljs.core.PersistentHashMap
154+
map-handler
155+
156+
'cljs.core.MapEntry
157+
map-entry-handler
158+
159+
'js/Date
160+
print-date
161+
162+
'cljs.core.uuid
163+
(puget/tagged-handler 'uuid str)}))
164+
140165

141166
(defn- print-handler-resolver [extra-handlers]
142167
(fn [^Class klz]
143-
(and klz (get (merge @#'print-handlers extra-handlers)
144-
(symbol (.getName klz))))))
168+
(and klz (get (merge @#'common-handlers @#'print-handlers extra-handlers)
169+
(symbol (get-type-name klz))))))
145170

146-
(defn register-print-handler!
147-
"Register an extra print handler.
171+
;; (defn register-print-handler!
172+
;; "Register an extra print handler.
148173

149-
`type` must be a symbol of the fully qualified class name. `handler` is a
150-
Puget handler function of two arguments, `printer` and `value`."
151-
[type handler]
152-
(alter-var-root #'print-handlers assoc type handler))
174+
;; `type` must be a symbol of the fully qualified class name. `handler` is a
175+
;; Puget handler function of two arguments, `printer` and `value`."
176+
;; [type handler]
177+
;; (alter-var-root #'print-handlers assoc type handler))
153178

154179
(defn puget-printer
155180
([]

0 commit comments

Comments
 (0)