Skip to content

Commit bdccd2e

Browse files
cskkscbbatsov
authored andcommitted
Update all inspector operations to use nREPL sync requests (#1821)
1 parent 2bfa9da commit bdccd2e

File tree

2 files changed

+89
-74
lines changed

2 files changed

+89
-74
lines changed

cider-debug.el

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ needed. It is expected to contain at least \"key\", \"input-type\", and
636636
(setq cider--debug-mode-response response)
637637
(cider--debug-mode 1)))
638638
(when inspect
639-
(cider-inspector--value-handler nil inspect)))
639+
(cider-inspector--render-value inspect)))
640640
;; If something goes wrong, we send a "quit" or the session hangs.
641641
(error (cider-debug-mode-send-reply ":quit" key)
642642
(message "Error encountered while handling the debug message: %S" e)))))

cider-inspector.el

Lines changed: 88 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -131,117 +131,132 @@ invoke any command through M-x and its variants, the value of `last-command'
131131
is not set to the command it invokes.")
132132

133133
;; Operations
134-
(defun cider-inspector--value-handler (_buffer value)
135-
(cider-make-popup-buffer cider-inspector-buffer 'cider-inspector-mode)
136-
(cider-inspector-render cider-inspector-buffer value)
137-
(cider-popup-buffer-display cider-inspector-buffer t)
138-
(with-current-buffer cider-inspector-buffer
139-
(when (eq cider-inspector-last-command 'cider-inspector-pop)
140-
(setq cider-inspector-last-command nil)
141-
;; Prevents error message being displayed when we try to pop
142-
;; from the top-level of a data struture
143-
(when cider-inspector-location-stack
144-
(goto-char (pop cider-inspector-location-stack))))
145-
146-
(when (eq cider-inspector-last-command 'cider-inspector-prev-page)
147-
(setq cider-inspector-last-command nil)
148-
;; Prevents error message being displayed when we try to
149-
;; go to a prev-page from the first page
150-
(when cider-inspector-page-location-stack
151-
(goto-char (pop cider-inspector-page-location-stack))))))
152-
153-
(defun cider-inspector--out-handler (_buffer value)
154-
(cider-emit-interactive-eval-output value))
155-
156-
(defun cider-inspector--err-handler (_buffer err)
157-
(cider-emit-interactive-eval-err-output err))
158-
159-
(defun cider-inspector-response-handler (buffer)
160-
"Create an inspector response handler for BUFFER.
161-
162-
The \"value\" slot of each successive response (if it exists) will be
163-
rendered into `cider-inspector-buffer'. Once a response is received with a
164-
\"status\" slot containing \"done\", `cider-inspector-buffer' will be
165-
displayed.
166-
167-
Used for all inspector nREPL ops."
168-
(nrepl-make-response-handler buffer
169-
#'cider-inspector--value-handler
170-
#'cider-inspector--out-handler
171-
#'cider-inspector--err-handler
172-
#'identity))
173-
174134
;;;###autoload
175135
(defun cider-inspect-expr (expr ns)
176136
"Evaluate EXPR in NS and inspect its value.
177137
Interactively, EXPR is read from the minibuffer, and NS the
178138
current buffer's namespace."
179139
(interactive (list (cider-read-from-minibuffer "Inspect expression: " (cider-sexp-at-point))
180140
(cider-current-ns)))
181-
(cider--prep-interactive-eval expr)
182-
(cider-nrepl-send-request
183-
(append (nrepl--eval-request expr (cider-current-session) ns)
184-
(list "inspect" "true"
185-
"page-size" (or cider-inspector-page-size 32)))
186-
(cider-inspector-response-handler (current-buffer))))
141+
(when-let (value (cider-sync-request:inspect-expr expr ns (or cider-inspector-page-size 32)))
142+
(cider-inspector--render-value value)))
187143

188144
(defun cider-inspector-pop ()
189145
(interactive)
190146
(setq cider-inspector-last-command 'cider-inspector-pop)
191-
(cider-nrepl-send-request
192-
(list "op" "inspect-pop"
193-
"session" (cider-current-session))
194-
(cider-inspector-response-handler (current-buffer))))
147+
(when-let (value (cider-sync-request:inspect-pop))
148+
(cider-inspector--render-value value)))
195149

196150
(defun cider-inspector-push (idx)
197151
(push (point) cider-inspector-location-stack)
198-
(cider-nrepl-send-request
199-
(list "op" "inspect-push"
200-
"idx" idx
201-
"session" (cider-current-session))
202-
(cider-inspector-response-handler (current-buffer))))
152+
(when-let (value (cider-sync-request:inspect-push idx))
153+
(cider-inspector--render-value value)))
203154

204155
(defun cider-inspector-refresh ()
205156
(interactive)
206-
(cider-nrepl-send-request
207-
(list "op" "inspect-refresh"
208-
"session" (cider-current-session))
209-
(cider-inspector-response-handler (current-buffer))))
157+
(when-let (value (cider-sync-request:inspect-refresh))
158+
(cider-inspector--render-value value)))
210159

