Parse clj files

This commit is contained in:
oakes
2014-03-31 00:20:33 -04:00
parent 58828802e9
commit adfdb9bc95
4 changed files with 58 additions and 16 deletions

View File

@@ -1,9 +1,9 @@
This doclet generates the play-clj doc site. This doclet generates the play-clj doc site.
## Usage ## Directions
1. Download and extract the [LibGDX source code](https://github.com/libgdx/libgdx/releases) 1. Download and extract the [LibGDX source code](https://github.com/libgdx/libgdx/releases)
2. Run `lein uberjar` in this directory 2. Run `lein uberjar` in this directory
3. Run the following command in this directory: 3. Run the following command in this directory:
`javadoc -sourcepath ~/path/to/libgdx/gdx/src/ -subpackages com.badlogic -doclet play_clj_doclet.core.Start -docletpath target/play-clj-doclet-0.0.1-SNAPSHOT-standalone.jar` `javadoc -sourcepath path/to/libgdx/gdx/src/ -subpackages com.badlogic -doclet play_clj_doclet.core.Start -docletpath target/play-clj-doclet-0.0.1-SNAPSHOT-standalone.jar`

View File

@@ -1,7 +1,8 @@
(defproject play-clj-doclet "0.0.1-SNAPSHOT" (defproject play-clj-doclet "0.0.1-SNAPSHOT"
:description "FIXME: write description" :description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.6.0"] :dependencies [[hiccup "1.0.5"]
[hiccup "1.0.5"]] [marginalia "0.7.1"]
[org.clojure/clojure "1.6.0"]]
:source-paths ["src/clojure"] :source-paths ["src/clojure"]
:java-source-paths ["src/java"] :java-source-paths ["src/java"]
:javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"] :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"]

View File

@@ -1,7 +1,8 @@
(ns play-clj-doclet.core (ns play-clj-doclet.core
(:require [clojure.edn :as edn] (:require [clojure.edn :as edn]
[clojure.string :as string]
[clojure.java.io :as io] [clojure.java.io :as io]
[clojure.string :as string]
[marginalia.core :as marg]
[play-clj-doclet.html :as html]) [play-clj-doclet.html :as html])
(:import [com.sun.javadoc ClassDoc ConstructorDoc Doc ExecutableMemberDoc (:import [com.sun.javadoc ClassDoc ConstructorDoc Doc ExecutableMemberDoc
Parameter RootDoc])) Parameter RootDoc]))
@@ -50,15 +51,49 @@
(map #(vector (first %) (parse-class-entry c (second %)))) (map #(vector (first %) (parse-class-entry c (second %))))
(into {}))) (into {})))
(defn save (def ^:const valid-syms #{'defn 'defmacro})
(defn match?
[doc-name sym-name]
(or (= doc-name sym-name)
(.startsWith doc-name (str sym-name " "))))
(defn process-group
[{:keys [type raw] :as group} doc-map]
(let [form (read-string raw)
n (second form)]
(when (and (contains? valid-syms (first form))
(-> n meta :private not))
(assoc group
:name (str n)
:java (filter #(match? (first %) (str n)) doc-map)))))
(defn process-groups
[{:keys [groups] :as parsed-file} doc-map]
(->> (map #(process-group % doc-map) groups)
(remove #(nil? (:name %)))
(assoc parsed-file :groups)))
(defn parse-clj
[doc-map] [doc-map]
(->> doc-map pr-str (spit (io/file "uberdoc.edn"))) (->> (io/file "../src/")
(->> doc-map html/create (spit (io/file "uberdoc.html")))) file-seq
(filter #(-> % .getName (.endsWith ".clj")))
(sort-by #(.getName %))
(map #(.getCanonicalPath %))
(map marg/path-to-doc)
(map #(process-groups % doc-map))))
(defn save
[parsed-files]
(->> parsed-files pr-str (spit (io/file "uberdoc.edn")))
(->> parsed-files html/create (spit (io/file "uberdoc.html"))))
(defn parse (defn parse
[^RootDoc root] [^RootDoc root]
(->> (map parse-class (.classes root)) (->> (map parse-class (.classes root))
(filter some?) (filter some?)
(into {}) (into {})
parse-clj
save) save)
(println "Created uberdoc.html and uberdoc.edn.")) (println "Created uberdoc.html and uberdoc.edn."))

View File

@@ -23,14 +23,20 @@
[:b (str name)] [:b (str name)]
" " " "
(string/join ", " (map param params))] (string/join ", " (map param params))]
[:i text]]) (when (> (count text) 0)
[:i text])])
(defn section (defn create-from-file
[[clj-name items]] [parsed-file]
[:div (for [group (:groups parsed-file)]
[:h2 {} clj-name] [:div
(map item (sort-by first items))]) [:h1 {} (:name group)]
(for [[name items] (:java group)]
[:div
(when (not= (:name group) name)
[:h3 name])
(map item (sort-by first items))])]))
(defn create (defn create
[doc-map] [parsed-files]
(html (map section doc-map))) (html (map create-from-file parsed-files)))