Skip to content

Commit 9395c10

Browse files
committed
Improve docs and naming in differed middleware tooling
- Add docs - run-delayed-handler --> run-deferred-handler - `handle` argument --> `trigger-it`
1 parent bdfa5d7 commit 9395c10

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

src/cider/nrepl.clj

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,57 @@
88
[cider.nrepl.middleware.pprint :as pprint]
99
[cider.nrepl.print-method]))
1010

11-
(def DELAYS (atom nil))
11+
(def DELAYS
12+
"Map of `delay`s holding deferred middleware handlers."
13+
(atom nil))
1214

1315
(defn- resolve-or-fail [sym]
1416
(or (resolve sym)
1517
(throw (IllegalArgumentException. (format "Cannot resolve %s" sym)))))
1618

17-
(defmacro run-delayed-handler
18-
"Make a delay of `fn-name` and place it in `DELAYS` atom at compile time.
19-
Require and invoke the delay at run-time with arguments h and msg."
20-
[fn-name h msg]
19+
(defmacro run-deferred-handler
20+
"Make a delay out of `fn-name` and place it in `DELAYS` atom at compile time.
21+
Require and invoke the delay at run-time with arguments `handler` and
22+
`msg`. `fn-name` must be a namespaced symbol (unquoted)."
23+
[fn-name handler msg]
2124
(let [ns (symbol (namespace `~fn-name))
2225
sym (symbol (name `~fn-name))]
2326
(swap! DELAYS assoc sym
2427
(delay
2528
(require `~ns)
2629
(resolve-or-fail `~fn-name)))
27-
`(@(get @DELAYS '~sym) ~h ~msg)))
30+
`(@(get @DELAYS '~sym) ~handler ~msg)))
2831

2932
(defmacro ^{:arglists '([name handler-fn descriptor]
30-
[name handler-fn handle descriptor])}
33+
[name handler-fn trigger-it descriptor])}
3134
def-wrapper
3235
"Define delayed middleware (e.g. wrap-xyz).
3336
`handler-fn` is an unquoted name of a function that takes two arguments -
3437
`handler` and `message`. It is called only when certain conditions are met as
35-
expressed by the optional `handle` argument. `handle` can be either a function
36-
or a set of ops (strings). When a function, it must take a `msg` and return
37-
truthy value when `handler-fn` should run. When `handle` is missing,
38-
`handle-fn` is called when :op of `msg` is in the set of keys of the :handles
39-
slot of the `descriptor`. When `handle` is a set it should contain extra ops,
40-
besides those in :handles, on which `handle-fn` is triggered. `descriptor` is
41-
passed to nREPLs `set-descriptor!`."
42-
[name handler-fn & [handle descriptor]]
43-
(let [[descriptor handle] (if descriptor [descriptor handle] [handle descriptor])
44-
handle (eval handle)
38+
expressed by the optional `trigger-it` argument. `trigger-it` can be either a
39+
function or a set of ops (strings). When a function, it must take a `msg` and
40+
return truthy value when `handler-fn` should run. When `trigger-it` is missing,
41+
`handle-fn` is called when :op of `msg` is one of keys of the :handles slot of
42+
the `descriptor`. When `trigger-it` is a set it should contain extra ops,
43+
besides those in :handles slot, on which `handle-fn` is
44+
triggered. `descriptor` is passed directly to the nREPLs `set-descriptor!`."
45+
[name handler-fn & [trigger-it descriptor]]
46+
(let [[descriptor trigger-it] (if descriptor
47+
[descriptor trigger-it]
48+
[trigger-it descriptor])
49+
trigger-it (eval trigger-it)
4550
descriptor (eval descriptor)
46-
cond (if (or (nil? handle) (set? handle))
47-
(let [ops-set (into (-> descriptor :handles keys set) handle)]
51+
cond (if (or (nil? trigger-it) (set? trigger-it))
52+
(let [ops-set (into (-> descriptor :handles keys set) trigger-it)]
4853
`(~ops-set (:op ~'msg)))
49-
`(~handle ~'msg))
54+
`(~trigger-it ~'msg))
5055
doc (or (:doc descriptor) "")]
5156
(assert descriptor)
5257
`(do
5358
(defn ~name ~doc [~'h]
5459
(fn [~'msg]
5560
(if (and ~cond (not (:inhibit-cider-middleware ~'msg)))
56-
(run-delayed-handler ~handler-fn ~'h ~'msg)
61+
(run-deferred-handler ~handler-fn ~'h ~'msg)
5762
(~'h ~'msg))))
5863
(set-descriptor! #'~name ~descriptor))))
5964

0 commit comments

Comments
 (0)