diff options
Diffstat (limited to 'scheme')
-rw-r--r-- | scheme/geiser/introspection.scm | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/scheme/geiser/introspection.scm b/scheme/geiser/introspection.scm index ae2b0d3..991b62d 100644 --- a/scheme/geiser/introspection.scm +++ b/scheme/geiser/introspection.scm @@ -44,28 +44,31 @@ (let* ((arity (program-arity program)) (arg-no (first arity)) (opt (> (second arity) 0)) - (args (map first (take (program-bindings program) arg-no)))) - (format-args (if opt (drop-right args 1) args) (and opt (last args))))) + (args (map first (take (program-bindings program) arg-no))) + (module (program-module program))) + (format-args (if opt (drop-right args 1) args) (and opt (last args)) module))) (define (procedure-args proc) (let* ((arity (procedure-property proc 'arity)) (req (first arity)) - (opt (third arity))) + (opt (third arity)) + (env (procedure-environment proc))) (format-args (map (lambda (n) (string->symbol (format "arg~A" (+ 1 n)))) (iota req)) - (and opt 'rest)))) + (and opt 'rest) + (and (not (null? env)) env)))) (define (macro-args macro) (let ((prog (macro-transformer macro))) (if prog (program-args prog) - (format-args '(...) #f)))) + (format-args '(...) #f #f)))) -(define (foobar) 6) -(define (format-args args opt) +(define (format-args args opt module) (list (cons 'required args) - (cons 'optional (or opt '())))) + (cons 'optional (or opt '())) + (cons 'module (if module (module-name module) '())))) (define (completions prefix) (map symbol->string (apropos-internal (string-append "^" prefix)))) |