Skip to content

Commit cd52d6c

Browse files
Merge pull request #18 from clj-codes/feat/adds-more-libs-n-fixes
feat: add more libs to the database
2 parents 44c2144 + 005a2e6 commit cd52d6c

File tree

9 files changed

+316
-44
lines changed

9 files changed

+316
-44
lines changed

dev/playground.clj

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(ns dev.playground
22
(:require [clj-http.client :as http]
33
[clojure.java.io :as io]
4+
[codes.clj.docs.extractor.config :as config]
45
[codes.clj.docs.extractor.core :as core]
56
[codes.clj.docs.extractor.datalevin :as datalevin]
67
[datalevin.core :as d]
@@ -10,7 +11,8 @@
1011
(:import [java.io File]))
1112

1213
(defn get-url [git-url]
13-
(-> (http/get git-url {:as :json})
14+
(-> (http/get git-url {;:headers {"Authorization" "Bearer token"}
15+
:as :json})
1416
:body))
1517

1618
(defn download-unzip [dir url]
@@ -31,7 +33,34 @@
3133
(io/copy stream saveFile))))
3234
(recur (.getNextEntry stream))))))
3335

36+
(defn get-github-data [owner-repository]
37+
(let [tags (get-url
38+
(str "https://api.github.com/repos/"
39+
owner-repository
40+
"/tags"))
41+
latest (first tags)
42+
latest-hash (get-url
43+
(str "https://api.github.com/repos/"
44+
owner-repository
45+
"/git/ref/tags/"
46+
(:name latest)))]
47+
(merge latest latest-hash)))
48+
49+
(defn get-git-deps-info [owner-repository]
50+
(let [{:keys [name object]} (-> owner-repository
51+
get-github-data
52+
(select-keys [:name :object]))]
53+
{:project/name ""
54+
:git/url (str "https://github.com/" owner-repository)
55+
:git/tag name
56+
:git/sha (:sha object)}))
57+
3458
(comment
59+
; getting data from github
60+
(mapv get-git-deps-info
61+
["dakrone/clj-http"
62+
"dakrone/cheshire"])
63+
3564
; reset database & download unzip from releases
3665
(let [dir "target/docs-db"]
3766
(println "deleting")
@@ -134,13 +163,17 @@
134163
(d/close conn)
135164
result)
136165

166+
; count deps in config
167+
(count (:deps (config/read! "resources/config.edn")))
168+
137169
; count by project
138170
(let [conn (d/get-conn "target/docs-db" datalevin/db-schemas)
139171
db (d/db conn)
140-
result (doall (d/q '[:find ?pn ?ps (count ?d)
172+
result (doall (d/q '[:find ?pn ?pg (count ?d)
141173
:in $
142174
:where
143175
[?p :project/id]
176+
[?p :project/group ?pg]
144177
[?p :project/name ?pn]
145178
[?p :project/sha ?ps]
146179
[?n :namespace/project ?p]
@@ -162,6 +195,16 @@
162195
(d/close conn)
163196
result)
164197

198+
(let [conn (d/get-conn "target/docs-db" datalevin/db-schemas)
199+
db (d/db conn)
200+
result (doall (d/q '[:find ?e ?a
201+
:in $
202+
:where
203+
[?e :definition/deprecated ?a]]
204+
db))]
205+
(d/close conn)
206+
result)
207+
165208
; tests with fulltext and analyzer
166209
(let [query-analyzer (su/create-analyzer
167210
{:tokenizer (datalevin/merge-tokenizers

resources/config.edn

Lines changed: 161 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,164 @@
3131
org.clojure/data.json
3232
{:git/url "https://github.com/clojure/data.json"
3333
:git/tag "v2.5.0"
34-
:git/sha "457b88e27d7695b38f8b3d9c737e2efb8f2b476d"}}}
34+
:git/sha "457b88e27d7695b38f8b3d9c737e2efb8f2b476d"}
35+
36+
nubank/matcher-combinators
37+
{:git/url "https://github.com/nubank/matcher-combinators"
38+
:git/tag "3.9.1"
39+
:git/sha "beae388ac30d4079a68619aba36ff7e152b20e42"}
40+
nubank/state-flow
41+
{:deps/manifest :deps
42+
:git/url "https://github.com/nubank/state-flow"
43+
:git/tag "5.14.5"
44+
:git/sha "e86f5136f470c3816e807888c510190b6496f59f"}
45+
nubank/mockfn
46+
{:deps/manifest :deps
47+
:git/url "https://github.com/nubank/mockfn"
48+
:git/tag "0.7.0"
49+
:git/sha "7e51406edd237ba51687bfef4e66ee521c603b5f"}
50+
51+
metosin/malli
52+
{:deps/manifest :deps
53+
:git/url "https://github.com/metosin/malli"
54+
:git/tag "0.15.0"
55+
:git/sha "8f240d75131a77056303f3a144ad49889d08139f"}
56+
metosin/reitit
57+
{:deps/manifest :deps
58+
:project/source-paths ["modules/reitit/src"
59+
"modules/reitit-core/src"
60+
"modules/reitit-dev/src"
61+
"modules/reitit-ring/src"
62+
"modules/reitit-http/src"
63+
"modules/reitit-middleware/src"
64+
"modules/reitit-openapi/src"
65+
"modules/reitit-interceptors/src"
66+
"modules/reitit-malli/src"
67+
"modules/reitit-spec/src"
68+
"modules/reitit-schema/src"
69+
"modules/reitit-swagger/src"
70+
"modules/reitit-swagger-ui/src"
71+
"modules/reitit-frontend/src"
72+
"modules/reitit-sieppari/src"
73+
"modules/reitit-pedestal/src"]
74+
:git/url "https://github.com/metosin/reitit"
75+
:git/tag "0.7.0-alpha7"
76+
:git/sha "15e0c95cb6e8ab1f653204f910dfb1851c0b0663"}
77+
metosin/jsonista
78+
{:git/url "https://github.com/metosin/jsonista"
79+
:git/tag "0.3.8"
80+
:git/sha "8aca9b09ba1964245438dfc104ea26f4ae9c4d21"}
81+
82+
bidi/bidi
83+
{:project/group "juxt"
84+
:deps/manifest :deps
85+
:git/url "https://github.com/juxt/bidi"
86+
:git/tag "2.1.6"
87+
:git/sha "06385ef65a54bb8e234da79e67d629403c224797"}
88+
aero/aero
89+
{:project/group "juxt"
90+
:git/url "https://github.com/juxt/aero"
91+
:git/tag "1.1.6"
92+
:git/sha "c47a10fa5f6a52084d04769af06d5e04d6603e13"}
93+
tick/tick
94+
{:project/group "juxt"
95+
:git/url "https://github.com/juxt/tick"
96+
:git/tag "0.7.5"
97+
:git/sha "383fed95e906f5b877480b5cf9e0951a8fee4908"}
98+
99+
aleph/aleph
100+
{:project/group "org.clj-commons"
101+
:git/url "https://github.com/clj-commons/aleph"
102+
:git/tag "0.7.1"
103+
:git/sha "f4f6ab07833bd9054c53f5a411d66a4f39ab3715"}
104+
manifold/manifold
105+
{:deps/manifest :deps
106+
:project/group "org.clj-commons"
107+
:git/url "https://github.com/clj-commons/manifold"
108+
:git/tag "0.4.2"
109+
:git/sha "3188eec251dce9508a868cac1f860505ad3b066f"}
110+
org.clj-commons/hickory
111+
{:git/url "https://github.com/clj-commons/hickory"
112+
:git/tag "Release-0.7.4"
113+
:git/sha "139484a9066ccac5df31303b5cfc53d0379ffc5d"}
114+
115+
babashka/sci
116+
{:git/url "https://github.com/babashka/sci"
117+
:git/tag "v0.8.41"
118+
:git/sha "e9fca84a40d975c276717088136bf4c996f9c506"}
119+
babashka/fs
120+
{:git/url "https://github.com/babashka/fs"
121+
:git/tag "v0.5.20"
122+
:git/sha "40fcceb22b9728fee1c2ce0e58e390e5fe23f2cd"}
123+
babashka/process
124+
{:git/url "https://github.com/babashka/process"
125+
:git/tag "v0.5.22"
126+
:git/sha "c8a5d8ce466dd57ac9680fe526846c37fd2a06fe"}
127+
128+
lambdaisland/kaocha
129+
{:git/url "https://github.com/lambdaisland/kaocha"
130+
:git/tag "v1.87.1366"
131+
:git/sha "17970292cc99710818f01ac63b61b62dbd3afa23"}
132+
lambdaisland/regal
133+
{:git/url "https://github.com/lambdaisland/regal"
134+
:git/tag "v0.0.143"
135+
:git/sha "c99d0b1d66bea9f9b4b772a095c9181deda89580"}
136+
lambdaisland/uri
137+
{:git/url "https://github.com/lambdaisland/uri"
138+
:git/tag "v1.19.155"
139+
:git/sha "1b0a2d0d6845af5dd45d3f8685d1db9a20ca56ef"}
140+
141+
compojure/compojure
142+
{:deps/manifest :deps
143+
:project/group "weavejester"
144+
:git/url "https://github.com/weavejester/compojure"
145+
:git/tag "1.7.1"
146+
:git/sha "55268be19da2460b08a5cc4e8ac43bdb3baf55b9"}
147+
hiccup/hiccup
148+
{:deps/manifest :deps
149+
:project/group "weavejester"
150+
:git/url "https://github.com/weavejester/hiccup"
151+
:git/tag "2.0.0-alpha2"
152+
:git/sha "56ecd8f7bf70614b69fa2fba8e99a169f6efd5cc"}
153+
integrant/integrant
154+
{:project/group "weavejester"
155+
:git/url "https://github.com/weavejester/integrant"
156+
:git/tag "0.9.0-alpha4"
157+
:git/sha "e74a0924e2bf26d4b02649319c04b79c64823a89"}
158+
159+
com.taoensso/sente
160+
{:deps/manifest :deps
161+
:git/url "https://github.com/taoensso/sente"
162+
:git/tag "v1.19.2"
163+
:git/sha "71f993b59d4128376108e2e036bc25ad70723a37"}
164+
com.taoensso/timbre
165+
{:deps/manifest :deps
166+
:git/url "https://github.com/taoensso/timbre"
167+
:git/tag "v6.5.0"
168+
:git/sha "b72cc65290cf2e5136cfa0a3dd449eb806e31ff5"}
169+
com.taoensso/carmine
170+
{:deps/manifest :deps
171+
:git/url "https://github.com/taoensso/carmine"
172+
:git/tag "v3.3.2"
173+
:git/sha "73b846204c6a9ca2168aa3dbaa1d3f2b151c7e66"}
174+
175+
clj-http/clj-http
176+
{:deps/manifest :deps
177+
:project/group "dakrone"
178+
:git/url "https://github.com/dakrone/clj-http"
179+
:git/tag "3.12.3"
180+
:git/sha "99f00af3273aec1fb7bf51e804ecddb2a34a50f2"}
181+
cheshire/cheshire
182+
{:deps/manifest :deps
183+
:project/group "dakrone"
184+
:git/url "https://github.com/dakrone/cheshire"
185+
:git/tag "5.12.0"
186+
:git/sha "08b1d1c8bc8985a9faeea62fca7d8c8f3696721d"}
187+
188+
lilactown/helix
189+
{:git/url "https://github.com/lilactown/helix",
190+
:git/sha "35127b79405e5dff6d9b74dfc674280eb93fab6d"}
191+
town.lilac/flex
192+
{:project/group "lilactown"
193+
:git/url "https://github.com/lilactown/flex",
194+
:git/sha "afa6491ace9015577ffa9245086f945825a93633"}}}

src/codes/clj/docs/extractor/adapters.clj

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
[analysis]
5656
(mapv
5757
(fn [{:keys [project]}]
58-
(let [[group artifact] (-> project :project-name (str/split #"/"))]
58+
(let [{:keys [group artifact]} project]
5959
(assoc-some {:project/id (:project-name project)
6060
:project/name (:project-name project)}
6161
:project/group group
@@ -73,8 +73,7 @@
7373
(reduce
7474
(fn [accum {:keys [project namespaces]}]
7575
(into accum
76-
(let [{:git/keys [url tag] :deps/keys [root]} project
77-
[group artifact] (-> project :project-name (str/split #"/"))]
76+
(let [{:keys [group artifact] :git/keys [url tag sha] :deps/keys [root]} project]
7877
(->> namespaces
7978
group-multi-langs
8079
(mapv (fn [{:keys [end-row meta name-end-col name-end-row name-row deprecated added
@@ -91,11 +90,11 @@
9190
:namespace/name-end-col name-end-col
9291
:namespace/name-end-row name-end-row
9392
:namespace/name-row name-row
94-
:namespace/deprecated deprecated
93+
:namespace/deprecated (some-> deprecated str)
9594
:namespace/added added
9695
:namespace/author author
9796
:namespace/filename trim-filename
98-
:namespace/git-source (str url "/blob/" tag trim-filename "#L" row)
97+
:namespace/git-source (str url "/blob/" (or tag sha) trim-filename "#L" row)
9998
:namespace/col col
10099
:namespace/name-col name-col
101100
:namespace/end-col end-col
@@ -115,8 +114,7 @@
115114
(reduce
116115
(fn [accum {:keys [project definitions]}]
117116
(into accum
118-
(let [{:git/keys [url tag] :deps/keys [root]} project
119-
[group artifact] (-> project :project-name (str/split #"/"))]
117+
(let [{:keys [group artifact] :git/keys [url tag sha] :deps/keys [root]} project]
120118
(->> definitions
121119
group-multi-langs
122120
(mapv (fn [{:keys [fixed-arities end-row meta name-end-col
@@ -141,11 +139,11 @@
141139
:definition/name-end-row name-end-row
142140
:definition/name-row name-row
143141
:definition/added added
144-
:definition/deprecated deprecated
142+
:definition/deprecated (some-> deprecated str)
145143
:definition/author author
146144
:definition/filename trim-filename
147145
:definition/git-source (when trim-filename
148-
(str url "/blob/" tag trim-filename "#L" row))
146+
(str url "/blob/" (or tag sha) trim-filename "#L" row))
149147
:definition/col col
150148
:definition/name-col name-col
151149
:definition/end-col end-col

src/codes/clj/docs/extractor/analysis.clj

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,43 @@
22
(:require [clj-kondo.core :as kondo]
33
[clojure.edn :as edn]
44
[clojure.java.io :as io]
5+
[clojure.string :as str]
56
[clojure.tools.deps :as deps]))
67

8+
(def ^:private mvn-repos
9+
{"central" {:url "https://repo1.maven.org/maven2/"}
10+
"clojars" {:url "https://repo.clojars.org/"}})
11+
12+
(defn build-paths [resolved-deps source-paths]
13+
(if source-paths
14+
(into (:paths resolved-deps)
15+
(map #(str (:deps/root resolved-deps) "/" %) source-paths))
16+
(:paths resolved-deps)))
17+
18+
(defn resolved-deps->project-meta
19+
[resolved-deps project-name artifact group paths]
20+
(assoc resolved-deps
21+
:project-name project-name
22+
:artifact artifact
23+
:group group
24+
:paths paths))
25+
726
(defn download-project!
827
[project git]
9-
(-> (deps/resolve-deps
10-
{:deps {project git}
11-
:mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"},
12-
"clojars" {:url "https://repo.clojars.org/"}}}
13-
nil)
14-
(get project)
15-
(assoc :project-name (str project))))
28+
(let [project-name (str project)
29+
[group artifact] (str/split project-name #"/")
30+
group-name (or (:project/group git) group)
31+
resolved-deps (-> (deps/resolve-deps
32+
{:deps {project git}
33+
:mvn/repos mvn-repos}
34+
nil)
35+
(get project))
36+
paths (build-paths resolved-deps (:project/source-paths git))]
37+
(resolved-deps->project-meta resolved-deps
38+
project-name
39+
artifact
40+
group-name
41+
paths)))
1642

1743
(defn kondo-run!
1844
[paths]
@@ -34,16 +60,10 @@
3460

3561
(defn extract-analysis!
3662
[project-name project-config]
63+
3764
(let [{:keys [paths] :as project-meta} (download-project! project-name project-config)
3865
{:keys [var-definitions namespace-definitions]} (kondo-run! paths)
3966
extra-definitions (extract-extras! (-> project-config :extras :definitions))]
4067
{:project project-meta
4168
:namespaces namespace-definitions
4269
:definitions (into var-definitions extra-definitions)}))
43-
44-
(defn extract!
45-
[config]
46-
(->> config
47-
:deps
48-
(mapv (fn [[project-name project-config]]
49-
(extract-analysis! project-name project-config)))))

0 commit comments

Comments
 (0)