(ns aaaa-this-has-to-be-first.because-patches ;; we need pprint loaded first, it patches pprint to not bloat the GraalVM binary (:require [babashka.impl.patches.datafy] [babashka.impl.pprint])) ;; Enable this for scanning requiring-resolve usage: ;; --- (def old-require require) (def old-resolve resolve) (def our-requiring-resolve (fn [sym] (let [ns (symbol (namespace sym))] (old-require ns) (resolve sym)))) (defn static-requiring-resolve [form _ _] (prn :req-resolve form :args (rest form)) `(let [res# (our-requiring-resolve ~@(rest form))] res#)) (alter-var-root #'requiring-resolve (constantly @#'static-requiring-resolve)) (doto #'requiring-resolve (.setMacro)) ;; --- ;; Enable this for detecting literal usages of require ;; --- (defn static-require [& [&form _bindings & syms]] (when (meta &form) (prn :require &form (meta &form) *file*)) `(old-require ~@syms)) (alter-var-root #'require (constantly @#'static-require)) (doto #'require (.setMacro)) (alter-var-root #'clojure.core/serialized-require (constantly (fn [& args] (prn :serialized-req args)))) ;; ---