Zgadzam się z @uvtc, że obniżka jest dobrym wyborem. Jako dodatek, chciałbym zauważyć, że generowanie własnej funkcji podglądu dokumentacji do wykorzystania w REPL jest banalne. Poniższy kod zakłada, że masz pakiet markdown-clj na ścieżce klas (np.poprzez zależności dev) i używasz rEPL w OSX:
(ns docs
(:require [clojure.java.shell :as s]
[markdown.core :as md]))
(defmacro opendoc [name]
`(do
(md/md-to-html (java.io.StringReader. (:doc (meta (var ~name)))) "/tmp/doc.html")
(s/sh "open" "/tmp/doc.html")
)
)
Czasami warto spojrzeć na źródło clojure.repl/doc obsłużyć szczególnych przypadkach (np ten zakłada będziesz przechodzącą w odpowiedni symbol dla var). Dobrze byłoby, gdyby nazwa pliku odzwierciedlała przestrzeń nazw/funkcję dla "buforowania", zamiast tylko ponownego używania tej samej nazwy pliku dla każdego żądania ... ale zachowuję to dla uproszczenia w celach ilustracyjnych.
Komenda OSX open
po prostu prosi system operacyjny o otwarcie pliku poprzez wykrycie jego typu. Tak więc:
REPL=> (docs/opendoc my.ns/f)
spowoduje, że domyślna przeglądarka otworzy wersję HTML dokumentu funkcji.
Jeszcze jedno zastrzeżenie: jeśli wcinasz swój ciąg wielowierszowy (który zwykle robią redaktorzy), to twój MD może skończyć się dziwactwem (np. Listy wypunktowane mogą zagnieździć się w sposób, który nie jest zamierzony). Jednym ze sposobów rozwiązania tego problemu jest usunięcie tego. Na przykład:
(defn boo
"
# Title
My thing
* Item one
* Item two
"
[args] ...)
a następnie zmodyfikować funkcję OpenDoc najpierw zastosować lewy wykończenia:
(defn ltrim [str] (clojure.string/replace str #"(?m)^ {0,3}" ""))
(defmacro opendoc [name]
`(do
(md/md-to-html (java.io.StringReader. (ltrim (:doc (meta (var ~name))))) "/tmp/doc.html")
(s/sh "open" "/tmp/doc.html")
)
)
Myślę, że rozwiązanie to w dużej mierze zależy od możliwości skonfigurować (lub zwiększenia) edytor do formatu ciągi dokumentów dla ciebie, podczas pisania lub na żądanie. – Jeremy
Istnieją inne konwencje doctring, które mogą/powinny być sformalizowane zbyt IMHO np. z let -> "(pozwól na wiązanie i treść) wiązania => bind-form init-expr'' – sw1nn