Skip to content

Commit c288591

Browse files
authored
Make tools.namespace obsolete in cljs-libs (#672)
1 parent 306529e commit c288591

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

src/nextjournal/clerk/cljs_libs.clj

+29-13
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
(:require
44
[clojure.java.io :as io]
55
[clojure.string :as str]
6-
[clojure.tools.namespace.dependency :as tnsd]
7-
[clojure.tools.namespace.parse :as tnsp]
6+
[weavejester.dependency :as tnsd]
87
[clojure.walk :as w]
98
[edamame.core :as e]
109
[nextjournal.clerk.viewer :as v]
@@ -37,6 +36,27 @@
3736
reagent.ratom
3837
user})
3938

39+
(defn- ns-decl?
40+
"Returns true if form is a (ns ...) declaration."
41+
[form]
42+
(and (list? form) (= 'ns (first form))))
43+
44+
(defn- read-ns-decl
45+
([rdr]
46+
(let [opts {:eof ::eof}]
47+
(loop []
48+
(let [form (e/parse-next rdr opts)]
49+
(cond
50+
(ns-decl? form) form
51+
(= ::eof form) nil
52+
:else (recur)))))))
53+
54+
(defn deps-from-ns-decl [parsed-ns-decl]
55+
(filter symbol? (map :lib (:requires parsed-ns-decl))))
56+
57+
(defn name-from-ns-decl [parsed-ns-decl]
58+
(:current parsed-ns-decl))
59+
4060
(defn- new-cljs-state []
4161
(atom {:graph (tnsd/graph)
4262
:loaded-libs #{}}))
@@ -54,10 +74,11 @@
5474
(contains? (:loaded-libs @state) ns))
5575
(when-let [cljs-file (ns->resource ns)]
5676
(let [ns-decl (with-open [^java.io.Closeable rdr (e/reader (io/reader cljs-file))]
57-
(tnsp/read-ns-decl rdr))
58-
nom (tnsp/name-from-ns-decl ns-decl)
77+
(read-ns-decl rdr))
78+
ns-decl (e/parse-ns-form ns-decl)
79+
nom (name-from-ns-decl ns-decl)
5980
deps (remove already-loaded-sci-namespaces
60-
(tnsp/deps-from-ns-decl ns-decl))]
81+
(deps-from-ns-decl ns-decl))]
6182
(apply require-cljs* state deps)
6283
(swap! state (fn [state]
6384
(-> state
@@ -102,12 +123,7 @@
102123
cljs-libs)
103124
doc))))
104125

126+
;;;; Scratch
127+
105128
(comment
106-
;; [nextjournal.clerk.render.hooks :as hooks]
107-
(def decl (tnsp/read-ns-decl (edamame.core/reader (java.io.StringReader. (slurp (io/resource "nextjournal/clerk/render/hooks.cljs"))))))
108-
(tnsp/name-from-ns-decl decl)
109-
(tnsp/deps-from-ns-decl decl)
110-
(-> (tnsd/graph)
111-
(tnsd/depend 'foo 'bar)
112-
(tnsd/remove-node 'foo)
113-
(tnsd/topo-sort)))
129+
)

0 commit comments

Comments
 (0)