@@ -64,44 +64,40 @@ def send(self, msg):
6464 self .socket .sendall (msg .encode ())
6565
6666 def eval (self , view , sel ):
67- regions = []
6867 for region in sel :
68+ # find regions to eval
6969 if region .empty ():
7070 region = cs_parser .topmost_form (view , region .begin ())
71- regions .append (region )
72- else :
73- start = region .begin ()
74- parsed = cs_parser .parse (view .substr (region ))
75- regions += [sublime .Region (start + child .start , start + child .end ) for child in parsed .children ]
76-
77- forms = []
78- batch_id = cs_eval .Eval .next_id ()
79- for region in regions :
80- eval = cs_eval .Eval (view , region , batch_id = batch_id )
71+
72+ start = region .begin ()
73+ parsed = cs_parser .parse (view .substr (region ))
74+ forms = [ \
75+ sublime .Region (start + child .start , start + child .end ) \
76+ for child in parsed .children \
77+ if child .name not in {'comment' , 'discard' } \
78+ ]
79+
80+ # create evals
81+ batch_id = cs_eval .Eval .next_id ()
82+ for idx , form in enumerate (forms ):
83+ eval = cs_eval .Eval (view , form , id = f'{ batch_id } .{ idx } ' , batch_id = batch_id )
84+
85+ # send msg
8186 (line , column ) = view .rowcol_utf16 (region .begin ())
8287 line = line + 1
83- form = cs_common .Form (
84- id = eval .id ,
85- code = view .substr (region ),
86- ns = cs_parser .namespace (view , region .begin ()) or 'user' ,
87- line = line ,
88- column = column ,
89- file = view .file_name ())
90- forms .append (form )
91-
92- msg = f'{{:id { batch_id } , :op :eval, :forms ['
93- for form in forms :
94- code = form .code .replace ('\\ ' , '\\ \\ ' ).replace ('"' , '\\ "' )
95- msg += f'{{:id { form .id } , :code "{ code } ", :ns { form .ns } '
96- if (line := form .line ) is not None :
97- msg += f', :line { line } '
98- if (column := form .column ) is not None :
99- msg += f', :column { column } '
100- if (file := form .file ) is not None :
101- msg += f', :file "{ file } "'
102- msg += f'}}, '
103- msg += f"]}}"
104- self .send (msg )
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 )
105101
106102 def load_file (self , view ):
107103 self .eval (view , [sublime .Region (0 , view .size ())])
@@ -115,27 +111,40 @@ def interrupt_impl(self, batch_id, id):
115111 self .send (msg )
116112
117113 def handle_value (self , msg ):
118- if ':ret' == msg [':tag' ] and (id := msg .get (':id' )):
119- cs_eval .on_success (id , msg .get (':val' ), time = msg .get (':time' ))
114+ if ':ret' == msg [':tag' ]:
115+ id = msg .get (':id' )
116+ idx = msg .get (':idx' )
117+ val = msg .get (':val' )
118+ time = msg .get ('time' )
119+ cs_eval .on_success (f'{ id } .{ idx } ' , val , time = time )
120120 return True
121121
122122 def handle_exception (self , msg ):
123- if ':ex' == msg [':tag' ] and (id := msg .get (':id' )):
124- cs_eval .on_exception (id , msg .get (':val' ), line = msg .get (':line' ), column = msg .get (':column' ), trace = msg .get (':trace' ))
123+ if ':ex' == msg [':tag' ]:
124+ id = msg .get (':id' )
125+ idx = msg .get (':idx' )
126+ val = msg .get (':val' )
127+ line = msg .get (':line' )
128+ column = msg .get (':column' )
129+ trace = msg .get (':trace' )
130+ cs_eval .on_exception (f'{ id } .{ idx } ' , val , line = line , column = column , trace = trace )
125131 return True
126132
127133 def handle_done (self , msg ):
128- if ':done' == msg [':tag' ] and (batch_id := msg .get (':id' )):
134+ if ':done' == msg [':tag' ]:
135+ batch_id = msg .get (':id' )
129136 cs_eval .on_done (batch_id )
137+ return True
130138
131139 def handle_lookup (self , msg ):
132- if ':lookup' == msg [':tag' ] and (id := msg .get (':id' )):
140+ if ':lookup' == msg [':tag' ]:
141+ id = msg .get (':id' )
133142 val = cs_parser .parse_as_dict (msg [':val' ])
134143 cs_eval .on_lookup (id , val )
135144 return True
136145
137146 def handle_msg (self , msg ):
138- cs_common .debug ('MSG {}' , msg )
147+ # cs_common.debug('MSG {}', msg)
139148 self .handle_value (msg ) \
140149 or self .handle_exception (msg ) \
141150 or self .handle_done (msg ) \
0 commit comments