Skip to content

Commit f3d3563

Browse files
plexusbbatsov
authored andcommitted
Use session classloader when loading deferred middleware
When loading CIDER middleware via the sideloader we need to make sure that extra namespaces that are loaded later are also requested via the sideloader. The original sideloader already provided a macro for this (with-session-classloader), we just need to use it. This does mean that now all our middlewares need to depend on the session middleware.
1 parent 235ff56 commit f3d3563

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
### Changes
1515

1616
* Parallelize `cider.nrepl.middleware.stacktrace/analyze-stacktrace`.
17+
* [#705](https://github.com/clojure-emacs/cider-nrepl/pull/705): Use the session classloader when loading deferred middleware
1718

1819
## 0.26.0 (2021-04-22)
1920

src/cider/nrepl.clj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
[nrepl.middleware.caught :refer [wrap-caught]]
1616
[nrepl.middleware.print :refer [wrap-print wrap-print-optional-arguments]]
1717
[nrepl.middleware.session :refer [session]]
18+
[nrepl.misc :as misc :refer [with-session-classloader]]
1819
[nrepl.server :as nrepl-server]))
1920

2021
;;; Functionality for deferred middleware loading
@@ -43,12 +44,13 @@
4344
(defn- handler-future
4445
"Check whether a delay exists in the `delayed-handlers`. Otherwise make a delay
4546
out of `fn-name` and place it in the atom. "
46-
[sym ns fn-name]
47+
[sym ns fn-name session]
4748
(or (get @delayed-handlers sym)
4849
(get (swap! delayed-handlers assoc sym
4950
(delay
5051
(locking require-lock
51-
(require ns)
52+
(with-session-classloader session
53+
(require ns))
5254
(resolve-or-fail fn-name))))
5355
sym)))
5456

@@ -58,7 +60,7 @@
5860
[fn-name handler msg]
5961
(let [ns (symbol (namespace `~fn-name))
6062
sym (symbol (name `~fn-name))]
61-
`(@(handler-future '~sym '~ns '~fn-name)
63+
`(@(handler-future '~sym '~ns '~fn-name (:session ~msg))
6264
~handler ~msg)))
6365

6466
(defmacro ^{:arglists '([name handler-fn descriptor]
@@ -79,7 +81,7 @@
7981
[descriptor trigger-it]
8082
[trigger-it descriptor])
8183
trigger-it (eval trigger-it)
82-
descriptor (eval descriptor)
84+
descriptor (update (eval descriptor) :requires (fnil conj #{}) #'nrepl.middleware.session/session)
8385
cond (if (or (nil? trigger-it) (set? trigger-it))
8486
(let [ops-set (into (-> descriptor :handles keys set) trigger-it)]
8587
`(~ops-set (:op ~'msg)))

0 commit comments

Comments
 (0)