diff --git a/src/malli/dev.clj b/src/malli/dev.clj index bcb45de14..ced753d8d 100644 --- a/src/malli/dev.clj +++ b/src/malli/dev.clj @@ -8,7 +8,10 @@ "Stops instrumentation for all functions vars and removes clj-kondo type annotations." [] (remove-watch @#'m/-function-schemas* ::watch) - (mi/unstrument!) + (->> (mi/unstrument!) + count + (format "unstrumented %d vars") + println) (clj-kondo/save! {}) (println "stopped instrumentation")) @@ -22,13 +25,18 @@ (with-out-str (stop!)) (mi/collect! {:ns (all-ns)}) (let [watch (fn [_ _ old new] - (mi/instrument! (assoc options :data (->> (for [[n d] (:clj new) - :let [no (get-in old [:clj n])] - [s d] d - :when (not= d (get no s))] - [[n s] d]) - (into {}) - (reduce-kv assoc-in {})))) + (->> (for [[n d] (:clj new) + :let [no (get-in old [:clj n])] + [s d] d + :when (not= d (get no s))] + [[n s] d]) + (into {}) + (reduce-kv assoc-in {}) + (assoc options :data) + mi/instrument! + count + (format "instrumented %d vars") + println) (clj-kondo/emit!))] (add-watch @#'m/-function-schemas* ::watch watch)) (mi/instrument! options) diff --git a/src/malli/instrument.clj b/src/malli/instrument.clj index 9a37f4a02..0132a0c6d 100644 --- a/src/malli/instrument.clj +++ b/src/malli/instrument.clj @@ -14,24 +14,24 @@ (defn -strument! ([] (-strument! nil)) ([{:keys [mode data filters gen report] :or {mode :instrument, data (m/function-schemas)} :as options}] - (doseq [[n d] data, [s d] d] - (when (or (not filters) (some #(% n s d) filters)) - (when-let [v (-find-var n s)] - (case mode - :instrument (let [original-fn (or (-original v) (deref v)) - dgen (as-> (merge (select-keys options [:scope :report :gen]) d) $ - (cond-> $ report (update :report (fn [r] (fn [t data] (r t (assoc data :fn-name (symbol (name n) (name s)))))))) - (cond (and gen (true? (:gen d))) (assoc $ :gen gen) - (true? (:gen d)) (dissoc $ :gen) - :else $))] - (alter-meta! v assoc ::original-fn original-fn) - (alter-var-root v (constantly (m/-instrument dgen original-fn))) - (println "..instrumented" v)) - :unstrument (when-let [original-fn (-original v)] - (alter-meta! v dissoc ::original-fn) - (alter-var-root v (constantly original-fn)) - (println "..unstrumented" v)) - (mode v d))))))) + (doall + (for [[n d] data, [s d] d] + (when (or (not filters) (some #(% n s d) filters)) + (when-let [v (-find-var n s)] + (case mode + :instrument (let [original-fn (or (-original v) (deref v)) + dgen (as-> (merge (select-keys options [:scope :report :gen]) d) $ + (cond-> $ report (update :report (fn [r] (fn [t data] (r t (assoc data :fn-name (symbol (name n) (name s)))))))) + (cond (and gen (true? (:gen d))) (assoc $ :gen gen) + (true? (:gen d)) (dissoc $ :gen) + :else $))] + (alter-meta! v assoc ::original-fn original-fn) + (alter-var-root v (constantly (m/-instrument dgen original-fn)))) + :unstrument (when-let [original-fn (-original v)] + (alter-meta! v dissoc ::original-fn) + (alter-var-root v (constantly original-fn))) + (mode v d)) + v)))))) (defn -schema [v] (let [{:keys [malli/schema arglists]} (meta v)]