git.fiddlerwoaroof.com
docstrings.lisp
4d63beae
 (defpackage :fwoar.docstrings
   (:use :cl )
   (:export ))
 (in-package :fwoar.docstrings)
 
 (eval-when (:load-toplevel :compile-toplevel :execute)
   (defun docstring (name &key signature return summary examples doc)
     (format nil "(~s ~{~s~^ ~}) => ~s ~a~%~%~:[~;~:*~a~%~%~]~{(~/pprint-linear/)~%~}"
             name signature return summary
             doc
             examples)))
 
 (defmacro document (definition (=> return) &body (doc &rest examples))
   (assert (eql => '=>))
   (ecase (car definition)
     (defun (destructuring-bind (_ name arguments summary &rest __) definition
              (declare (ignore _ __))
              `(progn ,definition
                      (setf (documentation ',name 'function)
                            ,(docstring name :signature arguments :return return :summary summary :examples examples :doc doc)))))))
 
 (document
     (defun this-is-a-test (a b c)
       "this is a test"
       (declare (ignore a b c))
       (values))
     (=> values)
   "don't do nothin"
   (this-is-a-test 1 2 3)
   (this-is-a-test 'a 2 3))