Skip to content

Commit 9203b09

Browse files
committed
Socket: Fixed status_eval, bind *1/*2/*3/*e for e.g. tools.namespace
1 parent 9e1037a commit 9203b09

File tree

5 files changed

+53
-29
lines changed

5 files changed

+53
-29
lines changed

cs_conn.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import os, re, sublime, sublime_plugin
2-
from . import cs_common, cs_eval, cs_parser
2+
from . import cs_common, cs_eval, cs_eval_status, cs_parser
33

44
# Global connection instance
55
conn = None
@@ -61,6 +61,11 @@ def eval(self, view, sel):
6161
file = view.file_name())
6262
self.eval_impl(form)
6363

64+
def eval_status(self, code, ns):
65+
eval = cs_eval_status.StatusEval(code)
66+
form = cs_common.Form(id = eval.id, code = code, ns = ns)
67+
self.eval_impl(form)
68+
6469
def load_file_impl(self, id, file, path):
6570
pass
6671

cs_conn_socket_repl.py

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import json, os, re, sublime, sublime_plugin, threading
2-
from . import cs_common, cs_conn, cs_eval, cs_parser
2+
from . import cs_common, cs_conn, cs_eval, cs_eval_status, cs_parser
33

44
def lines(socket):
55
buffer = b''
@@ -63,6 +63,24 @@ def send(self, msg):
6363
cs_common.debug('SND {}', msg)
6464
self.socket.sendall(msg.encode())
6565

66+
def eval_impl(self, form):
67+
msg = ('{' +
68+
f'"id" {form.id}, ' +
69+
f'"op" "eval", ' +
70+
f'"code" "{form.code}", ' +
71+
f'"ns" "{form.ns}"')
72+
if form.file:
73+
msg += f', "file" "{form.file}"'
74+
75+
if form.line is not None:
76+
msg += f', "line" {form.line}'
77+
78+
if form.column is not None:
79+
msg += f', "column" {form.column}'
80+
81+
msg += '}'
82+
self.send(msg)
83+
6684
def eval(self, view, sel):
6785
for region in sel:
6886
# find regions to eval
@@ -84,20 +102,21 @@ def eval(self, view, sel):
84102

85103
# send msg
86104
(line, column) = view.rowcol_utf16(region.begin())
87-
line = line + 1
88-
code = view.substr(region).replace('\\', '\\\\').replace('"', '\\"')
89-
ns = cs_parser.namespace(view, region.begin()) or 'user'
90-
file = view.file_name()
91-
msg = ('{' +
92-
f'"id" {batch_id}, ' +
93-
f'"op" "eval", ' +
94-
f'"code" "{code}", ' +
95-
f'"ns" "{ns}", ' +
96-
f'"file" "{file}", ' +
97-
f'"line" {line}, ' +
98-
f'"column" {column}' +
99-
'}')
100-
self.send(msg)
105+
form = cs_common.Form(
106+
id = batch_id,
107+
code = view.substr(region).replace('\\', '\\\\').replace('"', '\\"'),
108+
ns = cs_parser.namespace(view, region.begin()) or 'user',
109+
line = line + 1,
110+
column = column,
111+
file = view.file_name()
112+
)
113+
self.eval_impl(form)
114+
115+
def eval_status(self, code, ns):
116+
batch_id = cs_eval.Eval.next_id()
117+
eval = cs_eval_status.StatusEval(code, id = f'{batch_id}.0', batch_id = batch_id)
118+
form = cs_common.Form(id = batch_id, code = code, ns = ns)
119+
self.eval_impl(form)
101120

102121
def load_file(self, view):
103122
self.eval(view, [sublime.Region(0, view.size())])

cs_eval_status.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@ class StatusEval:
88
"""
99
Displays 'eval_code' command results in status bar
1010
"""
11-
def __init__(self, code):
11+
def __init__(self, code, id = None, batch_id = None):
1212
global status_eval
1313
if status_eval:
1414
status_eval.erase()
1515

16-
id = cs_eval.Eval.next_id()
17-
self.id = id
18-
self.batch_id = id
16+
self.id = id or cs_eval.Eval.next_id()
17+
self.batch_id = batch_id or self.id
1918
self.code = code
2019
self.session = None
2120

@@ -38,20 +37,18 @@ def update(self, status, value, time_taken = None):
3837
value = time + ' ' + value
3938
cs_common.set_status(status_key, "❌ " + value)
4039

41-
def erase(self):
40+
def erase(self, interrupt = True):
4241
global status_eval
4342
cs_common.set_status(status_key, None)
4443
status_eval = None
45-
if self.status == "pending" and self.session:
44+
if interrupt and self.status == "pending" and self.session:
4645
cs_conn.conn.interrupt(self.id)
4746

4847
class ClojureSublimedEvalCodeCommand(sublime_plugin.ApplicationCommand):
49-
def run(self, code, ns = None):
50-
eval = StatusEval(code)
51-
if (not ns) and (view := eval.active_view()):
48+
def run(self, code, ns = None):
49+
if (not ns) and (view := cs_common.active_view()):
5250
ns = cs_parser.namespace(view, view.size())
53-
form = cs_common.Form(id = eval.id, code = code, ns = ns or 'user')
54-
cs_conn.conn.eval_impl(form)
51+
cs_conn.conn.eval_status(code, ns or 'user')
5552

5653
def is_enabled(self):
5754
if not cs_conn.ready():

src_clojure/clojure_sublimed/socket_repl.clj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,11 @@
9797
Compiler/LINE_BEFORE (.getLineNumber reader)
9898
Compiler/COLUMN_BEFORE (.getColumnNumber reader)
9999
Compiler/LINE_AFTER (.getLineNumber reader)
100-
Compiler/COLUMN_AFTER (.getColumnNumber reader)})
100+
Compiler/COLUMN_AFTER (.getColumnNumber reader)
101+
#'*e nil
102+
#'*1 nil
103+
#'*2 nil
104+
#'*3 nil})
101105
ret (try
102106
(loop [idx 0]
103107
(vswap! *context* assoc "idx" idx)

test_repl/forms.clj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727

2828
; delayed eval
2929
(do (Thread/sleep 1400) :first)
30-
*e
3130
(do (Thread/sleep 1300) :second)
3231
(do (Thread/sleep 1200) :third)
3332
(do (Thread/sleep 1100) :fourth)

0 commit comments

Comments
 (0)