Skip to content

Commit d07b7a0

Browse files
author
Bozhidar Batsov
committed
[Fix #631] Set file and line metadata when doing interactive evaluation
1 parent 782a39f commit d07b7a0

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ lein command invoked by `cider-jack-in`.
6363
`clojure.core/let` is always available as `let`.
6464
* [#772](https://github.com/clojure-emacs/cider/issues/772): Don't try to read Clojure results as
6565
Emacs Lisp code.
66+
* [#631](https://github.com/clojure-emacs/cider/issues/631): Set `file` and `line` metadata when
67+
doing interactive evaluation.
6668

6769
## 0.7.0 / 2014-08-05
6870

cider-interaction.el

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,8 @@ reading input."
452452
The two arguments START and END are character positions;
453453
they can be in either order."
454454
(interactive "r")
455-
(cider-interactive-eval (buffer-substring-no-properties start end)))
455+
(let ((code (buffer-substring-no-properties start end)))
456+
(cider-interactive-eval code start)))
456457

457458
(defun cider-eval-buffer ()
458459
"Evaluate the current buffer."
@@ -477,10 +478,11 @@ they can be in either order."
477478
"Evaluate the current toplevel form, and print result in the minibuffer.
478479
With a PREFIX argument, print the result in the current buffer."
479480
(interactive "P")
480-
(let ((form (cider-defun-at-point)))
481+
(let ((form (cider-defun-at-point))
482+
(start-pos (car (cider--region-for-defun-at-point))))
481483
(if prefix
482484
(cider-interactive-eval-print form)
483-
(cider-interactive-eval form))))
485+
(cider-interactive-eval form start-pos))))
484486

485487
(defun cider-ns-form ()
486488
"Retrieve the ns form."
@@ -540,6 +542,11 @@ With a PREFIX argument, print the result in the current buffer."
540542
(point))
541543
(point)))
542544

545+
(defun cider-last-sexp-start-pos ()
546+
(save-excursion
547+
(backward-sexp)
548+
(point)))
549+
543550
;;;
544551
(defun cider-tramp-prefix (&optional buffer)
545552
"Use the filename for BUFFER to determine a tramp prefix.
@@ -1291,13 +1298,31 @@ When invoked with a prefix ARG the command doesn't prompt for confirmation."
12911298
(cider-interactive-eval-print-handler buffer)
12921299
(cider-current-ns))))
12931300

1294-
(defun cider-interactive-eval (form)
1301+
(defun cider--dummy-file-contents (form start-pos)
1302+
(let ((current-ns (cider-current-ns))
1303+
(start-line (line-number-at-pos start-pos)))
1304+
(with-temp-buffer
1305+
(insert (format "(ns %s)" current-ns))
1306+
(dotimes (_ (1- start-line))
1307+
(insert "\n"))
1308+
(insert form)
1309+
(buffer-string))))
1310+
1311+
(defun cider-interactive-eval (form &optional start-pos)
12951312
"Evaluate the given FORM and print value in minibuffer."
12961313
(cider--clear-compilation-highlights)
1297-
(let ((buffer (current-buffer)))
1298-
(cider-eval form
1299-
(cider-interactive-eval-handler buffer)
1300-
(cider-current-ns))))
1314+
(let ((buffer (current-buffer))
1315+
(filename (buffer-file-name)))
1316+
(if buffer-file-name
1317+
(nrepl-send-request (list "op" "load-file"
1318+
"session" (nrepl-current-session)
1319+
"file" (cider--dummy-file-contents form start-pos)
1320+
"file-path" (funcall cider-to-nrepl-filename-function (cider--server-filename filename))
1321+
"file-name" (file-name-nondirectory filename))
1322+
(cider-interactive-eval-handler buffer))
1323+
(cider-eval form
1324+
(cider-interactive-eval-handler buffer)
1325+
(cider-current-ns)))))
13011326

13021327
(defun cider-interactive-eval-to-repl (form)
13031328
"Evaluate the given FORM and print it's value in REPL buffer."
@@ -1312,7 +1337,7 @@ If invoked with a PREFIX argument, print the result in the current buffer."
13121337
(interactive "P")
13131338
(if prefix
13141339
(cider-interactive-eval-print (cider-last-sexp))
1315-
(cider-interactive-eval (cider-last-sexp))))
1340+
(cider-interactive-eval (cider-last-sexp) (cider-last-sexp-start-pos))))
13161341

13171342
(defun cider-eval-last-sexp-and-replace ()
13181343
"Evaluate the expression preceding point and replace it with its result."

0 commit comments

Comments
 (0)