Add package documentation
[sheep] / src / main / docgen.lisp
index 2ed740bdd66a51892a3afe9556c52c4ce55a1530..bb1b7a9af5db6b5eeec33ac7e22971eb7c06a22c 100644 (file)
@@ -3,23 +3,27 @@
 (define-condition validation-failure nil ((msg :initarg :msg :reader validation-failure-msg)))
 
 (defun validate-package (pkg)
- (let
-  ((symbs nil))
-  (do-external-symbols (symb pkg) (push symb symbs))
-  (setf symbs (sort symbs #'string< :key #'symbol-name))
-  (remove :success
-   (mapcar
-    (lambda (symb)
-     (handler-case
-      (progn
-       (docgen-func:doc->ast symb)
-       :success)
-      (validation-failure (v) (list :failure :msg (validation-failure-msg v)))))
-    symbs))))
+ (macrolet
+  ((with-success-check (&rest f)
+    `(handler-case
+      (progn ,@f :success)
+      (validation-failure (v) (list :failure :msg (validation-failure-msg v))))))
+  (let
+   ((symbs nil))
+   (do-external-symbols (symb pkg) (push symb symbs))
+   (setf symbs (sort symbs #'string< :key #'symbol-name))
+   (remove :success
+    (append
+     (list (with-success-check (docgen-pkg:doc->ast pkg)))
+     (mapcar
+      (lambda (symb) (with-success-check (docgen-func:doc->ast symb)))
+      symbs))))))
 
 (defun export-package (pkg)
  (let
   ((symbs nil))
   (do-external-symbols (symb pkg) (push symb symbs))
   (setf symbs (sort symbs #'string< :key #'symbol-name))
-  (format nil "~{~A~^~%~}" (mapcar (lambda (symb) (docgen-func:ast->md (docgen-func:doc->ast symb))) symbs))))
+  (with-output-to-string (str)
+   (format str "~A~%~%" (docgen-pkg:ast->md (docgen-pkg:doc->ast (find-package pkg))))
+   (format str "~{~A~^~%~}" (mapcar (lambda (symb) (docgen-func:ast->md (docgen-func:doc->ast symb))) symbs)))))