nrepl-lazuli 0.3.0 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nrepl-lazuli/connection.rb +52 -9
- data/lib/nrepl-lazuli/server.rb +11 -8
- data/lib/nrepl-lazuli.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eabdc5490b15f4402769dbdf5a21d3eb27e206df7a5e1effcbcd8d3d919ea9fa
|
4
|
+
data.tar.gz: f3d43cf6d6d1065f676147e87a03280d08fbe29bf28f9deeede58a8cfff126fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49da53ef4958b719b6c46835431bdc8cbc78a5d0624d28b88994b8589ffcfd06c71fb5d44056ee1af4ec73a49a8dcadab3d03c0d3b88d6882f6df5f5a1a8386f
|
7
|
+
data.tar.gz: fb81f3e46cd3e4ec8a5b2da284b5310d3da694ec552cd3246722b19f9a57fa4404e0998faee52c63db760d9cf009fbbb0b788a0ee30c944eb8d236a322fa9dec
|
@@ -87,13 +87,42 @@ module NREPL
|
|
87
87
|
'status' => ['done', 'interrupted'],
|
88
88
|
'op' => msg['op']
|
89
89
|
}))
|
90
|
-
|
91
90
|
else
|
92
91
|
send_msg(response_for(msg, {
|
93
92
|
'status' => ['done'],
|
94
93
|
'op' => msg['op']
|
95
94
|
}))
|
96
95
|
end
|
96
|
+
when 'update_watch_lines'
|
97
|
+
msg['id'] ||= "eval_#{@counter += 1}"
|
98
|
+
file = msg['file']
|
99
|
+
initial_line = msg['line']
|
100
|
+
delta = msg['delta']
|
101
|
+
rows_bindings = @bindings[file] || {}
|
102
|
+
rows_bindings.keys.each do |row|
|
103
|
+
if row > initial_line
|
104
|
+
watch = rows_bindings.delete(row)
|
105
|
+
new_row = row + delta
|
106
|
+
old_id = "#{file}:#{row+1}"
|
107
|
+
new_id = "#{file}:#{new_row+1}"
|
108
|
+
|
109
|
+
watch.keys.each do |id|
|
110
|
+
if id == old_id
|
111
|
+
watch_per_id = @bindings_by_id.delete(id)
|
112
|
+
@bindings_by_id[new_id] = watch_per_id.update(row: new_row)
|
113
|
+
else
|
114
|
+
@bindings_by_id[id][:row] = new_row
|
115
|
+
end
|
116
|
+
end
|
117
|
+
rows_bindings[new_row] = watch
|
118
|
+
old_binding = watch.delete(old_id)
|
119
|
+
watch[new_id] = old_binding if(old_binding)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
get_watches(msg)
|
124
|
+
when 'get_watches'
|
125
|
+
get_watches(msg)
|
97
126
|
when 'watches_for_file'
|
98
127
|
msg['id'] ||= "eval_#{@counter += 1}"
|
99
128
|
file = msg['file']
|
@@ -112,6 +141,22 @@ module NREPL
|
|
112
141
|
end
|
113
142
|
end
|
114
143
|
|
144
|
+
private def get_watches(msg)
|
145
|
+
msg['id'] ||= "eval_#{@counter += 1}"
|
146
|
+
file = msg['file']
|
147
|
+
rows_bindings = @bindings[file] || {}
|
148
|
+
watches = rows_bindings.flat_map do |row, watch|
|
149
|
+
watch.map do |id, _|
|
150
|
+
{ 'file' => file, 'line' => row, 'id' => id }
|
151
|
+
end
|
152
|
+
end
|
153
|
+
send_msg(response_for(msg, {
|
154
|
+
'status' => ['done'],
|
155
|
+
'watches' => watches.sort_by { |w| w['line'] },
|
156
|
+
'op' => msg['op']
|
157
|
+
}))
|
158
|
+
end
|
159
|
+
|
115
160
|
private def eval_op(msg, stop)
|
116
161
|
msg['id'] ||= "eval_#{@counter += 1}"
|
117
162
|
id = msg['id']
|
@@ -173,6 +218,12 @@ module NREPL
|
|
173
218
|
end
|
174
219
|
end
|
175
220
|
|
221
|
+
private def evaluate_code(code, file, line, bind)
|
222
|
+
bind ||= TOPLEVEL_BINDING.dup
|
223
|
+
line = line ? line + 1 : 1
|
224
|
+
eval(code, bind, file || "EVAL", line).inspect
|
225
|
+
end
|
226
|
+
|
176
227
|
private def find_row_based_binding(msg)
|
177
228
|
file = msg['file']
|
178
229
|
row = msg['line']
|
@@ -250,11 +301,3 @@ module NREPL
|
|
250
301
|
end
|
251
302
|
end
|
252
303
|
end
|
253
|
-
|
254
|
-
# To avoid locally binding with the NREPL::Connection module
|
255
|
-
b = binding
|
256
|
-
define_method(:evaluate_code) do |code, file, line, bind|
|
257
|
-
bind ||= b
|
258
|
-
line = line ? line + 1 : 1
|
259
|
-
eval(code, bind, file || "EVAL", line).inspect
|
260
|
-
end
|
data/lib/nrepl-lazuli/server.rb
CHANGED
@@ -13,7 +13,7 @@ module NREPL
|
|
13
13
|
attr_reader :debug, :port, :host
|
14
14
|
alias debug? debug
|
15
15
|
|
16
|
-
def self.spawn(args)
|
16
|
+
def self.spawn(args = {})
|
17
17
|
t = Thread.new {
|
18
18
|
new(**args).start
|
19
19
|
}
|
@@ -96,17 +96,20 @@ module NREPL
|
|
96
96
|
def auto_create_bindings!
|
97
97
|
dir_regex = Regexp.new("^#{Regexp.escape(@pwd)}")
|
98
98
|
@call_trace = TracePoint.new(:class, :call) do |tp|
|
99
|
-
|
99
|
+
path = tp.path
|
100
|
+
next if tp.path =~ /^(\<|.eval)/
|
101
|
+
path = File.join(@pwd, path) if File.dirname(path) == '.'
|
102
|
+
id = "#{path}:#{tp.lineno}"
|
100
103
|
b = tp.binding
|
101
|
-
@bindings_by_id[id] = {binding: b, file:
|
102
|
-
@bindings[
|
103
|
-
@bindings[
|
104
|
-
@bindings[
|
105
|
-
if
|
104
|
+
@bindings_by_id[id] = {binding: b, file: path, row: tp.lineno-1}
|
105
|
+
@bindings[path] ||= {}
|
106
|
+
@bindings[path][tp.lineno-1] ||= {}
|
107
|
+
@bindings[path][tp.lineno-1][id] = b
|
108
|
+
if path =~ dir_regex
|
106
109
|
@connections.each do |connection|
|
107
110
|
connection.send_msg(
|
108
111
|
'op' => 'hit_auto_watch',
|
109
|
-
'file' =>
|
112
|
+
'file' => path,
|
110
113
|
'line' => tp.lineno-1,
|
111
114
|
'status' => ['done']
|
112
115
|
)
|
data/lib/nrepl-lazuli.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nrepl-lazuli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maurício Szabo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bencode
|
@@ -38,7 +38,8 @@ files:
|
|
38
38
|
homepage: https://gitlab.com/clj-editors/nrepl-lazuli
|
39
39
|
licenses:
|
40
40
|
- MIT
|
41
|
-
metadata:
|
41
|
+
metadata:
|
42
|
+
source_code_uri: https://gitlab.com/clj-editors/nrepl-lazuli
|
42
43
|
post_install_message:
|
43
44
|
rdoc_options: []
|
44
45
|
require_paths:
|