Skip to content

Commit 930e767

Browse files
committed
Integrate see-also straight into var metadata
1 parent 40acd4b commit 930e767

File tree

6 files changed

+41
-750
lines changed

6 files changed

+41
-750
lines changed

resources/see-also.edn

Lines changed: 0 additions & 700 deletions
This file was deleted.

src/orchard/clojuredocs.clj

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,25 @@
6666
(.delete (io/file cache-file-name))
6767
(reset! cache {}))
6868

69+
(defn get-doc
70+
"Get data for `var-name`.
71+
If `export-edn-url` is omitted, `default-edn-file-url` is used."
72+
{:added "0.5.0"}
73+
([var-name]
74+
(get-doc var-name default-edn-file-url))
75+
([var-name export-edn-url]
76+
(load-cache! export-edn-url)
77+
(get @cache (keyword var-name))))
78+
6979
(defn find-doc
70-
"Find a document matching to ns-name and var-name from cached documents.
80+
"Find a document matching `ns` and `sym` from cached documents.
7181
Cache will be updated when there are no cached documents or cached documents are old.
7282
7383
If `export-edn-url` is omitted, `default-edn-file-url` is used.
7484
7585
Return nil if there is no matching document."
7686
{:added "0.5.0"}
77-
([ns-name var-name]
78-
(find-doc ns-name var-name default-edn-file-url))
79-
([ns-name var-name export-edn-url]
80-
(load-cache! export-edn-url)
81-
(get @cache (keyword ns-name var-name))))
87+
([ns sym]
88+
(find-doc ns sym default-edn-file-url))
89+
([ns sym export-edn-url]
90+
(get-doc (keyword ns sym) export-edn-url)))

src/orchard/info.clj

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -140,24 +140,6 @@
140140
(some->> (cljs-meta/scoped-macro-meta env sym 'cljs.core)
141141
(cljs-meta/normalize-macro-meta)))))
142142

143-
(def see-also-data
144-
(edn/read-string (slurp (io/resource "see-also.edn"))))
145-
146-
(defn see-also*
147-
[{:keys [dialect unqualified-sym] :as m}]
148-
(when-not (= :cljs dialect)
149-
(some->> unqualified-sym
150-
(str)
151-
(symbol "clojure.core")
152-
(str)
153-
(get see-also-data)
154-
(mapv symbol)
155-
(filter resolve))))
156-
157-
(def ^{:doc "Augment the map with see-also information. We have to use the
158-
resolved (real) namespace and name here"}
159-
see-also (memoize see-also*))
160-
161143
(defn info*
162144
"Provide the info map for the input ns and sym.
163145
@@ -176,9 +158,6 @@ resolved (real) namespace and name here"}
176158
(some->
177159
meta
178160

179-
(merge (when-let [m (see-also params)]
180-
{:see-also m}))
181-
182161
(merge (when-let [file-path (:file meta)]
183162
{:file (cond-> file-path
184163
(misc/boot-project?) cp/classpath-file-relative-path)})))))

src/orchard/meta.clj

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
[clojure.pprint :as pprint]
66
[clojure.string :as str]
77
[clojure.walk :as walk]
8+
[orchard.clojuredocs :as cljdocs]
89
[orchard.namespace :as ns]
910
[orchard.misc :as misc]
1011
[orchard.spec :as spec]
@@ -69,6 +70,13 @@
6970
(assoc :file (some-> (ns/canonical-source ns) .getPath)))
7071
meta-map))
7172

73+
(defn- maybe-add-see-also
74+
"If the var `v` has a see-also has associated with it, assoc that into meta-map."
75+
[v meta-map]
76+
(if-let [see-also (:see-alsos (cljdocs/get-doc (var-name v)))]
77+
(merge meta-map {:see-also see-also})
78+
meta-map))
79+
7280
(defn- maybe-protocol
7381
[info]
7482
(if-let [prot-meta (meta (:protocol info))]
@@ -82,6 +90,8 @@
8290
nil))
8391

8492
(defn resolve-var
93+
"Resolve `ns` and `sym` to a var.
94+
The function is a simple wrapper around `clojure.core/ns-resolve`."
8595
[ns sym]
8696
{:pre [(symbol? ns) (symbol? sym)]}
8797
(if-let [ns (find-ns ns)]
@@ -94,6 +104,8 @@
94104
nil))))
95105

96106
(defn resolve-aliases
107+
"Retrieve the ns aliases for `ns`.
108+
The function is a simple wrapper around `clojure.core/ns-alias`."
97109
[ns]
98110
{:pre [(symbol? ns)]}
99111
(when-let [ns (find-ns ns)]
@@ -159,7 +171,8 @@
159171
maybe-add-file
160172
maybe-add-url
161173
(update :ns ns-name))]
162-
(maybe-add-spec v meta-map)))))
174+
(maybe-add-spec v meta-map)
175+
(maybe-add-see-also v meta-map)))))
163176

164177
(defn meta+
165178
"Return special form or var's meta."

test/orchard/info_test.clj

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -390,28 +390,20 @@
390390
;;;;;;;;;;;;;;;;;;
391391

392392
(deftest see-also-test
393-
(let [expected '(clojure.core/map-indexed
394-
clojure.core/pmap
395-
clojure.core/amap
396-
clojure.core/mapcat
397-
clojure.core/keep
398-
clojure.core/juxt
399-
clojure.core/mapv
400-
clojure.core/reduce
401-
clojure.core/run!)]
402-
403-
(testing "unit test of info/see-also"
404-
(is (= expected (-> '{:ns orchard.test-ns :sym map}
405-
info/normalize-params
406-
info/see-also))))
393+
(let [expected [:clojure.core/map-indexed
394+
:clojure.core/pmap
395+
:clojure.core/amap
396+
:clojure.core/mapcat
397+
:clojure.core/keep
398+
:clojure.core/juxt
399+
:clojure.core/mapv
400+
:clojure.core/reduce
401+
:clojure.core/run!]]
407402

408403
(testing "info/see-also through info/info* in a required namespace"
409404
(is (= expected (-> '{:ns orchard.test-ns :sym map}
410405
info/info*
411-
:see-also)))))
412-
413-
(testing "info/see-also does not support ClojureScript"
414-
(is (nil? (:see-also (info/info* '{:ns cljs.core :sym map :dialect :cljs :env {}}))))))
406+
:see-also))))))
415407

416408
(deftest info-jvm-test
417409
(is (info/info* {:ns 'orchard.info :sym 'java.lang.Class}))
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
(ns orchard.java.resource-test
22
(:require
3-
[clojure.string :as str]
43
[clojure.test :refer [deftest is testing]]
54
[orchard.java.resource :as resource]))
65

@@ -9,7 +8,6 @@
98

109
(deftest project-resources-test
1110
(testing "get the correct resources for the orchard project"
12-
(let [resources (->> (resource/project-resources)
13-
(remove #(str/ends-with? (.getAbsolutePath (:root %)) "test-resources")))]
14-
(is (= "see-also.edn" (-> resources first :relpath)))
11+
(let [resources (resource/project-resources)]
12+
(is (= "clojuredocs/export.edn" (-> resources first :relpath)))
1513
(is (= java.net.URL (-> resources first :url class))))))

0 commit comments

Comments
 (0)