git.fiddlerwoaroof.com
Raw Blame History
(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))