Skip to content

Commit c40a9c7

Browse files
committedSep 3, 2024
[macroexpand] Ensure print mw doesn't interfere with expansion
1 parent 304ba98 commit c40a9c7

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed
 

‎CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## master (unreleased)
44

5+
* [#900](https://github.com/clojure-emacs/cider-nrepl/pull/900): Fix print middleware interfering with macroexpansion.
6+
57
## 0.50.1 (2024-08-28)
68

79
* Bump `orchard` to [0.27.2](https://github.com/clojure-emacs/orchard/blob/master/CHANGELOG.md#0272-2024-08-28).

‎src/cider/nrepl/middleware/macroexpand.clj

+7-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,13 @@
153153
expander-code (format "(%s '%s)" expander-fn code)
154154
transport (eval-interceptor-transport
155155
msg macroexpansion-reply-clj :macroexpand-error)]
156-
(assoc msg :op "eval", :code expander-code, :transport transport))
156+
(assoc msg
157+
:op "eval"
158+
:code expander-code
159+
:transport transport
160+
;; Make sure nrepl.middleware.print or alternatives don't
161+
;; stringify our value before it gets back to us.
162+
:nrepl.middleware.print/keys []))
157163
(catch Exception ex
158164
(send-middleware-error msg ex)
159165
nil))]

‎test/clj/cider/nrepl/middleware/macroexpand_test.clj

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
(ns cider.nrepl.middleware.macroexpand-test
22
(:refer-clojure :exclude [zero? zipmap])
33
(:require
4+
[cider.nrepl]
45
[cider.nrepl.test-session :as session]
56
[clojure.set :as set]
67
[clojure.string]
7-
[clojure.test :refer :all]))
8+
[clojure.test :refer :all]
9+
[nrepl.middleware.interruptible-eval]
10+
[nrepl.middleware.print]
11+
[nrepl.middleware.session]))
812

913
(use-fixtures :once session/session-fixture)
1014

@@ -166,3 +170,25 @@
166170
:print-meta "true"})]
167171
(is (= "(def ^{:arglists (quote ([]))} x (fn ([] nil)))" expansion))
168172
(is (= #{"done"} status)))))
173+
174+
(deftest print-mw-before-macroexpand-mw-test
175+
(testing "if print middleware ends up before macroexpand mw on the way up,
176+
it doesn't mess up macroexpansion output"
177+
;; Start a custom server
178+
(binding [session/*handler* (cider.nrepl/wrap-macroexpand
179+
(nrepl.middleware.session/session
180+
(nrepl.middleware.print/wrap-print
181+
(nrepl.middleware.interruptible-eval/interruptible-eval nil))))]
182+
(session/session-fixture
183+
(fn []
184+
(let [{:keys [expansion status]} (session/message {:op "macroexpand"
185+
:expander "macroexpand-1"
186+
:code (:expr code)
187+
:display-namespaces "none"})]
188+
(is (= (:expanded-1 code) expansion)))
189+
190+
(let [{:keys [expansion status]} (session/message {:op "macroexpand"
191+
:expander "macroexpand"
192+
:code (:expr code)
193+
:display-namespaces "none"})]
194+
(is (= (:expanded code) expansion))))))))

0 commit comments

Comments
 (0)