summaryrefslogtreecommitdiff
path: root/scheme
diff options
context:
space:
mode:
Diffstat (limited to 'scheme')
-rw-r--r--scheme/geiser/introspection.scm19
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))))