Skip to content

Commit de39b5e

Browse files
authored
Merge pull request #218 from ptaoussanis/271-fix-cljs-issues
Fix ClojureScript issues
2 parents 6e2a89d + ebfece3 commit de39b5e

2 files changed

Lines changed: 20 additions & 35 deletions

File tree

codox/src/codox/main.clj

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
(:require [clojure.string :as str]
55
[clojure.java.shell :as shell]
66
[codox.reader.clojure :as clj]
7+
[codox.reader.clojurescript :as cljs]
78
[codox.reader.plaintext :as text]))
89

910
(defn- writer [{:keys [writer]}]
@@ -19,29 +20,9 @@
1920
(throw
2021
(Exception. (str "Could not resolve codox writer " writer-sym))))))
2122

22-
(defn- macro? [var]
23-
(= (:type var) :macro))
24-
25-
(defn- read-macro-namespaces [paths read-opts]
26-
(->> (clj/read-namespaces paths read-opts)
27-
(map (fn [ns] (update-in ns [:publics] #(filter macro? %))))
28-
(remove (comp empty? :publics))))
29-
30-
(defn- merge-namespaces [namespaces]
31-
(for [[name namespaces] (group-by :name namespaces)]
32-
(assoc (first namespaces) :publics (mapcat :publics namespaces))))
33-
34-
(defn- cljs-read-namespaces [paths read-opts]
35-
;; require is here to allow Clojure 1.3 and 1.4 when not using ClojureScript
36-
(require 'codox.reader.clojurescript)
37-
(let [reader (find-var 'codox.reader.clojurescript/read-namespaces)]
38-
(merge-namespaces
39-
(concat (reader paths read-opts)
40-
(read-macro-namespaces paths read-opts)))))
41-
4223
(def ^:private namespace-readers
4324
{:clojure clj/read-namespaces
44-
:clojurescript cljs-read-namespaces})
25+
:clojurescript cljs/read-namespaces})
4526

4627
(defn- var-symbol [namespace var]
4728
(symbol (name (:name namespace)) (name (:name var))))

codox/src/codox/reader/clojurescript.clj

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
(:require [clojure.java.io :as io]
55
[cljs.analyzer :as an]
66
[cljs.analyzer.api :as ana]
7+
[cljs.closure]
8+
[cljs.env]
79
[clojure.string :as str]))
810

911
(defn- cljs-filename? [filename]
@@ -15,7 +17,7 @@
1517
(-> file .getName cljs-filename?)))
1618

1719
(defn- remove-quote [x]
18-
(if (and (list? x) (= (first x) 'quote))
20+
(if (and (seq? x) (= (first x) 'quote))
1921
(second x)
2022
x))
2123

@@ -50,15 +52,16 @@
5052
:else :var))
5153

5254
(defn- read-var [file vars var]
53-
(-> var
54-
(select-keys [:name :line :arglists :doc :dynamic :added :deprecated :doc/format])
55-
(update-some :name (comp symbol name))
56-
(update-some :arglists remove-quote)
57-
(update-some :doc correct-indent)
58-
(assoc-some :file (.getPath file)
59-
:type (var-type var)
60-
:members (map (partial read-var file vars)
61-
(protocol-methods var vars)))))
55+
(let [vt (var-type var)]
56+
(-> var
57+
(select-keys [:name :line :arglists :doc :dynamic :added :deprecated :doc/format])
58+
(update-some :name (comp symbol name))
59+
(update-some :arglists remove-quote)
60+
(update-some :doc correct-indent)
61+
(assoc-some :file (if (= vt :macro) (:file var) (.getPath file))
62+
:type vt
63+
:members (map (partial read-var file vars)
64+
(protocol-methods var vars))))))
6265

6366
(defn- read-publics [state namespace file]
6467
(let [vars (vals (ana/ns-publics state namespace))]
@@ -70,10 +73,11 @@
7073
(sort-by (comp str/lower-case :name)))))
7174

7275
(defn- analyze-file [file]
73-
(let [state (ana/empty-state)]
74-
(binding [an/*analyze-deps* false]
75-
(ana/no-warn
76-
(ana/analyze-file state file {})))
76+
(let [opts (cljs.closure/add-implicit-options {})
77+
state (cljs.env/default-compiler-env opts)]
78+
(ana/no-warn
79+
(cljs.closure/validate-opts opts)
80+
(ana/analyze-file state file opts))
7781
state))
7882

7983
(defn- read-file [path file exception-handler]

0 commit comments

Comments
 (0)