|
3 | 3 | (:require
|
4 | 4 | [clojure.java.io :as io]
|
5 | 5 | [clojure.string :as str]
|
6 |
| - [clojure.tools.namespace.dependency :as tnsd] |
7 |
| - [clojure.tools.namespace.parse :as tnsp] |
| 6 | + [weavejester.dependency :as tnsd] |
8 | 7 | [clojure.walk :as w]
|
9 | 8 | [edamame.core :as e]
|
10 | 9 | [nextjournal.clerk.viewer :as v]
|
|
37 | 36 | reagent.ratom
|
38 | 37 | user})
|
39 | 38 |
|
| 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 | + |
40 | 60 | (defn- new-cljs-state []
|
41 | 61 | (atom {:graph (tnsd/graph)
|
42 | 62 | :loaded-libs #{}}))
|
|
54 | 74 | (contains? (:loaded-libs @state) ns))
|
55 | 75 | (when-let [cljs-file (ns->resource ns)]
|
56 | 76 | (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) |
59 | 80 | deps (remove already-loaded-sci-namespaces
|
60 |
| - (tnsp/deps-from-ns-decl ns-decl))] |
| 81 | + (deps-from-ns-decl ns-decl))] |
61 | 82 | (apply require-cljs* state deps)
|
62 | 83 | (swap! state (fn [state]
|
63 | 84 | (-> state
|
|
102 | 123 | cljs-libs)
|
103 | 124 | doc))))
|
104 | 125 |
|
| 126 | +;;;; Scratch |
| 127 | + |
105 | 128 | (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