|
12 | 12 | [rewrite-clj.node :as rnode]
|
13 | 13 | [rewrite-clj.parser :as rparse]))
|
14 | 14 |
|
15 |
| -(def ^:private already-loaded-sci-namespaces |
16 |
| - '#{applied-science.js-interop |
17 |
| - cljs.math |
18 |
| - cljs.repl |
19 |
| - clojure.core |
20 |
| - clojure.edn |
21 |
| - clojure.repl |
22 |
| - clojure.set |
23 |
| - clojure.string |
24 |
| - clojure.template |
25 |
| - clojure.walk |
26 |
| - nextjournal.clerk |
27 |
| - nextjournal.clerk.parser |
28 |
| - nextjournal.clerk.render |
29 |
| - nextjournal.clerk.render.code |
30 |
| - nextjournal.clerk.render.editor |
31 |
| - nextjournal.clerk.render.hooks |
32 |
| - nextjournal.clerk.render.navbar |
33 |
| - nextjournal.clerk.viewer |
34 |
| - nextjournal.clojure-mode.commands |
35 |
| - nextjournal.clojure-mode.extensions.eval-region |
36 |
| - nextjournal.clojure-mode.keymap |
37 |
| - reagent.core |
38 |
| - reagent.debug |
39 |
| - reagent.ratom |
40 |
| - user}) |
| 15 | +(def already-loaded-sci-namespaces |
| 16 | + (atom '#{applied-science.js-interop |
| 17 | + cljs.math |
| 18 | + cljs.repl |
| 19 | + clojure.core |
| 20 | + clojure.edn |
| 21 | + clojure.repl |
| 22 | + clojure.set |
| 23 | + clojure.string |
| 24 | + clojure.template |
| 25 | + clojure.walk |
| 26 | + nextjournal.clerk |
| 27 | + nextjournal.clerk.parser |
| 28 | + nextjournal.clerk.render |
| 29 | + nextjournal.clerk.render.code |
| 30 | + nextjournal.clerk.render.editor |
| 31 | + nextjournal.clerk.render.hooks |
| 32 | + nextjournal.clerk.render.navbar |
| 33 | + nextjournal.clerk.viewer |
| 34 | + nextjournal.clojure-mode.commands |
| 35 | + nextjournal.clojure-mode.extensions.eval-region |
| 36 | + nextjournal.clojure-mode.keymap |
| 37 | + reagent.core |
| 38 | + reagent.debug |
| 39 | + reagent.ratom |
| 40 | + user})) |
41 | 41 |
|
42 | 42 | (defn- ns-decl?
|
43 | 43 | "Returns true if form is a (ns ...) declaration."
|
|
72 | 72 | exts ["cljs" "cljc"]]
|
73 | 73 | (or (some #(io/resource (str prefix "." %))
|
74 | 74 | exts)
|
75 |
| - (binding [*out* *err*] |
76 |
| - (println "[clerk] Could not find source for CLJS namespace:" ns))))) |
| 75 | + (throw (ex-info (str "Could not find source for CLJS namespace: " ns) |
| 76 | + {:ns ns |
| 77 | + :already-loaded-sci-namespaces @already-loaded-sci-namespaces}))))) |
77 | 78 |
|
78 | 79 | (comment
|
79 | 80 | (ns->resource 'viewers.viewer-with-cljs-source)
|
80 | 81 | (ns->resource 'viewers.viewer-lib)
|
81 | 82 | )
|
82 | 83 |
|
83 |
| -(defn require-cljs* [state & nss] |
| 84 | +(defn- require-cljs* [state & nss] |
84 | 85 | (doseq [ns nss]
|
85 |
| - (when-not (or (contains? already-loaded-sci-namespaces ns) |
| 86 | + (when-not (or (contains? @already-loaded-sci-namespaces ns) |
86 | 87 | (contains? (:loaded-libs @state) ns))
|
87 | 88 | (when-let [cljs-file (ns->resource ns)]
|
88 | 89 | (let [ns-decl (with-open [^java.io.Closeable rdr (e/reader (io/reader cljs-file))]
|
89 | 90 | (read-ns-decl rdr))
|
90 | 91 | ns-decl (e/parse-ns-form ns-decl)
|
91 | 92 | nom (name-from-ns-decl ns-decl)
|
92 |
| - deps (remove already-loaded-sci-namespaces |
| 93 | + deps (remove @already-loaded-sci-namespaces |
93 | 94 | (deps-from-ns-decl ns-decl))]
|
94 | 95 | (apply require-cljs* state deps)
|
95 | 96 | (swap! state (fn [state]
|
|
109 | 110 |
|
110 | 111 | ;;;; Selection of reader conditionals, borrowed from clj-kondo.impl.utils
|
111 | 112 |
|
112 |
| -(defn first-non-whitespace [nodes] |
| 113 | +(defn- first-non-whitespace [nodes] |
113 | 114 | (some #(when (and (not (rnode/whitespace-or-comment? %))
|
114 | 115 | (not= :uneval (rnode/tag %)))
|
115 | 116 | %)
|
116 | 117 | nodes))
|
117 | 118 |
|
118 |
| -(defn process-reader-conditional [node langs splice?] |
| 119 | +(defn- process-reader-conditional [node langs] |
119 | 120 | (if (and node
|
120 | 121 | (= :reader-macro (rnode/tag node))
|
121 | 122 | (let [sv (-> node :children first :string-value)]
|
|
136 | 137 |
|
137 | 138 | (declare select-langs)
|
138 | 139 |
|
139 |
| -(defn select-lang-children [node langs] |
| 140 | +(defn- select-lang-children [node langs] |
140 | 141 | (if-let [children (:children node)]
|
141 | 142 | (let [new-children (reduce
|
142 | 143 | (fn [acc node]
|
143 | 144 | (let [splice? (= "?@" (some-> node :children first :string-value))]
|
144 |
| - (if-let [processed (select-langs node langs splice?)] |
| 145 | + (if-let [processed (select-langs node langs)] |
145 | 146 | (if splice?
|
146 | 147 | (into acc (:children processed))
|
147 | 148 | (conj acc processed))
|
|
152 | 153 | new-children))
|
153 | 154 | node))
|
154 | 155 |
|
155 |
| -(defn select-langs |
156 |
| - ([node langs] (select-langs node langs nil)) |
157 |
| - ([node langs splice?] |
158 |
| - (when-let [processed (process-reader-conditional node langs splice?)] |
| 156 | +(defn- select-langs |
| 157 | + ([node langs] |
| 158 | + (when-let [processed (process-reader-conditional node langs)] |
159 | 159 | (select-lang-children processed langs))))
|
160 | 160 |
|
161 | 161 | ;;;; End selection of reader conditionals
|
162 | 162 |
|
163 |
| -(defn slurp-resource [resource] |
| 163 | +(defn- slurp-resource [resource] |
164 | 164 | (if (str/ends-with? (str resource) ".cljc")
|
165 | 165 | (-> (slurp resource)
|
166 | 166 | (rparse/parse-string-all)
|
|
0 commit comments