File tree Expand file tree Collapse file tree 5 files changed +67
-4
lines changed
doc/modules/ROOT/pages/nrepl-api
test/clj/cider/nrepl/middleware Expand file tree Collapse file tree 5 files changed +67
-4
lines changed Original file line number Diff line number Diff line change 2
2
3
3
## master (unreleased)
4
4
5
+ ### New features
6
+
7
+ * [ #698 ] ( https://github.com/clojure-emacs/cider-nrepl/pull/698 ) : Add ` undef-all ` op to undefine all symbols and aliases in namespace
8
+
5
9
## 0.26.0 (2021-04-22)
6
10
7
11
### New features
Original file line number Diff line number Diff line change @@ -969,7 +969,7 @@ Required parameters::
969
969
{blank}
970
970
971
971
Optional parameters::
972
- * `:filter-regex` Only the specs that matches filter prefix regex will be returned
972
+ * `:filter-regex` Only the specs that matches filter prefix regex will be returned
973
973
974
974
975
975
Returns::
@@ -1179,3 +1179,20 @@ Optional parameters::
1179
1179
1180
1180
Returns::
1181
1181
* `:status` done
1182
+
1183
+
1184
+
1185
+ === `undef-all`
1186
+
1187
+ Undefine all aliases and symbols in a namespace
1188
+
1189
+ Required parameters::
1190
+ * `:ns` The namespace to operate on
1191
+
1192
+
1193
+ Optional parameters::
1194
+ {blank}
1195
+
1196
+ Returns::
1197
+ * `:status` done
1198
+
Original file line number Diff line number Diff line change 473
473
(def ops-that-can-eval
474
474
" Set of nREPL ops that can lead to code being evaluated."
475
475
#{" eval" " load-file" " refresh" " refresh-all" " refresh-clear"
476
- " toggle-trace-var" " toggle-trace-ns" " undef" })
476
+ " toggle-trace-var" " toggle-trace-ns" " undef" " undef-all " })
477
477
478
478
(def-wrapper wrap-tracker cider.nrepl.middleware.track-state /handle-tracker
479
479
ops-that-can-eval
492
492
{" undef" {:doc " Undefine a symbol"
493
493
:requires {" sym" " The symbol to undefine"
494
494
" ns" " The namespace is which to resolve sym (falls back to *ns* if not specified)" }
495
- :returns {" status" " done" }}}})
495
+ :returns {" status" " done" }}
496
+ " undef-all" {:doc " Undefine all aliases and symbols in a namespace"
497
+ :requires {" ns" " The namespace to operate on" }
498
+ :returns {" status" " done" }}}})
496
499
497
500
(def-wrapper wrap-version cider.nrepl.middleware.version /handle-version
498
501
{:doc " Provides CIDER-nREPL version information."
Original file line number Diff line number Diff line change 27
27
(ns-unmap ns sym-name)))
28
28
sym))
29
29
30
+ (defn undef-all
31
+ " Undefines all symbol mappings and aliases in the namespace."
32
+ [{:keys [ns ]}]
33
+ (let [ns (misc/as-sym ns )]
34
+ (doseq [[sym _] (ns-map ns )]
35
+ (ns-unmap ns sym))
36
+ (doseq [[sym _] (ns-aliases ns )]
37
+ (ns-unalias ns sym))
38
+ ns ))
39
+
30
40
(defn undef-reply
31
41
[msg]
32
42
{:undef (undef msg)})
33
43
44
+ (defn undef-all-reply
45
+ [msg]
46
+ {:undef-all (undef-all msg)})
47
+
34
48
(defn handle-undef [handler msg]
35
49
(with-safe-transport handler msg
36
- " undef" undef-reply))
50
+ " undef" undef-reply
51
+ " undef-all" undef-all-reply))
Original file line number Diff line number Diff line change 101
101
(is (:pp-stacktrace response))
102
102
(is (:err response))
103
103
(is (:ex response)))))
104
+
105
+ (deftest undef-all-test
106
+ (testing " undef-all undefines all vars in namespace"
107
+ (is (= #{" done" }
108
+ (:status (session/message {:op " eval"
109
+ :code " (do (ns other.ns (:require [clojure.walk :as walk :refer [postwalk]])))" }))))
110
+ (is (= [" #'clojure.core/assoc" ]
111
+ (:value (session/message {:op " eval"
112
+ :code " (do (in-ns 'user) (ns-resolve 'other.ns 'assoc))" }))))
113
+ (is (= [" #'clojure.walk/postwalk" ]
114
+ (:value (session/message {:op " eval"
115
+ :code " (ns-resolve 'other.ns 'postwalk)" }))))
116
+ (is (= #{" done" }
117
+ (:status (session/message {:op " undef-all"
118
+ :ns " other.ns" }))))
119
+ (is (= [" nil" ]
120
+ (:value (session/message {:op " eval"
121
+ :code " (ns-resolve 'other.ns 'assoc)" }))))
122
+ (is (= [" nil" ]
123
+ (:value (session/message {:op " eval"
124
+ :code " (ns-resolve 'other.ns 'postwalk)" }))))
125
+ (is (= [" {}" ]
126
+ (:value (session/message {:op " eval"
127
+ :code " (ns-aliases 'other.ns)" }))))))
You can’t perform that action at this time.
0 commit comments