Skip to content

Commit cbf82fd

Browse files
authored
Fix #212: implement equality for seq nodes (#213)
1 parent a9fcdc3 commit cbf82fd

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

CHANGELOG.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ https://github.com/clj-commons/rewrite-clj/issues/189[#189]
2323
* exceptions thrown while reading now include `:row` and `:col` keys in `ex-data` https://github.com/clj-commons/rewrite-clj/pull/181[#181] (thanks @ferdinand-beyer)
2424
* docs
2525
** a docstring typo fix https://github.com/clj-commons/rewrite-clj/pull/191[#191] (thanks @BTowersCoding!)
26-
26+
* Implement equality for seq nodes https://github.com/clj-commons/rewrite-clj/issues/212[#212] (@borkdude)
2727

2828
=== v1.1.45
2929

src/rewrite_clj/node/seq.cljc

+12-8
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@
3939

4040
;; ## Constructors
4141

42-
(defn list-node
43-
"Create a node representing a list with `children`.
42+
(let [;; re-use seq-fn for all instances so equals works
43+
list-node-seq-fn #(apply list %)]
44+
(defn list-node
45+
"Create a node representing a list with `children`.
4446
4547
```Clojure
4648
(require '[rewrite-clj.node :as n])
@@ -53,8 +55,8 @@
5355
n/string)
5456
;; => \"(1 2 3)\"
5557
```"
56-
[children]
57-
(->SeqNode :list "(%s)" 2 #(apply list %) children))
58+
[children]
59+
(->SeqNode :list "(%s)" 2 list-node-seq-fn children)))
5860

5961
(defn vector-node
6062
"Create a node representing a vector with `children`.
@@ -101,8 +103,10 @@
101103
[children]
102104
(->SeqNode :set "#{%s}" 3 set children))
103105

104-
(defn map-node
105-
"Create a node representing a map with `children`.
106+
(let [;; re-use seq-fn for all instances for equality
107+
map-seq-fn #(apply hash-map %)]
108+
(defn map-node
109+
"Create a node representing a map with `children`.
106110
```Clojure
107111
(require '[rewrite-clj.node :as n])
108112
@@ -138,5 +142,5 @@
138142
;; => \"{:a 1 :a 2}\"
139143
```
140144
See [docs on maps with duplicate keys](/doc/01-user-guide.adoc#maps-with-duplicate-keys)."
141-
[children]
142-
(->SeqNode :map "{%s}" 2 #(apply hash-map %) children))
145+
[children]
146+
(->SeqNode :map "{%s}" 2 map-seq-fn children)))
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
(ns rewrite-clj.node.equals-test
2+
(:require
3+
[clojure.test :refer [deftest is]]
4+
[rewrite-clj.node :as node]))
5+
6+
(deftest equals-test
7+
(is (= (node/list-node []) (node/list-node [])))
8+
(is (= (node/vector-node []) (node/vector-node [])))
9+
(is (= (node/set-node []) (node/set-node [])))
10+
(is (= (node/map-node []) (node/map-node []))))

0 commit comments

Comments
 (0)