diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-07-24 01:12:26 +0200 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-07-24 01:12:26 +0200 |
commit | d2cb7333992ba6c523814f1de8e714e345a50475 (patch) | |
tree | 4a65db6ac07647150dfb461c9d3106645559fcd4 /scheme | |
parent | 6d5280bde548ea2df907b716ac51bb2de5a602f7 (diff) | |
download | geiser-chez-d2cb7333992ba6c523814f1de8e714e345a50475.tar.gz geiser-chez-d2cb7333992ba6c523814f1de8e714e345a50475.tar.bz2 |
Racket: showing contracts in module documentation.
Diffstat (limited to 'scheme')
-rw-r--r-- | scheme/racket/geiser/modules.rkt | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/scheme/racket/geiser/modules.rkt b/scheme/racket/geiser/modules.rkt index 0ab372a..6ed2ecc 100644 --- a/scheme/racket/geiser/modules.rkt +++ b/scheme/racket/geiser/modules.rkt @@ -138,24 +138,30 @@ module-cache) (define (module-exports mod) + (define (value id) (dynamic-require mod id (const #f))) + (define (contracted id) + (let ([v (value id)]) + (if (has-contract? v) + (cons id (contract-name (value-contract v))) + id))) (define (extract-ids ls) (append-map (lambda (idls) (map car (cdr idls))) ls)) - (define (classify-ids ids ns) + (define (classify-ids ids) (let loop ([ids ids] [procs '()] [vars '()]) (cond [(null? ids) - `((procs ,@(reverse procs)) (vars ,@(reverse vars)))] - [(procedure? - (namespace-variable-value (car ids) #t (const #f) ns)) + `((procs ,@(map contracted (reverse procs))) + (vars ,@(map contracted (reverse vars))))] + [(procedure? (value (car ids))) (loop (cdr ids) (cons (car ids) procs) vars)] [else (loop (cdr ids) procs (cons (car ids) vars))]))) (let-values (((reg syn) (module-compiled-exports (get-module-code (resolve-module-path mod #f))))) - (let ((syn (extract-ids syn)) - (reg (extract-ids reg))) - `((syntax ,@syn) ,@(classify-ids reg (module-spec->namespace mod)))))) + (let ([syn (map contracted (extract-ids syn))] + [reg (extract-ids reg)]) + `((syntax ,@syn) ,@(classify-ids reg))))) (define (startup) (thread update-module-cache) |