cl-ds / data /repos /cl-annot /src /lib /doc.lisp
j14i's picture
977 CL macro transformation examples: CL-native pipeline with SBCL verification
d69fc90 verified
(in-package :cl-user)
(defpackage cl-annot.doc
(:nicknames :annot.doc)
(:use :cl
:annot.util
:annot.helper)
(:export :doc))
(in-package :annot.doc)
(defannotation doc (docstring definition-form)
(:arity 2)
"Add DOCSTRING documentation for DEFINITION-FORM."
(progn-form-replace-last
(lambda (definition-form)
(case (definition-form-type definition-form)
((defvar defparameter defconstant defun defmethod defmacro
deftype define-compiler-macro)
(destructuring-bind (def name arg . body)
definition-form
`(,def ,name ,arg ,docstring ,@body)))
((defstruct)
(destructuring-bind (def name-and-options . slots)
definition-form
`(,def ,name-and-options ,docstring ,@slots)))
((defclass define-condition)
(destructuring-bind (def name supers slots . opts)
definition-form
(pushnew `(:documentation ,docstring)
opts :key #'car)
`(,def ,name ,supers ,slots
,@opts)))
((defgeneric)
(destructuring-bind (def name args . opts)
definition-form
(pushnew `(:documentation ,docstring)
opts :key #'car)
`(,def ,name ,args
,@opts)))
(t (error "Documentation not supported: ~a"
definition-form))))
definition-form))
;; todo:
;; define-compiler-macro define-condition
;; define-method-combination define-modify-macro
;; define-setf-expander define-symbol-macro