From d2cb7333992ba6c523814f1de8e714e345a50475 Mon Sep 17 00:00:00 2001
From: Jose Antonio Ortega Ruiz <jao@gnu.org>
Date: Sat, 24 Jul 2010 01:12:26 +0200
Subject: Racket: showing contracts in module documentation.

---
 scheme/racket/geiser/modules.rkt | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

(limited to 'scheme/racket')

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)
-- 
cgit v1.2.3