wip
This commit is contained in:
parent
d36b87cdee
commit
12b96602a3
4 changed files with 54 additions and 36 deletions
12
resources/public/dev.html
Normal file
12
resources/public/dev.html
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="css/style.css">
|
||||||
|
<script src="js/scittle.js" type="application/javascript"></script>
|
||||||
|
<script src="js/scittle.nrepl.js" type="application/javascript"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Scittle</h1>
|
||||||
|
<h2>What is this?</h2>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -14,6 +14,8 @@
|
||||||
:global "ReactDOM"}}}
|
:global "ReactDOM"}}}
|
||||||
:modules
|
:modules
|
||||||
{:scittle {:entries [scittle.core]}
|
{:scittle {:entries [scittle.core]}
|
||||||
|
:scittle.nrepl {:entries [scittle.nrepl]
|
||||||
|
:depends-on #{:scittle}}
|
||||||
:scittle.reagent {:entries [scittle.reagent]
|
:scittle.reagent {:entries [scittle.reagent]
|
||||||
:depends-on #{:scittle}}
|
:depends-on #{:scittle}}
|
||||||
:scittle.cljs-ajax {:entries [scittle.cljs-ajax]
|
:scittle.cljs-ajax {:entries [scittle.cljs-ajax]
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
(ns scittle.core
|
(ns scittle.core
|
||||||
(:refer-clojure :exclude [time])
|
(:refer-clojure :exclude [time])
|
||||||
(:require [cljs.reader :refer [read-string]]
|
(:require [cljs.reader :refer [read-string]]
|
||||||
[clojure.edn :as edn]
|
|
||||||
[goog.object :as gobject]
|
[goog.object :as gobject]
|
||||||
[goog.string]
|
[goog.string]
|
||||||
[sci.core :as sci]
|
[sci.core :as sci]
|
||||||
[sci.nrepl.completions :refer [completions]]
|
|
||||||
[scittle.impl.common :refer [cljns]]
|
[scittle.impl.common :refer [cljns]]
|
||||||
[scittle.impl.error :as error]))
|
[scittle.impl.error :as error]))
|
||||||
|
|
||||||
|
|
@ -106,37 +104,3 @@
|
||||||
(enable-console-print!)
|
(enable-console-print!)
|
||||||
(sci/alter-var-root sci/print-fn (constantly *print-fn*))
|
(sci/alter-var-root sci/print-fn (constantly *print-fn*))
|
||||||
|
|
||||||
(defn nrepl-websocket []
|
|
||||||
(.-ws_nrepl js/window))
|
|
||||||
|
|
||||||
(defn nrepl-reply [{:keys [id session]} payload]
|
|
||||||
(.send (nrepl-websocket)
|
|
||||||
(str (assoc payload :id id :session session :ns (str @!last-ns)))))
|
|
||||||
|
|
||||||
(defn handle-nrepl-eval [{:keys [code] :as msg}]
|
|
||||||
(let [[kind val] (try [::success (eval-string code)]
|
|
||||||
(catch :default e
|
|
||||||
[::error (str e)]))]
|
|
||||||
(case kind
|
|
||||||
::success
|
|
||||||
(do (nrepl-reply msg {:value (pr-str val)})
|
|
||||||
(nrepl-reply msg {:status ["done"]}))
|
|
||||||
::error
|
|
||||||
(do
|
|
||||||
(nrepl-reply msg {:err (pr-str val)})
|
|
||||||
(nrepl-reply msg {:ex (pr-str val)
|
|
||||||
:status ["error" "done"]})))))
|
|
||||||
|
|
||||||
(defn handle-nrepl-message [msg]
|
|
||||||
(case (:op msg)
|
|
||||||
:eval (handle-nrepl-eval msg)
|
|
||||||
:complete (nrepl-reply msg (completions (assoc msg :ctx @!sci-ctx)))))
|
|
||||||
|
|
||||||
(defn ^:export init-nrepl []
|
|
||||||
(let [ws (nrepl-websocket)]
|
|
||||||
(set! (.-onmessage ws)
|
|
||||||
(fn [event]
|
|
||||||
(handle-nrepl-message (edn/read-string (.-data event)))))
|
|
||||||
(set! (.-onerror ws)
|
|
||||||
(fn [event]
|
|
||||||
(js/console.log event)))))
|
|
||||||
|
|
|
||||||
40
src/scittle/nrepl.cljs
Normal file
40
src/scittle/nrepl.cljs
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
(ns scittle.nrepl
|
||||||
|
(:require
|
||||||
|
[clojure.edn :as edn]
|
||||||
|
[sci.nrepl.completions :refer [completions]]
|
||||||
|
[scittle.core :refer [!last-ns eval-string !sci-ctx]]))
|
||||||
|
|
||||||
|
(defn nrepl-websocket []
|
||||||
|
(.-ws_nrepl js/window))
|
||||||
|
|
||||||
|
(defn nrepl-reply [{:keys [id session]} payload]
|
||||||
|
(.send (nrepl-websocket)
|
||||||
|
(str (assoc payload :id id :session session :ns (str @!last-ns)))))
|
||||||
|
|
||||||
|
(defn handle-nrepl-eval [{:keys [code] :as msg}]
|
||||||
|
(let [[kind val] (try [::success (eval-string code)]
|
||||||
|
(catch :default e
|
||||||
|
[::error (str e)]))]
|
||||||
|
(case kind
|
||||||
|
::success
|
||||||
|
(do (nrepl-reply msg {:value (pr-str val)})
|
||||||
|
(nrepl-reply msg {:status ["done"]}))
|
||||||
|
::error
|
||||||
|
(do
|
||||||
|
(nrepl-reply msg {:err (pr-str val)})
|
||||||
|
(nrepl-reply msg {:ex (pr-str val)
|
||||||
|
:status ["error" "done"]})))))
|
||||||
|
|
||||||
|
(defn handle-nrepl-message [msg]
|
||||||
|
(case (:op msg)
|
||||||
|
:eval (handle-nrepl-eval msg)
|
||||||
|
:complete (nrepl-reply msg (completions (assoc msg :ctx @!sci-ctx)))))
|
||||||
|
|
||||||
|
(defn ^:export init-nrepl []
|
||||||
|
(let [ws (nrepl-websocket)]
|
||||||
|
(set! (.-onmessage ws)
|
||||||
|
(fn [event]
|
||||||
|
(handle-nrepl-message (edn/read-string (.-data event)))))
|
||||||
|
(set! (.-onerror ws)
|
||||||
|
(fn [event]
|
||||||
|
(js/console.log event)))))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue