diff options
| author | Peter <craven@gmx.net> | 2016-05-02 11:03:30 +0200 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2016-05-02 21:15:49 +0200 | 
| commit | ab13b7ff828f1f510f66f1b5d712e03a42b85ac0 (patch) | |
| tree | 8898b7f8b7645c288a940370473ec95f6313ea73 | |
| parent | 1f1ee00402edcaad21e471e9f378425284ac3d78 (diff) | |
| download | geiser-chez-ab13b7ff828f1f510f66f1b5d712e03a42b85ac0.tar.gz geiser-chez-ab13b7ff828f1f510f66f1b5d712e03a42b85ac0.tar.bz2 | |
Chez: add rudimentary autodoc support
| -rw-r--r-- | scheme/chez/geiser/geiser.ss | 49 | 
1 files changed, 48 insertions, 1 deletions
| diff --git a/scheme/chez/geiser/geiser.ss b/scheme/chez/geiser/geiser.ss index 3dbed7f..2fa648c 100644 --- a/scheme/chez/geiser/geiser.ss +++ b/scheme/chez/geiser/geiser.ss @@ -52,8 +52,55 @@                (substring? prefix el))              (map write-to-string (library-list)))) +  (define (procedure-parameter-list p) +    ;; same as (inspect object), then hitting c +    (let ((s (((inspect/object p) 'code) 'source))) +      (if s +          (let ((form (s 'value))) +            (if (and (list? form) +                     (> (length form) 2) +                     (eq? (car form) 'lambda)) +                (cadr form) +                #f)) +          #f))) + +  (define (operator-arglist operator) +    (let ((binding (eval operator))) +      (if binding +          (let ((arglist (procedure-parameter-list binding))) +            (let loop ((arglist arglist) +                       (optionals? #f) +                       (required '()) +                       (optional '())) +              (cond ((null? arglist) +                     `(,operator ("args" (("required" ,@(reverse required)) +                                          ("optional" ,@(reverse optional)) +                                          ("key") +                                          ;; ("module" ,module) +                                          )))) +                    ((symbol? arglist) +                     (loop '() +                           #t +                           required +                           (cons "..." (cons arglist optional)))) +                    (else +                     (loop +                      (cdr arglist) +                      optionals? +                      (if optionals? required (cons (car arglist) required)) +                      (if optionals? (cons (car arglist) optional) optional)))))) +          '()))) +    (define (geiser:autodoc ids . rest) -    '()) +    (cond ((null? ids) '()) +          ((not (list? ids)) +           (geiser:autodoc (list ids))) +          ((not (symbol? (car ids))) +           (geiser:autodoc (cdr ids))) +          (else +           (map (lambda (id) +                  (operator-arglist id)) +                ids))))    (define (geiser:no-values)      #f) | 