211160
(defun cider-inspector-next-page ()
212161
"Jump to the next page when inspecting a paginated sequence/map.
213162
214163
Does nothing if already on the last page."
215164
(interactive)
216165
(push (point) cider-inspector-page-location-stack)
217-
(cider-nrepl-send-request
218-
(list "op" "inspect-next-page"
219-
"session" (cider-current-session))
220-
(cider-inspector-response-handler (current-buffer))))
166+
(when-let (value (cider-sync-request:inspect-next-page))
167+
(cider-inspector--render-value value)))
221168

222169
(defun cider-inspector-prev-page ()
223170
"Jump to the previous page when expecting a paginated sequence/map.
224171
225172
Does nothing if already on the first page."
226173
(interactive)
227174
(setq cider-inspector-last-command 'cider-inspector-prev-page)
228-
(cider-nrepl-send-request
229-
(list "op" "inspect-prev-page"
230-
"session" (cider-current-session))
231-
(cider-inspector-response-handler (current-buffer))))
175+
(when-let (value (cider-sync-request:inspect-prev-page))
176+
(cider-inspector--render-value value)))
232177

233178
(defun cider-inspector-set-page-size (page-size)
234179
"Set the page size in pagination mode to the specified PAGE-SIZE.
235180
236181
Current page will be reset to zero."
237-
(interactive "nPage size:")
238-
(cider-nrepl-send-request
239-
(list "op" "inspect-set-page-size"
240-
"session" (cider-current-session)
241-
"page-size" page-size)
242-
(cider-inspector-response-handler (current-buffer))))
182+
(interactive "nPage size: ")
183+
(when-let (value (cider-sync-request:inspect-set-page-size page-size))
184+
(cider-inspector--render-value value)))
185+
186+
;; nREPL interactions
187+
(defun cider-sync-request:inspect-pop ()
188+
"Move one level up in the inspector stack."
189+
(thread-first (list "op" "inspect-pop"
190+
"session" (cider-current-session))
191+
(cider-nrepl-send-sync-request)
192+
(nrepl-dict-get "value")))
193+
194+
(defun cider-sync-request:inspect-push (idx)
195+
"Inspect the inside value specified by IDX."
196+
(thread-first (list "op" "inspect-push"
197+
"idx" idx
198+
"session" (cider-current-session))
199+
(cider-nrepl-send-sync-request)
200+
(nrepl-dict-get "value")))
201+
202+
(defun cider-sync-request:inspect-refresh ()
203+
"Re-render the currently inspected value."
204+
(thread-first (list "op" "inspect-refresh"
205+
"session" (cider-current-session))
206+
(cider-nrepl-send-sync-request)
207+
(nrepl-dict-get "value")))
208+
209+
(defun cider-sync-request:inspect-next-page ()
210+
"Jump to the next page in paginated collection view."
211+
(thread-first (list "op" "inspect-next-page"
212+
"session" (cider-current-session))
213+
(cider-nrepl-send-sync-request)
214+
(nrepl-dict-get "value")))
215+
216+
(defun cider-sync-request:inspect-prev-page ()
217+
"Jump to the previous page in paginated collection view."
218+
(thread-first (list "op" "inspect-prev-page"
219+
"session" (cider-current-session))
220+
(cider-nrepl-send-sync-request)
221+
(nrepl-dict-get "value")))
222+
223+
(defun cider-sync-request:inspect-set-page-size (page-size)
224+
"Set the page size in paginated view to PAGE-SIZE."
225+
(thread-first (list "op" "inspect-set-page-size"
226+
"page-size" page-size
227+
"session" (cider-current-session))
228+
(cider-nrepl-send-sync-request)
229+
(nrepl-dict-get "value")))
230+
231+
(defun cider-sync-request:inspect-expr (expr ns page-size)
232+
"Evaluate EXPR in context of NS and inspect its result.
233+
Set the page size in paginated view to PAGE-SIZE."
234+
(thread-first (append (nrepl--eval-request expr (cider-current-session) ns)
235+
(list "inspect" "true"
236+
"page-size" page-size))
237+
(cider-nrepl-send-sync-request)
238+
(nrepl-dict-get "value")))
243239

244240
;; Render Inspector from Structured Values
241+
(defun cider-inspector--render-value (value)
242+
(cider-make-popup-buffer cider-inspector-buffer 'cider-inspector-mode)
243+
(cider-inspector-render cider-inspector-buffer value)
244+
(cider-popup-buffer-display cider-inspector-buffer t)
245+
(with-current-buffer cider-inspector-buffer
246+
(when (eq cider-inspector-last-command 'cider-inspector-pop)
247+
(setq cider-inspector-last-command nil)
248+
;; Prevents error message being displayed when we try to pop
249+
;; from the top-level of a data struture
250+
(when cider-inspector-location-stack
251+
(goto-char (pop cider-inspector-location-stack))))
252+
253+
(when (eq cider-inspector-last-command 'cider-inspector-prev-page)
254+
(setq cider-inspector-last-command nil)
255+
;; Prevents error message being displayed when we try to
256+
;; go to a prev-page from the first page
257+
(when cider-inspector-page-location-stack
258+
(goto-char (pop cider-inspector-page-location-stack))))))
259+
245260
(defun cider-inspector-render (buffer str)
246261
(with-current-buffer buffer
247262
(cider-inspector-mode)

0 commit comments

Comments
 (0)