|
12 | 12 | [clojure.tools.analyzer.ast :as ana-ast]
|
13 | 13 | [clojure.tools.analyzer.jvm :as ana-jvm]
|
14 | 14 | [clojure.tools.analyzer.utils :as ana-utils]
|
| 15 | + [clojure.walk :as walk] |
15 | 16 | [multiformats.base.b58 :as b58]
|
16 | 17 | [multiformats.hash :as hash]
|
17 | 18 | [nextjournal.clerk.parser :as parser]
|
|
113 | 114 | (defn unresolvable-symbol-handler [ns sym ast-node]
|
114 | 115 | ast-node)
|
115 | 116 |
|
| 117 | +(defn wrong-tag-handler [tag ast-node] |
| 118 | + ast-node) |
| 119 | + |
116 | 120 | (def analyzer-passes-opts
|
117 | 121 | (assoc ana-jvm/default-passes-opts
|
| 122 | + :validate/wrong-tag-handler wrong-tag-handler |
118 | 123 | :validate/unresolvable-symbol-handler unresolvable-symbol-handler))
|
119 | 124 |
|
120 | 125 | (defn form->ex-data
|
|
544 | 549 | #_(dep/immediate-dependencies (:graph (build-graph "src/nextjournal/clerk/analyzer.clj")) #'nextjournal.clerk.analyzer/long-thing)
|
545 | 550 | #_(dep/transitive-dependencies (:graph (build-graph "src/nextjournal/clerk/analyzer.clj")) #'nextjournal.clerk.analyzer/long-thing)
|
546 | 551 |
|
| 552 | +(defn strip-form-meta [form] |
| 553 | + (clojure.walk/postwalk |
| 554 | + (fn [v] |
| 555 | + (if (or (instance? clojure.lang.IObj v) |
| 556 | + (instance? clojure.lang.IMeta v)) |
| 557 | + (vary-meta v (constantly nil)) |
| 558 | + v)) |
| 559 | + form)) |
| 560 | + |
547 | 561 | (defn hash-codeblock [->hash {:as codeblock :keys [hash form id deps vars]}]
|
548 | 562 | (when (and (seq deps) (not (ifn? ->hash)))
|
549 | 563 | (throw (ex-info "`->hash` must be `ifn?`" {:->hash ->hash :codeblock codeblock})))
|
550 | 564 | (let [hashed-deps (into #{} (map ->hash) deps)]
|
551 | 565 | (sha1-base58 (binding [*print-length* nil]
|
552 |
| - (pr-str (set/union (conj hashed-deps (if form form hash)) |
| 566 | + (pr-str (set/union (conj hashed-deps (if form (strip-form-meta form) hash)) |
553 | 567 | vars))))))
|
554 | 568 |
|
555 | 569 | (defn hash
|
|
0 commit comments