branch: elpa/cider
commit 33271f1342747017edb1c9f7bc940e0c0254df07
Author: yuhan0 <qyth...@gmail.com>
Commit: Bozhidar Batsov <bozhi...@batsov.dev>

    Handle streaming of results in eval handlers
---
 cider-eval.el | 116 ++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 68 insertions(+), 48 deletions(-)

diff --git a/cider-eval.el b/cider-eval.el
index 76791d48bf..fe0cba1c67 100644
--- a/cider-eval.el
+++ b/cider-eval.el
@@ -656,18 +656,21 @@ evaluation command.  Honor `cider-auto-jump-to-error'."
 (defun cider-insert-eval-handler (&optional buffer)
   "Make an nREPL evaluation handler for the BUFFER.
 The handler simply inserts the result value in BUFFER."
-  (let ((eval-buffer (current-buffer)))
+  (let ((eval-buffer (current-buffer))
+        (res ""))
     (nrepl-make-response-handler (or buffer eval-buffer)
                                  (lambda (_buffer value)
                                    (with-current-buffer buffer
                                      (insert value))
                                    (when cider-eval-register
-                                     (set-register cider-eval-register value)) 
                                  )
+                                     (setq res (concat res value))))
                                  (lambda (_buffer out)
                                    (cider-repl-emit-interactive-stdout out))
                                  (lambda (_buffer err)
                                    (cider-handle-compilation-errors err 
eval-buffer))
-                                 '())))
+                                 (lambda (_buffer)
+                                   (when cider-eval-register
+                                     (set-register cider-eval-register 
res))))))
 
 (defun cider--emit-interactive-eval-output (output repl-emit-function)
   "Emit output resulting from interactive code evaluation.
@@ -726,17 +729,12 @@ when `cider-auto-inspect-after-eval' is non-nil."
          (end (or (car-safe (cdr-safe place)) place))
          (beg (when beg (copy-marker beg)))
          (end (when end (copy-marker end)))
