|
42 | 42 | :req-un [::name :cljs.analyzer.specs.binding/local] |
43 | 43 | :opt-un [::variadic? ::init ::shadow]))) |
44 | 44 |
|
45 | | -(defmethod node :if [_] |
46 | | - (s/merge ::base |
47 | | - (s/keys |
48 | | - :req-un [::test ::then] |
49 | | - :opt-un [::else]))) |
50 | | - |
51 | | -(s/def ::literal? boolean?) |
52 | | -(s/def ::val any?) |
53 | | - |
54 | | -(defmethod node :const [_] |
55 | | - (s/merge ::base |
56 | | - (s/keys |
57 | | - :req-un [::val] |
58 | | - ;; ::literal? is required in the AST REF, but we don't actually use it |
59 | | - ;; should check tools.analyzer |
60 | | - :opt-un [::literal?]))) |
61 | | - |
62 | | -(s/def ::keys (s/* ::node)) |
63 | | -(s/def ::vals (s/* ::node)) |
64 | | - |
65 | | -(defmethod node :map [_] |
66 | | - (s/merge ::base |
67 | | - (s/keys :req-un [::keys ::vals]))) |
68 | | - |
69 | | -(s/def ::items (s/* ::node)) |
70 | | - |
71 | | -(defmethod node :list [_] |
72 | | - (s/merge ::base |
73 | | - (s/keys |
74 | | - :req-un [::items]))) |
75 | | - |
76 | | -(defmethod node :vector [_] |
77 | | - (s/merge ::base |
78 | | - (s/keys |
79 | | - :req-un [::items]))) |
80 | | - |
81 | | -(defmethod node :set [_] |
82 | | - (s/merge ::base |
83 | | - (s/keys |
84 | | - :req-un [::items]))) |
85 | | - |
86 | | -(defmethod node :js-object [_] |
87 | | - (s/merge ::base |
88 | | - (s/keys |
89 | | - :req-un [::keys ::vals]))) |
90 | | - |
91 | | -(defmethod node :js-array [_] |
92 | | - (s/merge ::base |
93 | | - (s/keys |
94 | | - :req-un [::items]))) |
95 | | - |
96 | | -(s/def ::ns symbol?) |
97 | | - |
98 | | -(defmethod node :js-var [_] |
99 | | - (s/merge ::base |
100 | | - (s/keys |
101 | | - :req-un [::ns ::name]))) |
102 | | - |
103 | | -(s/def ::var ::node) |
104 | | -(s/def ::sym ::node) |
105 | | -(s/def ::meta map?) |
106 | | - |
107 | | -(defmethod node :the-var [_] |
108 | | - (s/merge ::base |
109 | | - (s/keys |
110 | | - :opt-un [::var ::sym ::meta]))) |
111 | | - |
112 | 45 | (s/def ::nodes (s/* ::node)) |
113 | 46 | (s/def ::default ::node) |
114 | 47 |
|
|
131 | 64 | (s/keys |
132 | 65 | :req-un [::then]))) |
133 | 66 |
|
134 | | -(s/def ::the-var ::node) |
| 67 | +(s/def ::literal? boolean?) |
| 68 | +(s/def ::val any?) |
| 69 | + |
| 70 | +(defmethod node :const [_] |
| 71 | + (s/merge ::base |
| 72 | + (s/keys |
| 73 | + :req-un [::val] |
| 74 | + ;; ::literal? is required in the AST REF, but we don't actually use it |
| 75 | + ;; should check tools.analyzer |
| 76 | + :opt-un [::literal?]))) |
135 | 77 |
|
136 | 78 | (defmethod node :def [_] |
137 | 79 | (s/merge ::base |
|
196 | 138 | (s/keys |
197 | 139 | :req-un [::field ::target]))) |
198 | 140 |
|
| 141 | +(defmethod node :if [_] |
| 142 | + (s/merge ::base |
| 143 | + (s/keys |
| 144 | + :req-un [::test ::then] |
| 145 | + :opt-un [::else]))) |
| 146 | + |
199 | 147 | (s/def ::fn ::node) |
200 | 148 |
|
201 | 149 | (defmethod node :invoke [_] |
202 | 150 | (s/merge ::base |
203 | 151 | (s/keys |
204 | 152 | :req-un [::fn ::args]))) |
205 | 153 |
|
| 154 | +(s/def ::code string?) |
| 155 | + |
| 156 | +(defmethod node :js [_] |
| 157 | + (s/merge ::base |
| 158 | + (s/keys |
| 159 | + :opt-un [::code]))) |
| 160 | + |
| 161 | +(defmethod node :js-array [_] |
| 162 | + (s/merge ::base |
| 163 | + (s/keys |
| 164 | + :req-un [::items]))) |
| 165 | + |
| 166 | +(defmethod node :js-object [_] |
| 167 | + (s/merge ::base |
| 168 | + (s/keys |
| 169 | + :req-un [::keys ::vals]))) |
| 170 | + |
| 171 | +(s/def ::ns symbol?) |
| 172 | + |
| 173 | +(defmethod node :js-var [_] |
| 174 | + (s/merge ::base |
| 175 | + (s/keys |
| 176 | + :req-un [::ns ::name]))) |
| 177 | + |
206 | 178 | (s/def ::bindings (s/* ::node)) |
207 | 179 |
|
208 | 180 | (defmethod node :let [_] |
|
215 | 187 | (s/keys |
216 | 188 | :req-un [::bindings ::body]))) |
217 | 189 |
|
| 190 | +(s/def ::items (s/* ::node)) |
| 191 | + |
| 192 | +;; TODO: not in ast-ref |
| 193 | +(defmethod node :list [_] |
| 194 | + (s/merge ::base |
| 195 | + (s/keys |
| 196 | + :req-un [::items]))) |
| 197 | + |
218 | 198 | (defmethod node :local [_] |
219 | 199 | (s/merge ::base |
220 | 200 | (s/keys |
|
225 | 205 | (s/keys |
226 | 206 | :req-un [::bindings ::body]))) |
227 | 207 |
|
| 208 | +(s/def ::keys (s/* ::node)) |
| 209 | +(s/def ::vals (s/* ::node)) |
| 210 | + |
| 211 | +(defmethod node :map [_] |
| 212 | + (s/merge ::base |
| 213 | + (s/keys :req-un [::keys ::vals]))) |
| 214 | + |
228 | 215 | (s/def ::class ::node) |
229 | 216 |
|
230 | 217 | (defmethod node :new [_] |
|
259 | 246 | (s/keys |
260 | 247 | :req-un [::target ::val]))) |
261 | 248 |
|
| 249 | +(s/def ::var ::node) |
| 250 | +(s/def ::sym ::node) |
| 251 | +(s/def ::meta map?) |
| 252 | + |
| 253 | +(defmethod node :the-var [_] |
| 254 | + (s/merge ::base |
| 255 | + (s/keys |
| 256 | + :opt-un [::var ::sym ::meta]))) |
| 257 | + |
| 258 | +(s/def ::the-var ::node) |
| 259 | + |
262 | 260 | (s/def ::exception ::node) |
263 | 261 |
|
264 | 262 | (defmethod node :throw [_] |
|
281 | 279 |
|
282 | 280 | (s/def ::meta ::node) |
283 | 281 |
|
284 | | -(defmethod node :with-meta [_] |
| 282 | +(defmethod node :vector [_] |
285 | 283 | (s/merge ::base |
286 | 284 | (s/keys |
287 | | - :req-un [::meta ::expr]))) |
288 | | - |
289 | | -(s/def ::code string?) |
| 285 | + :req-un [::items]))) |
290 | 286 |
|
291 | | -(defmethod node :js [_] |
| 287 | +(defmethod node :with-meta [_] |
292 | 288 | (s/merge ::base |
293 | 289 | (s/keys |
294 | | - :opt-un [::code]))) |
| 290 | + :req-un [::meta ::expr]))) |
295 | 291 |
|
296 | 292 | (comment |
297 | 293 |
|
|
0 commit comments