/
zip.clj
119 lines (101 loc) · 3.18 KB
/
zip.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
(ns rewrite-clj.zip
(:refer-clojure :exclude [next find replace remove
seq? map? vector? list? set?
print map get assoc])
(:require [rewrite-clj.zip
[base :as base]
[edit :as edit]
[find :as find]
[insert :as insert]
[move :as move]
[remove :as remove]
[seq :as seq]
[subedit :as subedit]
[walk :as walk]
[whitespace :as ws]]
[rewrite-clj.potemkin :refer [import-vars]]
[rewrite-clj
[parser :as p]
[node :as node]]
[rewrite-clj.custom-zipper.core :as z]))
;; ## API Facade
(import-vars
[rewrite-clj.custom-zipper.core
node position root]
[rewrite-clj.zip.base
child-sexprs
edn* edn tag sexpr
length value
of-file of-string
string root-string
print print-root]
[rewrite-clj.zip.edit
replace edit splice
prefix suffix]
[rewrite-clj.zip.find
find find-next
find-depth-first
find-next-depth-first
find-tag find-next-tag
find-value find-next-value
find-token find-next-token]
[rewrite-clj.zip.insert
insert-right insert-left
insert-child append-child]
[rewrite-clj.zip.move
left right up down prev next
leftmost rightmost
leftmost? rightmost? end?]
[rewrite-clj.zip.remove
remove]
[rewrite-clj.zip.seq
seq? list? vector? set? map?
map map-keys map-vals
get assoc]
[rewrite-clj.zip.subedit
edit-node edit-> edit->>
subedit-node subedit-> subedit->>]
[rewrite-clj.zip.walk
prewalk
postwalk]
[rewrite-clj.zip.whitespace
whitespace? linebreak?
whitespace-or-comment?
skip skip-whitespace
skip-whitespace-left
prepend-space append-space
prepend-newline append-newline])
;; ## Base Operations
(defmacro ^:private defbase
[sym base]
(let [{:keys [arglists]} (meta
(ns-resolve
(symbol (namespace base))
(symbol (name base))))
sym (with-meta
sym
{:doc (format "Directly call '%s' on the given arguments." base)
:arglists `(quote ~arglists)})]
`(def ~sym ~base)))
(defbase right* rewrite-clj.custom-zipper.core/right)
(defbase left* rewrite-clj.custom-zipper.core/left)
(defbase up* rewrite-clj.custom-zipper.core/up)
(defbase down* rewrite-clj.custom-zipper.core/down)
(defbase next* rewrite-clj.custom-zipper.core/next)
(defbase prev* rewrite-clj.custom-zipper.core/prev)
(defbase rightmost* rewrite-clj.custom-zipper.core/rightmost)
(defbase leftmost* rewrite-clj.custom-zipper.core/leftmost)
(defbase replace* rewrite-clj.custom-zipper.core/replace)
(defbase edit* rewrite-clj.custom-zipper.core/edit)
(defbase remove* rewrite-clj.custom-zipper.core/remove)
(defbase insert-left* rewrite-clj.custom-zipper.core/insert-left)
(defbase insert-right* rewrite-clj.custom-zipper.core/insert-right)
;; ## DEPRECATED
(defn ^{:deprecated "0.4.0"} ->string
"DEPRECATED. Use `string` instead."
[zloc]
(string zloc))
(defn ^{:deprecated "0.4.0"} ->root-string
"DEPRECATED. Use `root-string` instead."
[zloc]
(root-string zloc))