Skip to content

Commit abc47fc

Browse files
committed
implement cljs.spec/speced-vars
1 parent afa452b commit abc47fc

File tree

2 files changed

+18
-20
lines changed

2 files changed

+18
-20
lines changed

src/main/cljs/cljs/spec.clj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,23 @@
272272
[env sym role]
273273
(symbol (str (ns-qualify env sym) "$" (name role))))
274274

275+
(def ^:private _speced_vars (atom #{}))
276+
277+
(defmacro speced-vars
278+
"Returns the set of vars whose namespace is in ns-syms AND
279+
whose vars have been speced with fdef. If no ns-syms are
280+
specified, return speced vars from all namespaces."
281+
[& 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)))
291+
275292
(defmacro fdef
276293
"Takes a symbol naming a function, and one or more of the following:
277294
@@ -305,6 +322,7 @@
305322
:sym symbol?)
306323
:ret symbol?)"
307324
[fn-sym & {:keys [args ret fn] :as m}]
325+
(swap! _speced_vars conj (:name (resolve &env fn-sym)))
308326
(let [env &env
309327
qn (ns-qualify env fn-sym)]
310328
`(do ~@(reduce

src/main/cljs/cljs/spec.cljs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -341,26 +341,6 @@
341341
(swap! instrumented-vars dissoc v))
342342
v))
343343

344-
;(defn speced-vars
345-
; "Returns the set of vars whose namespace is in ns-syms AND
346-
;whose vars have been speced with fdef. If no ns-syms are
347-
;specified, return speced vars from all namespaces."
348-
; [& ns-syms]
349-
; (let [ns-match? (if (seq ns-syms)
350-
; (set (map str ns-syms))
351-
; (constantly true))]
352-
; (reduce-kv
353-
; (fn [s k _]
354-
; (if (c/and (symbol? k)
355-
; (re-find #"\$(args|ret)$" (name k))
356-
; (ns-match? (namespace k)))
357-
; (if-let [v (resolve (symbol (str/replace (str k) #"\$(args|ret)$" "")))]
358-
; (conj s v)
359-
; s)
360-
; s))
361-
; #{}
362-
; (registry))))
363-
;
364344
;(defn instrument-ns
365345
; "Call instrument for all speced-vars in namespaces named
366346
;by ns-syms. Idempotent."

0 commit comments

Comments
 (0)