First draft documentation
This commit is contained in:
parent
576b280a0c
commit
fece951f4b
|
@ -1,3 +1,55 @@
|
||||||
(ns ludus.doc
|
(ns ludus.doc
|
||||||
(:require [ludus.prelude :as prelude]
|
(:require [ludus.interpreter :as interpreter]
|
||||||
[ludus.base :as base]))
|
[ludus.base :as base]
|
||||||
|
[ludus.data :as data]
|
||||||
|
[clojure.string :as string]))
|
||||||
|
|
||||||
|
(def prelude interpreter/ludus-prelude)
|
||||||
|
|
||||||
|
(def exports-only (dissoc prelude ::data/type ::data/struct))
|
||||||
|
|
||||||
|
(defn map-values [f] (fn [[k v]] [k (f v)]))
|
||||||
|
|
||||||
|
(def ludus-doc (base/doc- :body))
|
||||||
|
|
||||||
|
(def with-docs (into {} (map (map-values ludus-doc)) exports-only))
|
||||||
|
|
||||||
|
(def sorted-names (-> with-docs keys sort))
|
||||||
|
|
||||||
|
(defn escape-underscores [the-str] (string/replace the-str #"_" "\\_"))
|
||||||
|
|
||||||
|
(defn toc-entry [name] (let [escaped (escape-underscores name)] (str "•[" escaped "](#" escaped ")")))
|
||||||
|
|
||||||
|
(def toc (string/join " " (map toc-entry sorted-names)))
|
||||||
|
|
||||||
|
(defn compose-entry [name]
|
||||||
|
(let [the-doc (get with-docs name)
|
||||||
|
header (str "### " name "\n")
|
||||||
|
lines (string/split-lines the-doc)]
|
||||||
|
(if (empty? lines) (str header "No documentation available.\n")
|
||||||
|
(let [
|
||||||
|
description (second lines)
|
||||||
|
pattern-lines (subvec lines 2)
|
||||||
|
patterns (string/join " " pattern-lines)
|
||||||
|
]
|
||||||
|
(str header "```\n" description "\n" patterns "\n```")
|
||||||
|
))))
|
||||||
|
|
||||||
|
(def entries (string/join "\n\n" (map compose-entry sorted-names)))
|
||||||
|
|
||||||
|
(def doc-file
|
||||||
|
(str
|
||||||
|
"# Ludus prelude documentation
|
||||||
|
These functions are available in every Ludus script.
|
||||||
|
The documentation for any function can be found within Ludus by passing the function to `doc!`,
|
||||||
|
e.g., running `doc! (add)` will send the documentation for `add` to the console.
|
||||||
|
|
||||||
|
"
|
||||||
|
toc
|
||||||
|
"
|
||||||
|
## Function documentation
|
||||||
|
"
|
||||||
|
entries
|
||||||
|
))
|
||||||
|
|
||||||
|
(println doc-file)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user