diff options
Diffstat (limited to 'util/generate-hooks-index/src')
-rw-r--r-- | util/generate-hooks-index/src/generate_hooks_index/core.clj | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/util/generate-hooks-index/src/generate_hooks_index/core.clj b/util/generate-hooks-index/src/generate_hooks_index/core.clj new file mode 100644 index 000000000..2112647b0 --- /dev/null +++ b/util/generate-hooks-index/src/generate_hooks_index/core.clj @@ -0,0 +1,82 @@ +(ns generate-hooks-index.core + (:require [clojure.string :as str] + [hiccup.core :as h] + [taoensso.timbre :as log] + [clojure.java.shell :as sh]) + (:gen-class)) + +(log/set-level! :info) + +(defn clean-fn-arg + [s] + (-> s + (str/replace #"'" "") + (str/replace #"\"" "") + str/trim)) + +(defn check-fn-args + [xs] + (when (-> xs first empty?) + (throw (Exception. "empty function"))) + (map clean-fn-arg xs)) + + +(defn get-fn-arg + [s] + (->> s + (re-matches #".*call_hooks\((.+)\,(.*)\).*") + rest + check-fn-args)) + + + +(defn fix-path + [path file] + (str/replace file path "")) + + +(defn show-hooks + [path] + (for [s (-> (sh/sh "rgrep" "call_hooks" path) + :out + str/split-lines) + :let [[file hook] (str/split s #"\t*:")]] + (try + (-> (zipmap [:function :arg] (get-fn-arg hook)) + (assoc :file (fix-path path file))) + (catch Exception e + (log/debug e s file hook))))) + + + +(defn hiccupy + [path] + [:div + [:h3 "Hooks"] + [:table + [:tr (map #(vector :td %) ["Function" "Source File" "Arg"])] + (for [{:keys [function arg file]} + (->> path + show-hooks + (sort-by :function))] + [:tr (map #(vector :td (h/h %)) [function file arg])])] + [:p "Generated " (-> (java.util.Date.) str)]]) + + +(defn make-hook-docs + [path-to-hubzillla] + (->> path-to-hubzillla + hiccupy + h/html + (spit (str path-to-hubzillla "doc/hooks.html")))) + + +(defn -main + [& args] + (log/info "Starting..") + (make-hook-docs (str (System/getProperty "user.dir") "/../../")) + (log/info "Done!") + (System/exit 0)) + + + |