Skip to content

Commit 3608c07

Browse files
committed
Add a option for including private vars to the ns-vars middleware
1 parent 2249b55 commit 3608c07

File tree

4 files changed

+89
-34
lines changed

4 files changed

+89
-34
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## master (unreleased)
44

5+
### New features
6+
7+
* FIXME: Added a option for including private vars to the ns-vars middleware.
8+
9+
### Bugs fixed
10+
11+
* FIXME: Fix `ns-vars-with-meta` to return public vars.
12+
513
## 0.21.1 (2019-02-15)
614

715
### New features

src/cider/nrepl.clj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,12 @@
268268
"ns-vars"
269269
{:doc "Returns a sorted list of all vars in a namespace."
270270
:requires {"ns" "The namespace to browse."}
271-
:returns {"status" "done" "ns-vars" "The sorted list of all vars in a namespace."}}
271+
:optional {"include-privates?" "If logical true, the result list will include private vars in a namespace."}
272+
:returns {"status" "done" "ns-vars" "The sorted list of public vars in a namespace."}}
272273
"ns-vars-with-meta"
273-
{:doc "Returns a map of [var-name] to [var-metadata] for all vars in a namespace."
274+
{:doc "Returns a map of [var-name] to [var-metadata] for public vars in a namespace."
274275
:requires {"ns" "The namespace to use."}
276+
:optional {"include-privates?" "If logical true, the result map will include [var-name] and [var-metadata] pairs for private vars in a namespace."}
275277
:returns {"status" "done" "ns-vars-with-meta" "The map of [var-name] to [var-metadata] for all vars in a namespace."}}
276278
"ns-path"
277279
{:doc "Returns the path to the file containing ns."

src/cider/nrepl/middleware/ns.clj

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,51 @@
1717
(filter #(= (first %) name))
1818
(map second)))
1919

20-
(defn ns-vars-clj [ns]
21-
(->> (symbol ns)
22-
ns-publics
23-
keys
24-
(map name)
25-
sort))
26-
27-
(defn ns-vars-with-meta-clj [ns]
28-
(->> (symbol ns)
29-
ns-interns
30-
(u/update-vals (comp um/relevant-meta meta))
31-
(u/update-keys name)
32-
(into (sorted-map))))
20+
(defn ns-vars-clj [ns & [include-privates?]]
21+
(let [fetch-vars (if include-privates?
22+
ns-interns
23+
ns-publics)]
24+
(->> (symbol ns)
25+
fetch-vars
26+
keys
27+
(map name)
28+
sort)))
29+
30+
(defn ns-vars-with-meta-clj [ns & [include-privates?]]
31+
(let [fetch-vars (if include-privates?
32+
ns-interns
33+
ns-publics)]
34+
(->> (symbol ns)
35+
fetch-vars
36+
(u/update-vals (comp um/relevant-meta meta))
37+
(u/update-keys name)
38+
(into (sorted-map)))))
3339

3440
(defn ns-list-cljs [env]
3541
(->> (cljs-analysis/all-ns env)
3642
keys
3743
(map name)
3844
sort))
3945

40-
(defn ns-vars-cljs [env ns]
41-
(->> (symbol ns)
42-
(cljs-analysis/public-vars env)
43-
keys
44-
(map name)
45-
sort))
46-
47-
(defn ns-vars-with-meta-cljs [env ns]
48-
(->> (symbol ns)
49-
(cljs-analysis/public-vars env)
50-
(u/update-vals (comp um/relevant-meta :meta))
51-
(u/update-keys name)
52-
(into (sorted-map))))
46+
(defn ns-vars-cljs [env ns & [include-privates?]]
47+
(let [fetch-vars (if include-privates?
48+
(partial cljs-analysis/ns-interns-from-env env)
49+
(partial cljs-analysis/public-vars env))]
50+
(->> (symbol ns)
51+
fetch-vars
52+
keys
53+
(map name)
54+
sort)))
55+
56+
(defn ns-vars-with-meta-cljs [env ns & [include-privates?]]
57+
(let [fetch-vars (if include-privates?
58+
(partial cljs-analysis/ns-interns-from-env env)
59+
(partial cljs-analysis/public-vars env))]
60+
(->> (symbol ns)
61+
fetch-vars
62+
(u/update-vals (comp um/relevant-meta :meta))
63+
(u/update-keys name)
64+
(into (sorted-map)))))
5365

5466
(defn ns-path-cljs [env ns]
5567
(->> (symbol ns)
@@ -61,15 +73,15 @@
6173
(ns-list-cljs cljs-env)
6274
(ns/loaded-namespaces filter-regexps)))
6375

64-
(defn ns-vars [{:keys [ns] :as msg}]
76+
(defn ns-vars [{:keys [ns include-privates?] :as msg}]
6577
(if-let [cljs-env (cljs/grab-cljs-env msg)]
66-
(ns-vars-cljs cljs-env ns)
67-
(ns-vars-clj ns)))
78+
(ns-vars-cljs cljs-env ns include-privates?)
79+
(ns-vars-clj ns include-privates?)))
6880

