Skip to content

Commit 5e45131

Browse files
committed
test python repl using pyodide
1 parent 07aa3df commit 5e45131

File tree

7 files changed

+67
-14
lines changed

7 files changed

+67
-14
lines changed

package-lock.json

Lines changed: 35 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
"electron-window-state": "5.0.3",
126126
"font-scanner": "0.2.1",
127127
"mdn-data": "2.8.0",
128-
"opentype.js": "1.3.4"
128+
"opentype.js": "1.3.4",
129+
"pyodide": "0.26.1"
129130
}
130131
}

src/electron/preload.cljs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
["mdn-data" :as mdn] ;; deprecating in favor of w3c/webref
88
["opentype.js" :as opentype]
99
["os" :as os]
10+
["pyodide" :refer [loadPyodide]]
1011
[config]))
1112

13+
(def pyodide (atom nil))
14+
1215
(defn text->path
1316
"https://github.com/opentypejs/opentype.js#loading-a-font-synchronously-nodejs"
1417
[text {:keys [font-url x y font-size]}]
@@ -21,6 +24,7 @@
2124
:receive (fn [channel f]
2225
;; Strip event (_) as it includes `sender`
2326
(.on ipcRenderer channel (fn [_ args] (f args))))
27+
:runPython #(.runPython ^js @pyodide %)
2428
:mdn mdn
2529
:webrefCss css
2630
:platform (.platform os)
@@ -33,7 +37,8 @@
3337
(defn ^:export init []
3438
;; https://docs.sentry.io/platforms/javascript/guides/electron/#configuring-the-client
3539
#_(.init Sentry (clj->js config/sentry-options))
36-
;; Expose protected methods that allow the renderer process to use the
40+
(.then (loadPyodide) #(reset! pyodide %))
41+
;; Expose protected methods that allow the renderer process to use the
3742
;; ipcRenderer without exposing the entire object
3843
;; https://www.electronjs.org/docs/api/context-bridge
3944
(.exposeInMainWorld contextBridge "api" (clj->js api)))

src/renderer/reepl/codemirror.cljs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
["codemirror/addon/runmode/runmode.js"]
99
["codemirror/mode/clojure/clojure.js"]
1010
["codemirror/mode/javascript/javascript.js"]
11+
["codemirror/mode/python/python.js"]
1112
["react" :as react]
1213
[clojure.string :as str]
1314
[reagent.core :as r]))

src/renderer/reepl/core.cljs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
["react-resizable-panels" :refer [Panel PanelResizeHandle]]
44
[cljs.reader]
55
[cljs.tools.reader]
6+
[platform]
67
[re-frame.core :as rf]
78
[reagent.core :as ra]
89
[renderer.components :as comp]
@@ -91,7 +92,8 @@
9192
cm-opts)]
9293
[:div.self-start.h-full.flex.items-center
9394
(repl-mode-button :cljs)
94-
(repl-mode-button :js)]
95+
(repl-mode-button :js)
96+
(when platform/electron? (repl-mode-button :py))]
9597
[comp/toggle-icon-button
9698
{:active? repl-history?
9799
:active-icon "chevron-down"

src/renderer/reepl/replumb.cljs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,10 @@ cljs.js/*load-fn*
237237
(js-attrs proto))))))
238238

239239
(defn js-completion
240-
[text]
240+
[mode text]
241241
(let [parts (vec (.split text "."))
242242
completing (or (last parts) "")
243-
prefix #(str "js/" (str/join "." (conj (vec (butlast parts)) %)))
243+
prefix #(str (when (= mode :cljs) "js/") (str/join "." (conj (vec (butlast parts)) %)))
244244
possibles (js-attrs (reduce aget js/window (butlast parts)))]
245245
(->> possibles
246246
(filter #(not= -1 (.indexOf % completing)))
@@ -289,10 +289,13 @@ cljs.js/*load-fn*
289289
(filter matches? names))))))
290290

291291
(defn process-apropos
292-
[text]
293-
(if (zero? (.indexOf text "js/"))
294-
(js-completion (.slice text 3))
295-
(cljs-completion text)))
292+
[mode text]
293+
(case mode
294+
:js (js-completion mode text)
295+
:cljs (if (zero? (.indexOf text "js/"))
296+
(js-completion mode (.slice text 3))
297+
(cljs-completion text))
298+
:py []))
296299

297300
(defn get-forms
298301
[m]

src/renderer/reepl/views.cljs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,20 @@
2121
(defn root
2222
[]
2323
[reepl/repl
24-
:execute #(replumb/run-repl (if (= @(rf/subscribe [:repl-mode]) :cljs) %1 (str "(js/eval \"" %1 "\")")) {:warning-as-error true} %2)
25-
:complete-word replumb/process-apropos
26-
:get-docs replumb/process-doc
24+
:execute #(replumb/run-repl (case @(rf/subscribe [:repl-mode])
25+
:cljs %1
26+
:js (str "(js/eval \"" %1 "\")")
27+
:py (str "(js/window.api.runPython \"" %1 "\")"))
28+
{:warning-as-error true} %2)
29+
:complete-word (fn [text] (replumb/process-apropos @(rf/subscribe [:repl-mode]) text))
30+
:get-docs (if (= @(rf/subscribe [:repl-mode]) :cljs) replumb/process-doc #())
2731
:state repl-state
2832
:show-value-opts
2933
{:showers [show-devtools/show-devtools
3034
(partial show-function/show-fn-with-docs maybe-fn-docs)]}
31-
:js-cm-opts {:mode (if (= @(rf/subscribe [:repl-mode]) :cljs) "clojure" "javascript")
35+
:js-cm-opts {:mode (case
36+
:cljs "clojure"
37+
:js "javascript"
38+
:py "python")
3239
:keyMap "default"
3340
:showCursorWhenSelecting true}])

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy