File tree Expand file tree Collapse file tree 4 files changed +381
-230
lines changed Expand file tree Collapse file tree 4 files changed +381
-230
lines changed Original file line number Diff line number Diff line change 1
1
{:deps {thheller/shadow-cljs {:mvn/version " 2.23.8" }
2
2
org.babashka/sci {:mvn/version " 0.8.40" }
3
- applied-science/js-interop {:mvn/version " 0.4.2" }}
3
+ applied-science/js-interop {:mvn/version " 0.4.2" }
4
+ rewrite-clj/rewrite-clj {:mvn/version " 1.1.47" }}
4
5
:paths [" src/" ]}
Original file line number Diff line number Diff line change @@ -72,7 +72,15 @@ export function tryEval(s) {
72
72
}
73
73
}
74
74
75
+ export const clearEval = ( view ) => {
76
+ if ( evalResult . length != 0 ) {
77
+ evalResult = ""
78
+ updateEditor ( view , codeBeforeEval , posBeforeEval )
79
+ }
80
+ }
81
+
75
82
export const evalAtCursor = ( view ) => {
83
+ clearEval ( view )
76
84
const doc = view . state . doc . toString ( )
77
85
codeBeforeEval = doc
78
86
posBeforeEval = view . state . selection . main . head
@@ -85,14 +93,8 @@ export const evalAtCursor = (view) => {
85
93
return true
86
94
}
87
95
88
- export const clearEval = ( view ) => {
89
- if ( evalResult . length != 0 ) {
90
- evalResult = ""
91
- updateEditor ( view , codeBeforeEval , posBeforeEval )
92
- }
93
- }
94
-
95
96
export const evalTopLevel = ( view ) => {
97
+ clearEval ( view )
96
98
posAtFormEnd = topLevelNode ( view . state ) . to
97
99
const doc = view . state . doc . toString ( )
98
100
posBeforeEval = view . state . selection . main . head
@@ -106,6 +108,7 @@ export const evalTopLevel = (view) => {
106
108
}
107
109
108
110
export const evalCell = ( view ) => {
111
+ clearEval ( view )
109
112
const doc = view . state . doc . toString ( )
110
113
posBeforeEval = view . state . selection . main . head
111
114
evalResult = tryEval ( view . state . doc . text . join ( " " ) )
Original file line number Diff line number Diff line change 6
6
[goog.string]
7
7
[goog.string.format]
8
8
[clojure.pprint :as pprint]
9
+ [rewrite-clj.zip :as z]
9
10
[sci.impl.evaluator]))
10
11
11
12
(defonce context
25
26
'lang-clojure-eval.integer
26
27
{'parseInt int/parse-int}}}))
27
28
29
+ (defn current-ns [source]
30
+ (z/sexpr (z/next (z/find-next-value (z/of-string source) z/next 'ns))))
31
+
28
32
(defn eval-string [source]
29
- (let [reqs " (require '[lang-clojure-eval.character :as Character]
30
- '[lang-clojure-eval.integer :as Integer])
33
+ (let [reqs (str " (ns " (or (current-ns source) " lang-clojure-eval" )
34
+ " (:require [lang-clojure-eval.character :as Character]
35
+ [lang-clojure-eval.integer :as Integer]))
31
36
(defn int [x]
32
37
(if (.isInteger js/Number (js/parseInt x))
33
38
(js/parseInt x)
34
- (.charCodeAt x 0)))" ]
39
+ (.charCodeAt x 0)))" ) ]
35
40
(try (binding [*print-length* 100 ]
36
41
(with-out-str (pprint/pprint (sci/eval-string* context (str reqs source)))))
37
42
(catch :default e
38
43
(with-out-str (error-handler source e))))))
44
+
You can’t perform that action at this time.
0 commit comments