Commit the tool used to generate the hooks docs.
This commit is contained in:
82
util/generate-hooks-index/src/generate_hooks_index/core.clj
Normal file
82
util/generate-hooks-index/src/generate_hooks_index/core.clj
Normal file
@@ -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"]
|
||||
[:p "Generated " (-> (java.util.Date.) str)]
|
||||
[: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])])]])
|
||||
|
||||
|
||||
(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))
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user