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))
|