        (io/file (str target-file ".cache.edn"))))))
 
 (defn requires-analysis?
+  "Given a src, a resource, and output-dir, a compilation output directory
+   return true or false depending on whether src needs to be (re-)analyzed.
+   Can optionally pass cache, the analysis cache file."
   ([src] (requires-analysis? src "out"))
   ([src output-dir]
     (let [cache (cache-file src output-dir)]

    (when (and mvar (.isMacro ^clojure.lang.Var mvar))
      (with-meta @mvar (meta mvar)))))

(defn macroexpand-1 [env form]
  (env/ensure
    (wrapping-errors env
      (let [op (first form)]

              (resolve-var env sym)))
          (assoc ret :op :var :info (resolve-var env sym)))))))

(defn get-expander
  "Given a sym, a symbol identifying a macro, and env, an analysis environment
   return the corresponding Clojure macroexpander."
  [sym env]
  (let [mvar
        (when-not (or (-> env :locals sym)        ;locals hide macros
                      (and (or (-> env :ns :excludes sym)
