Skip to content

Commit 1a07a5e

Browse files
author
dan sutton
committed
Read multiple forms from input
1 parent 06fcf78 commit 1a07a5e

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

src/cider/piggieback.clj

+30-23
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,15 @@
206206
(apply merge
207207
((juxt :requires :require-macros)
208208
(ana/get-namespace ana/*cljs-ns*)))]
209-
(reader/read {:read-cond :allow :features #{:cljs}}
210-
(readers/source-logging-push-back-reader
211-
(java.io.StringReader. form-str))))))
209+
(let [rdr (readers/source-logging-push-back-reader
210+
(java.io.StringReader. form-str))
211+
eof (Object.)]
212+
(take-while #(not= % eof)
213+
(repeatedly
214+
#(reader/read {:read-cond :allow
215+
:features #{:cljs}
216+
:eof eof}
217+
rdr)))))))
212218

213219
(defn eval-cljs [repl-env env form opts]
214220
(cljs.repl/evaluate-form repl-env
@@ -242,26 +248,27 @@
242248
special-fns (merge cljs.repl/default-special-fns (:special-fns repl-options))
243249
is-special-fn? (set (keys special-fns))]
244250
(try
245-
(let [form (read-cljs-string code)
246-
env (assoc (ana/empty-env) :ns (ana/get-namespace init-ns))
247-
result (when form
248-
(if (and (seq? form) (is-special-fn? (first form)))
249-
(do ((get special-fns (first form)) repl-env env form repl-options)
250-
nil)
251-
(eval-cljs repl-env env form repl-options)))]
252-
(.flush ^Writer *out*)
253-
(.flush ^Writer *err*)
254-
(when (and
255-
(or (not ns)
256-
(not= init-ns ana/*cljs-ns*))
257-
ana/*cljs-ns*)
258-
(swap! session assoc #'ana/*cljs-ns* ana/*cljs-ns*))
259-
(transport/send
260-
transport
261-
(response-for msg
262-
{:value (or result "nil")
263-
:printed-value 1
264-
:ns (@session #'ana/*cljs-ns*)})))
251+
(let [forms (read-cljs-string code)]
252+
(doseq [form forms]
253+
(let [env (assoc (ana/empty-env) :ns (ana/get-namespace init-ns))
254+
result (when form
255+
(if (and (seq? form) (is-special-fn? (first form)))
256+
(do ((get special-fns (first form)) repl-env env form repl-options)
257+
nil)
258+
(eval-cljs repl-env env form repl-options)))]
259+
(.flush ^Writer *out*)
260+
(.flush ^Writer *err*)
261+
(when (and
262+
(or (not ns)
263+
(not= init-ns ana/*cljs-ns*))
264+
ana/*cljs-ns*)
265+
(swap! session assoc #'ana/*cljs-ns* ana/*cljs-ns*))
266+
(transport/send
267+
transport
268+
(response-for msg
269+
{:value (or result "nil")
270+
:printed-value 1
271+
:ns (@session #'ana/*cljs-ns*)})))))
265272
(catch Throwable t
266273
(repl-caught session transport msg t repl-env repl-options)))))))
267274

0 commit comments

Comments
 (0)