-         (fringed nil))
+         (fringed nil)
+         (res ""))
     (nrepl-make-response-handler (or buffer eval-buffer)
                                  (lambda (_buffer value)
-                                   (if beg
-                                       (unless fringed
-                                         
(cider--make-fringe-overlays-for-region beg end)
-                                         (setq fringed t))
-                                     (cider--make-fringe-overlay end))
-                                   (cider--display-interactive-eval-result 
value end)
-                                   (when cider-eval-register
-                                     (set-register cider-eval-register value)))
+                                   (setq res (concat res value))
+                                   (cider--display-interactive-eval-result res 
end))
                                  (lambda (_buffer out)
                                    (cider-emit-interactive-eval-output out))
                                  (lambda (_buffer err)
@@ -746,20 +744,31 @@ when `cider-auto-inspect-after-eval' is non-nil."
                                        (cider--display-interactive-eval-result
                                         err end 'cider-error-overlay-face)))
                                    (cider-handle-compilation-errors err 
eval-buffer))
-                                 (when (and cider-auto-inspect-after-eval
-                                            (boundp 'cider-inspector-buffer)
-                                            (windowp (get-buffer-window 
cider-inspector-buffer 'visible)))
-                                   (lambda (buffer)
+                                 (lambda (buffer)
+                                   (if beg
+                                       (unless fringed
+                                         
(cider--make-fringe-overlays-for-region beg end)
+                                         (setq fringed t))
+                                     (cider--make-fringe-overlay end))
+                                   (when (and cider-auto-inspect-after-eval
+                                              (boundp 'cider-inspector-buffer)
+                                              (windowp (get-buffer-window 
cider-inspector-buffer 'visible)))
                                      (cider-inspect-last-result)
-                                     (select-window (get-buffer-window 
buffer)))))))
+                                     (select-window (get-buffer-window 
buffer)))
+                                   (when cider-eval-register
+                                     (set-register cider-eval-register 
res))))))
+
 
 (defun cider-load-file-handler (&optional buffer done-handler)
   "Make a load file handler for BUFFER.
 Optional argument DONE-HANDLER lambda will be run once load is complete."
-  (let ((eval-buffer (current-buffer)))
+  (let ((eval-buffer (current-buffer))
+        (res ""))
     (nrepl-make-response-handler (or buffer eval-buffer)
                                  (lambda (buffer value)
                                    (cider--display-interactive-eval-result 
value)
+                                   (when cider-eval-register
+                                     (setq res (concat res value)))
                                    (when (buffer-live-p buffer)
                                      (with-current-buffer buffer
                                        (cider--make-fringe-overlays-for-region 
(point-min) (point-max))
@@ -769,45 +778,54 @@ Optional argument DONE-HANDLER lambda will be run once 
load is complete."
                                  (lambda (_buffer err)
                                    (cider-emit-interactive-eval-err-output err)
                                    (cider-handle-compilation-errors err 
eval-buffer))
-                                 (or done-handler '())
+                                 (lambda (buffer)
+                                   (when cider-eval-register
+                                     (set-register cider-eval-register res))
+                                   (when done-handler
+                                     (funcall done-handler buffer)))
                                  (lambda ()
                                    (funcall nrepl-err-handler)))))
 
 (defun cider-eval-print-handler (&optional buffer)
   "Make a handler for evaluating and printing result in BUFFER."
-  (nrepl-make-response-handler (or buffer (current-buffer))
-                               (lambda (buffer value)
-                                 (with-current-buffer buffer
-                                   (insert
-                                    (if (derived-mode-p 
'cider-clojure-interaction-mode)
-                                        (format "\n%s\n" value)
-                                      value)))
-                                 (when cider-eval-register
-                                   (set-register cider-eval-register value)))
-                               (lambda (_buffer out)
-                                 (cider-emit-interactive-eval-output out))
-                               (lambda (_buffer err)
-                                 (cider-emit-interactive-eval-err-output err))
-                               '()))
+  (let ((res ""))
+    (nrepl-make-response-handler (or buffer (current-buffer))
+                                 (lambda (buffer value)
+                                   (with-current-buffer buffer
+                                     (insert
+                                      (if (derived-mode-p 
'cider-clojure-interaction-mode)
+                                          (format "\n%s\n" value)
+                                        value)))
+                                   (when cider-eval-register
+                                     (setq res (concat res value))))
+                                 (lambda (_buffer out)
+                                   (cider-emit-interactive-eval-output out))
+                                 (lambda (_buffer err)
+                                   (cider-emit-interactive-eval-err-output 
err))
+                                 (lambda (_buffer)
+                                   (when cider-eval-register
+                                     (set-register cider-eval-register 
res))))))
 
 (defun cider-eval-print-with-comment-handler (buffer location comment-prefix)
   "Make a handler for evaluating and printing commented results in BUFFER.
 LOCATION is the location marker at which to insert.  COMMENT-PREFIX is the
 comment prefix to use."
-  (nrepl-make-response-handler buffer
-                               (lambda (buffer value)
-                                 (with-current-buffer buffer
-                                   (save-excursion
-                                     (goto-char (marker-position location))
-                                     (insert (concat comment-prefix
-                                                     value "\n"))))
-                                 (when cider-eval-register
-                                   (set-register cider-eval-register value)))
-                               (lambda (_buffer out)
-                                 (cider-emit-interactive-eval-output out))
-                               (lambda (_buffer err)
-                                 (cider-emit-interactive-eval-err-output err))
-                               '()))
+  (let ((res ""))
+    (nrepl-make-response-handler buffer
+                                 (lambda (_buffer value)
+                                   (setq res (concat res value)))
+                                 (lambda (_buffer out)
+                                   (cider-emit-interactive-eval-output out))
+                                 (lambda (_buffer err)
+                                   (cider-emit-interactive-eval-err-output 
err))
+                                 (lambda (buffer)
+                                   (with-current-buffer buffer
+                                     (save-excursion
+                                       (goto-char (marker-position location))
+                                       (insert (concat comment-prefix
+                                                       res "\n"))))
+                                   (when cider-eval-register
+                                     (set-register cider-eval-register 
value))))))
 
 (defun cider-maybe-insert-multiline-comment (result comment-prefix 
continued-prefix comment-postfix)
   "Insert eval RESULT at current location if RESULT is not empty.
@@ -842,7 +860,9 @@ COMMENT-POSTFIX is the text to output after the last line."
        (with-current-buffer buffer
          (save-excursion
            (goto-char (marker-position location))
-           (cider-maybe-insert-multiline-comment res comment-prefix 
continued-prefix comment-postfix))))
+           (cider-maybe-insert-multiline-comment res comment-prefix 
continued-prefix comment-postfix)))
+       (when cider-eval-register
+         (set-register cider-eval-register res)))
      nil
      nil
      (lambda (_buffer warning)

Reply via email to