|
274 | 274 |
|
275 | 275 | (def ^:private _speced_vars (atom #{}))
|
276 | 276 |
|
| 277 | +(defn speced-vars* |
| 278 | + ([] |
| 279 | + (speced-vars* nil)) |
| 280 | + ([ns-syms] |
| 281 | + (let [ns-match? (if (seq ns-syms) |
| 282 | + (set ns-syms) |
| 283 | + (constantly true))] |
| 284 | + (reduce |
| 285 | + (fn [ret sym] |
| 286 | + (if (ns-match? (namespace sym)) |
| 287 | + (conj ret (list 'var sym)) |
| 288 | + ret)) |
| 289 | + #{} @_speced_vars)))) |
| 290 | + |
277 | 291 | (defmacro speced-vars
|
278 | 292 | "Returns the set of vars whose namespace is in ns-syms AND
|
279 | 293 | whose vars have been speced with fdef. If no ns-syms are
|
280 | 294 | specified, return speced vars from all namespaces."
|
281 | 295 | [& ns-syms]
|
282 |
| - (let [ns-match? (if (seq ns-syms) |
283 |
| - (set ns-syms) |
284 |
| - (constantly true))] |
285 |
| - (reduce |
286 |
| - (fn [ret sym] |
287 |
| - (if (ns-match? (namespace sym)) |
288 |
| - (conj ret (list 'var sym)) |
289 |
| - ret)) |
290 |
| - #{} @_speced_vars))) |
| 296 | + (speced-vars* ns-syms)) |
291 | 297 |
|
292 | 298 | (defmacro fdef
|
293 | 299 | "Takes a symbol naming a function, and one or more of the following:
|
@@ -391,3 +397,29 @@ specified, return speced vars from all namespaces."
|
391 | 397 | `(when-let [raw# (cljs.spec/unstrument* ~v)]
|
392 | 398 | (set! ~sym raw#)
|
393 | 399 | ~v)))
|
| 400 | + |
| 401 | +(defmacro instrument-ns |
| 402 | + "Call instrument for all speced-vars in namespaces named |
| 403 | +by ns-syms. Idempotent." |
| 404 | + [& ns-syms] |
| 405 | + `(do |
| 406 | + ~@(map #(list 'cljs.spec/instrument %) (speced-vars* ns-syms)))) |
| 407 | + |
| 408 | +(defmacro unstrument-ns |
| 409 | + "Call unstrument for all speced-vars in namespaces named |
| 410 | +by ns-syms. Idempotent." |
| 411 | + [& ns-syms] |
| 412 | + `(do |
| 413 | + ~@(map #(list 'cljs.spec/unstrument %) (speced-vars* ns-syms)))) |
| 414 | + |
| 415 | +(defmacro instrument-all |
| 416 | + "Call instrument for all speced-vars. Idempotent." |
| 417 | + [] |
| 418 | + `(do |
| 419 | + ~@(map #(list 'cljs.spec/instrument %) (speced-vars*)))) |
| 420 | + |
| 421 | +(defmacro unstrument-all |
| 422 | + "Call unstrument for all speced-vars. Idempotent" |
| 423 | + [] |
| 424 | + `(do |
| 425 | + ~@(map #(list 'cljs.spec/unstrument %) (speced-vars*)))) |
0 commit comments