From f03cd072255231ef30d08e1e7a49b6eb540b8c11 Mon Sep 17 00:00:00 2001 From: oakes Date: Tue, 1 Apr 2014 15:12:37 -0400 Subject: [PATCH] Improve how options are displayed --- doclet/src/clojure/play_clj_doclet/core.clj | 39 +++++++++++---------- doclet/src/clojure/play_clj_doclet/html.clj | 14 ++++---- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/doclet/src/clojure/play_clj_doclet/core.clj b/doclet/src/clojure/play_clj_doclet/core.clj index 02b4074..696cf6f 100644 --- a/doclet/src/clojure/play_clj_doclet/core.clj +++ b/doclet/src/clojure/play_clj_doclet/core.clj @@ -32,10 +32,12 @@ (.name d))) (defn parse-doc - [^Doc d] + [^Doc d clj-name] (merge {} - (when-let [n (some-> (parse-doc-name d) camel->keyword)] - {:name n}) + {:name (->> [(second (string/split clj-name #" ")) + (some-> (parse-doc-name d) camel->keyword)] + (remove nil?) + (string/join " "))} (when (> (count (.commentText d)) 0) {:text (.commentText d)}) (when (and (isa? (type d) MethodDoc) @@ -48,7 +50,7 @@ {:args [[(-> d .type .typeName) "value"]]}))) (defn parse-class-entry - [^ClassDoc c type] + [^ClassDoc c [clj-name type]] (some->> (case type :methods (filter #(-> % .isStatic not) (.methods c)) :static-methods (filter #(.isStatic %) (.methods c)) @@ -59,19 +61,20 @@ :constructors (filter #(-> % .isStatic not) (.constructors c)) nil) (filter #(.isPublic %)) - (map parse-doc) + (map #(parse-doc % clj-name)) (concat (when-let [sc (.superclass c)] (when (not= (.typeName sc) "Object") - (parse-class-entry sc type)))) + (parse-class-entry sc [clj-name type])))) + distinct (sort-by :name) - vec - (hash-map :text (.commentText c) :items))) + vec)) (defn parse-class [^ClassDoc c] (some->> (get classes (.typeName c)) - (map #(vector (first %) (parse-class-entry c (second %)))) - (into {}))) + (map #(vector (first (string/split (first %) #" ")) + {:text (.commentText c) + :items (parse-class-entry c %)})))) (defn remove-destructuring [arglist] @@ -86,15 +89,15 @@ vec)) (defn process-group - [{:keys [type raw docstring] :as group} doc-map] + [{:keys [type raw docstring] :as group} java-docs] (let [form (read-string raw) n (second form)] (when (and (contains? #{'defn 'defmacro} (first form)) (-> n meta :private not)) (assoc group :name (str n) - :java (->> doc-map - (filter #(.startsWith (first %) (str n))) + :java (->> java-docs + (filter #(= (first %) (str n))) (sort-by first) vec) :arglists (arglists form) @@ -110,22 +113,22 @@ (assoc group :raw*))))) (defn process-groups - [{:keys [groups] :as parsed-file} doc-map] + [{:keys [groups] :as parsed-file} java-docs] (->> groups - (map #(process-group % doc-map)) + (map #(process-group % java-docs)) merge-groups (remove nil?) (assoc parsed-file :groups))) (defn parse-clj - [doc-map] + [java-docs] (->> (io/file "../src/") file-seq (filter #(-> % .getName (.endsWith ".clj"))) (sort-by #(.getName %)) (map #(.getCanonicalPath %)) (map marg/path-to-doc) - (map #(process-groups % doc-map)) + (map #(process-groups % java-docs)) (filter #(> (count (:groups %)) 0)))) (defn save @@ -137,7 +140,7 @@ [^RootDoc root] (->> (map parse-class (.classes root)) (filter some?) - (into {}) + (apply concat) parse-clj save) (println "Created uberdoc.html and uberdoc.edn.")) diff --git a/doclet/src/clojure/play_clj_doclet/html.clj b/doclet/src/clojure/play_clj_doclet/html.clj index d6f1b73..4ba6d5a 100644 --- a/doclet/src/clojure/play_clj_doclet/html.clj +++ b/doclet/src/clojure/play_clj_doclet/html.clj @@ -39,12 +39,14 @@ (for [args arglists] [:div {:class "c-head"} (pr-str args)]) [:div {:class "c-doc"} docstring]] - (for [[item-name {:keys [text items]}] java] - (list (when (not= name item-name) - [:div {:class "j-head"} item-name]) - [:div {:class "j-text"} text] - [:div {:class "java"} - (map java-item items)])) + (when (> (count java) 0) + (list [:div {:class "c-head"} "Options"] + (for [[item-name {:keys [text items]}] java] + (list (when (> (count java) 1) + [:div {:class "j-text"} text]) + [:div {:class "java"} + (map java-item items)])))) + [:div {:class "c-head"} "Source"] [:div {:class "c-src"} (when raw* [:pre raw*]) [:pre raw]]]))])