69-
(defn ns-vars-with-meta [{:keys [ns] :as msg}]
81+
(defn ns-vars-with-meta [{:keys [ns include-privates?] :as msg}]
7082
(if-let [cljs-env (cljs/grab-cljs-env msg)]
71-
(ns-vars-with-meta-cljs cljs-env ns)
72-
(ns-vars-with-meta-clj ns)))
83+
(ns-vars-with-meta-cljs cljs-env ns include-privates?)
84+
(ns-vars-with-meta-clj ns include-privates?)))
7385

7486
(defn ns-path [{:keys [ns] :as msg}]
7587
(if-let [cljs-env (cljs/grab-cljs-env msg)]

test/clj/cider/nrepl/middleware/ns_test.clj

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,22 @@
4747
(is (sequential? ns-vars))
4848
(is (every? string? ns-vars))))
4949

50+
(deftest ns-vars-including-privates-test
51+
(testing "Without private vars"
52+
(let [ns-vars (:ns-vars (session/message {:op "ns-vars"
53+
:ns "clojure.core"}))]
54+
(is (sequential? ns-vars))
55+
(is (every? string? ns-vars))
56+
(is (nil? (some #(= "is-annotation?" %) ns-vars)))))
57+
58+
(testing "Including private vars"
59+
(let [ns-vars (:ns-vars (session/message {:op "ns-vars"
60+
:ns "clojure.core"
61+
:include-privates? 1}))]
62+
(is (sequential? ns-vars))
63+
(is (every? string? ns-vars))
64+
(is (some #(= "is-annotation?" %) ns-vars)))))
65+
5066
(deftest ns-vars-with-meta-integration-test
5167
(let [ns-vars-with-meta (:ns-vars-with-meta
5268
(session/message {:op "ns-vars-with-meta"
@@ -62,6 +78,23 @@
6278
(is (= (:*ns* ns-vars-with-meta)
6379
{:doc "\"A clojure.lang.Namespace object representing the current namespace.\""}))))
6480

81+
(deftest ns-vars-with-meta-including-privates-test
82+
(testing "Without private vars"
83+
(let [ns-vars-with-meta (:ns-vars-with-meta
84+
(session/message {:op "ns-vars-with-meta"
85+
:ns "clojure.core"}))]
86+
(is (every? (comp map? second) ns-vars-with-meta))
87+
(is (nil? (:is-annotation? ns-vars-with-meta)))))
88+
89+
(testing "Including private vars"
90+
(let [ns-vars-with-meta (:ns-vars-with-meta
91+
(session/message {:op "ns-vars-with-meta"
92+
:ns "clojure.core"
93+
:include-privates? 1}))]
94+
(is (every? (comp map? second) ns-vars-with-meta))
95+
(is (= (:is-annotation? ns-vars-with-meta)
96+
{:arglists "([c])"})))))
97+
6598
(deftest ns-path-integration-test
6699
(let [ns-path (:path (session/message {:op "ns-path"
67100
:ns "cider.nrepl.middleware.ns"}))

0 commit comments

Comments
 (0)