require detection

This commit is contained in:
Michiel Borkent 2022-12-26 13:09:56 +01:00
parent 568b8923ee
commit 4bb2a75a0b

View file

@ -3,36 +3,46 @@
(:require [babashka.impl.patches.datafy] (:require [babashka.impl.patches.datafy]
[babashka.impl.pprint])) [babashka.impl.pprint]))
;; Enable this for scanning requiring-resolve usage: ;; Enable this for scanning requiring usage:
;; --- (def enable-require-scan
"(do
(def old-require require) (def old-require require)
(def old-resolve resolve) (def old-resolve resolve)
(def our-requiring-resolve (fn [sym] (def our-requiring-resolve (fn [sym]
(let [ns (symbol (namespace sym))] (let [ns (symbol (namespace sym))]
(old-require ns) (old-require ns)
(resolve sym)))) (old-resolve sym))))
(defn static-requiring-resolve [form _ _] (defn static-requiring-resolve [form _ _]
(prn :req-resolve form :args (rest form)) (prn :req-resolve form :args (rest form))
`(let [res# (our-requiring-resolve ~@(rest form))] `(let [res# (our-requiring-resolve ~@(rest form))]
res#)) res#))
(alter-var-root #'requiring-resolve (constantly @#'static-requiring-resolve)) (alter-var-root #'requiring-resolve (constantly @#'static-requiring-resolve))
(doto #'requiring-resolve (.setMacro)) (doto #'requiring-resolve (.setMacro))
;; ---
(defn static-require [& [&form _bindings & syms]]
;; Enable this for detecting literal usages of require (when (meta &form)
;; --- (prn :require &form (meta &form) *file*))
`(old-require ~@syms))
(defn static-require [& [&form _bindings & syms]] (alter-var-root #'require (constantly @#'static-require))
(when (meta &form) (doto #'require (.setMacro))
(prn :require &form (meta &form) *file*))
`(old-require ~@syms)) (alter-var-root #'clojure.core/serialized-require (constantly (fn [& args]
(alter-var-root #'require (constantly @#'static-require)) (prn :serialized-req args)))))
(doto #'require (.setMacro))
(alter-var-root #'clojure.core/serialized-require (constantly (fn [& args]
(prn :serialized-req args)))) (defn static-resolve [& [&form _bindings & syms]]
(when (meta &form)
(prn :require &form (meta &form) *file*))
`(old-resolve ~@syms))
(alter-var-root #'resolve (constantly @#'static-resolve))
(doto #'resolve (.setMacro))
")
(when (System/getenv "BABASHKA_REQUIRE_SCAN")
(load-string enable-require-scan))
;; --- ;; ---