28 lines
1018 B
Scheme
28 lines
1018 B
Scheme
(define-module (guile-docs reflection)
|
|
#:export (current-module-docs
|
|
pp-module-docs))
|
|
|
|
(define (current-module-docs)
|
|
"Print the docs for the current module as well as all of the modules used by this module."
|
|
(let* ((cur (current-module))
|
|
(used (module-uses cur)))
|
|
(pp-module-docs cur)
|
|
(map pp-module-docs used)
|
|
#f))
|
|
|
|
(define (pp-module-docs module)
|
|
"Example of how to fetch docs from a module.
|
|
This sort of pattern can be used when we want to scan a given module.
|
|
Input is a module object, not a module name. For that, invoke (resolve-interface '(a module))
|
|
before passing to this method."
|
|
(module-for-each
|
|
(lambda (sym var)
|
|
(let* ((binding (variable-ref var))
|
|
(proc (cond
|
|
((procedure? binding) binding)
|
|
((macro? binding) (macro-binding binding))
|
|
(else #f)))
|
|
(docs (when (procedure? proc) (procedure-documentation proc))))
|
|
(format #t "-- ~y ~a\n" sym (or docs ""))))
|
|
module))
|