Skip to content

Commit 33271f1

Browse files
yuhan0bbatsov
authored andcommitted
Handle streaming of results in eval handlers
1 parent 1d7916b commit 33271f1

File tree

1 file changed

+68
-48
lines changed

1 file changed

+68
-48
lines changed

cider-eval.el

Lines changed: 68 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -656,18 +656,21 @@ evaluation command. Honor `cider-auto-jump-to-error'."
656656
(defun cider-insert-eval-handler (&optional buffer)
657657
"Make an nREPL evaluation handler for the BUFFER.
658658
The handler simply inserts the result value in BUFFER."
659-
(let ((eval-buffer (current-buffer)))
659+
(let ((eval-buffer (current-buffer))
660+
(res ""))
660661
(nrepl-make-response-handler (or buffer eval-buffer)
661662
(lambda (_buffer value)
662663
(with-current-buffer buffer
663664
(insert value))
664665
(when cider-eval-register
665-
(set-register cider-eval-register value)) )
666+
(setq res (concat res value))))
666667
(lambda (_buffer out)
667668
(cider-repl-emit-interactive-stdout out))
668669
(lambda (_buffer err)
669670
(cider-handle-compilation-errors err eval-buffer))
670-
'())))
671+
(lambda (_buffer)
672+
(when cider-eval-register
673+
(set-register cider-eval-register res))))))
671674

672675
(defun cider--emit-interactive-eval-output (output repl-emit-function)
673676
"Emit output resulting from interactive code evaluation.
@@ -726,17 +729,12 @@ when `cider-auto-inspect-after-eval' is non-nil."
726729
(end (or (car-safe (cdr-safe place)) place))
727730
(beg (when beg (copy-marker beg)))
728731
(end (when end (copy-marker end)))
729-
(fringed nil))
732+
(fringed nil)
733+
(res ""))
730734
(nrepl-make-response-handler (or buffer eval-buffer)
731735
(lambda (_buffer value)
732-
(if beg
733-
(unless fringed
734-
(cider--make-fringe-overlays-for-region beg end)
735-
(setq fringed t))
736-
(cider--make-fringe-overlay end))
737-
(cider--display-interactive-eval-result value end)
738-
(when cider-eval-register
739-
(set-register cider-eval-register value)))
736+
(setq res (concat res value))
737+
(cider--display-interactive-eval-result res end))
740738
(lambda (_buffer out)
741739
(cider-emit-interactive-eval-output out))
742740
(lambda (_buffer err)
@@ -746,20 +744,31 @@ when `cider-auto-inspect-after-eval' is non-nil."
746744
(cider--display-interactive-eval-result
747745
err end 'cider-error-overlay-face)))
748746
(cider-handle-compilation-errors err eval-buffer))
749-
(when (and cider-auto-inspect-after-eval
750-
(boundp 'cider-inspector-buffer)
751-
(windowp (get-buffer-window cider-inspector-buffer 'visible)))
752-
(lambda (buffer)
747+
(lambda (buffer)
748+
(if beg
749+
(unless fringed
750+
(cider--make-fringe-overlays-for-region beg end)
751+
(setq fringed t))
752+
(cider--make-fringe-overlay end))
753+
(when (and cider-auto-inspect-after-eval
754+
(boundp 'cider-inspector-buffer)
755+
(windowp (get-buffer-window cider-inspector-buffer 'visible)))
753756
(cider-inspect-last-result)
754-
(select-window (get-buffer-window buffer)))))))
757+
(select-window (get-buffer-window buffer)))
758+
(when cider-eval-register
759+
(set-register cider-eval-register res))))))
760+
755761

756762
(defun cider-load-file-handler (&optional buffer done-handler)
757763
"Make a load file handler for BUFFER.
758764
Optional argument DONE-HANDLER lambda will be run once load is complete."
759-
(let ((eval-buffer (current-buffer)))
765+
(let ((eval-buffer (current-buffer))
766+
(res ""))
760767
(nrepl-make-response-handler (or buffer eval-buffer)
761768
(lambda (buffer value)
762769
(cider--display-interactive-eval-result value)
770+
(when cider-eval-register
771+
(setq res (concat res value)))
763772
(when (buffer-live-p buffer)
764773
(with-current-buffer buffer
765774
(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."
769778
(lambda (_buffer err)
770779
(cider-emit-interactive-eval-err-output err)
771780
(cider-handle-compilation-errors err eval-buffer))
772-
(or done-handler '())
781+
(lambda (buffer)
782+
(when cider-eval-register
783+
(set-register cider-eval-register res))
784+
(when done-handler
785+
(funcall done-handler buffer)))
773786
(lambda ()
774787
(funcall nrepl-err-handler)))))
775788

776789
(defun cider-eval-print-handler (&optional buffer)
777790
"Make a handler for evaluating and printing result in BUFFER."
778-
(nrepl-make-response-handler (or buffer (current-buffer))
779-
(lambda (buffer value)
780-
(with-current-buffer buffer
781-
(insert
782-
(if (derived-mode-p 'cider-clojure-interaction-mode)
783-
(format "\n%s\n" value)
784-
value)))
785-
(when cider-eval-register
786-
(set-register cider-eval-register value)))
787-
(lambda (_buffer out)
788-
(cider-emit-interactive-eval-output out))
789-
(lambda (_buffer err)
790-
(cider-emit-interactive-eval-err-output err))
791-
'()))
791+
(let ((res ""))
792+
(nrepl-make-response-handler (or buffer (current-buffer))
793+
(lambda (buffer value)
794+
(with-current-buffer buffer
795+
(insert
796+
(if (derived-mode-p 'cider-clojure-interaction-mode)
797+
(format "\n%s\n" value)
798+
value)))
799+
(when cider-eval-register
800+
(setq res (concat res value))))
801+
(lambda (_buffer out)
802+
(cider-emit-interactive-eval-output out))
803+
(lambda (_buffer err)
804+
(cider-emit-interactive-eval-err-output err))
805+
(lambda (_buffer)
806+
(when cider-eval-register
807+
(set-register cider-eval-register res))))))
792808

793809
(defun cider-eval-print-with-comment-handler (buffer location comment-prefix)
794810
"Make a handler for evaluating and printing commented results in BUFFER.
795811
LOCATION is the location marker at which to insert. COMMENT-PREFIX is the
796812
comment prefix to use."
797-
(nrepl-make-response-handler buffer
798-
(lambda (buffer value)
799-
(with-current-buffer buffer
800-
(save-excursion
801-
(goto-char (marker-position location))
802-
(insert (concat comment-prefix
803-
value "\n"))))
804-
(when cider-eval-register
805-
(set-register cider-eval-register value)))
806-
(lambda (_buffer out)
807-
(cider-emit-interactive-eval-output out))
808-
(lambda (_buffer err)
809-
(cider-emit-interactive-eval-err-output err))
810-
'()))
813+
(let ((res ""))
814+
(nrepl-make-response-handler buffer
815+
(lambda (_buffer value)
816+
(setq res (concat res value)))
817+
(lambda (_buffer out)
818+
(cider-emit-interactive-eval-output out))
819+
(lambda (_buffer err)
820+
(cider-emit-interactive-eval-err-output err))
821+
(lambda (buffer)
822+
(with-current-buffer buffer
823+
(save-excursion
824+
(goto-char (marker-position location))
825+
(insert (concat comment-prefix
826+
res "\n"))))
827+
(when cider-eval-register
828+
(set-register cider-eval-register value))))))
811829

812830
(defun cider-maybe-insert-multiline-comment (result comment-prefix continued-prefix comment-postfix)
813831
"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."
842860
(with-current-buffer buffer
843861
(save-excursion
844862
(goto-char (marker-position location))
845-
(cider-maybe-insert-multiline-comment res comment-prefix continued-prefix comment-postfix))))
863+
(cider-maybe-insert-multiline-comment res comment-prefix continued-prefix comment-postfix)))
864+
(when cider-eval-register
865+
(set-register cider-eval-register res)))
846866
nil
847867
nil
848868
(lambda (_buffer warning)

0 commit comments

Comments
 (0)