Improve how options are displayed

This commit is contained in:
oakes
2014-04-01 15:12:37 -04:00
parent f8545515ee
commit f03cd07225
2 changed files with 29 additions and 24 deletions

View File

@@ -32,10 +32,12 @@
(.name d))) (.name d)))
(defn parse-doc (defn parse-doc
[^Doc d] [^Doc d clj-name]
(merge {} (merge {}
(when-let [n (some-> (parse-doc-name d) camel->keyword)] {:name (->> [(second (string/split clj-name #" "))
{:name n}) (some-> (parse-doc-name d) camel->keyword)]
(remove nil?)
(string/join " "))}
(when (> (count (.commentText d)) 0) (when (> (count (.commentText d)) 0)
{:text (.commentText d)}) {:text (.commentText d)})
(when (and (isa? (type d) MethodDoc) (when (and (isa? (type d) MethodDoc)
@@ -48,7 +50,7 @@
{:args [[(-> d .type .typeName) "value"]]}))) {:args [[(-> d .type .typeName) "value"]]})))
(defn parse-class-entry (defn parse-class-entry
[^ClassDoc c type] [^ClassDoc c [clj-name type]]
(some->> (case type (some->> (case type
:methods (filter #(-> % .isStatic not) (.methods c)) :methods (filter #(-> % .isStatic not) (.methods c))
:static-methods (filter #(.isStatic %) (.methods c)) :static-methods (filter #(.isStatic %) (.methods c))
@@ -59,19 +61,20 @@
:constructors (filter #(-> % .isStatic not) (.constructors c)) :constructors (filter #(-> % .isStatic not) (.constructors c))
nil) nil)
(filter #(.isPublic %)) (filter #(.isPublic %))
(map parse-doc) (map #(parse-doc % clj-name))
(concat (when-let [sc (.superclass c)] (concat (when-let [sc (.superclass c)]
(when (not= (.typeName sc) "Object") (when (not= (.typeName sc) "Object")
(parse-class-entry sc type)))) (parse-class-entry sc [clj-name type]))))
distinct
(sort-by :name) (sort-by :name)
vec vec))
(hash-map :text (.commentText c) :items)))
(defn parse-class (defn parse-class
[^ClassDoc c] [^ClassDoc c]
(some->> (get classes (.typeName c)) (some->> (get classes (.typeName c))
(map #(vector (first %) (parse-class-entry c (second %)))) (map #(vector (first (string/split (first %) #" "))
(into {}))) {:text (.commentText c)
:items (parse-class-entry c %)}))))
(defn remove-destructuring (defn remove-destructuring
[arglist] [arglist]
@@ -86,15 +89,15 @@
vec)) vec))
(defn process-group (defn process-group
[{:keys [type raw docstring] :as group} doc-map] [{:keys [type raw docstring] :as group} java-docs]
(let [form (read-string raw) (let [form (read-string raw)
n (second form)] n (second form)]
(when (and (contains? #{'defn 'defmacro} (first form)) (when (and (contains? #{'defn 'defmacro} (first form))
(-> n meta :private not)) (-> n meta :private not))
(assoc group (assoc group
:name (str n) :name (str n)
:java (->> doc-map :java (->> java-docs
(filter #(.startsWith (first %) (str n))) (filter #(= (first %) (str n)))
(sort-by first) (sort-by first)
vec) vec)
:arglists (arglists form) :arglists (arglists form)
@@ -110,22 +113,22 @@
(assoc group :raw*))))) (assoc group :raw*)))))
(defn process-groups (defn process-groups
[{:keys [groups] :as parsed-file} doc-map] [{:keys [groups] :as parsed-file} java-docs]
(->> groups (->> groups
(map #(process-group % doc-map)) (map #(process-group % java-docs))
merge-groups merge-groups
(remove nil?) (remove nil?)
(assoc parsed-file :groups))) (assoc parsed-file :groups)))
(defn parse-clj (defn parse-clj
[doc-map] [java-docs]
(->> (io/file "../src/") (->> (io/file "../src/")
file-seq file-seq
(filter #(-> % .getName (.endsWith ".clj"))) (filter #(-> % .getName (.endsWith ".clj")))
(sort-by #(.getName %)) (sort-by #(.getName %))
(map #(.getCanonicalPath %)) (map #(.getCanonicalPath %))
(map marg/path-to-doc) (map marg/path-to-doc)
(map #(process-groups % doc-map)) (map #(process-groups % java-docs))
(filter #(> (count (:groups %)) 0)))) (filter #(> (count (:groups %)) 0))))
(defn save (defn save
@@ -137,7 +140,7 @@
[^RootDoc root] [^RootDoc root]
(->> (map parse-class (.classes root)) (->> (map parse-class (.classes root))
(filter some?) (filter some?)
(into {}) (apply concat)
parse-clj parse-clj
save) save)
(println "Created uberdoc.html and uberdoc.edn.")) (println "Created uberdoc.html and uberdoc.edn."))

View File

@@ -39,12 +39,14 @@
(for [args arglists] (for [args arglists]
[:div {:class "c-head"} (pr-str args)]) [:div {:class "c-head"} (pr-str args)])
[:div {:class "c-doc"} docstring]] [:div {:class "c-doc"} docstring]]
(for [[item-name {:keys [text items]}] java] (when (> (count java) 0)
(list (when (not= name item-name) (list [:div {:class "c-head"} "Options"]
[:div {:class "j-head"} item-name]) (for [[item-name {:keys [text items]}] java]
[:div {:class "j-text"} text] (list (when (> (count java) 1)
[:div {:class "java"} [:div {:class "j-text"} text])
(map java-item items)])) [:div {:class "java"}
(map java-item items)]))))
[:div {:class "c-head"} "Source"]
[:div {:class "c-src"} [:div {:class "c-src"}
(when raw* [:pre raw*]) (when raw* [:pre raw*])
[:pre raw]]]))]) [:pre raw]]]))])