diff options
-rw-r--r-- | elisp/geiser-autodoc.el | 24 | ||||
-rw-r--r-- | scheme/guile/geiser/introspection.scm | 16 |
2 files changed, 22 insertions, 18 deletions
diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el index 4f4a43a..f8e682b 100644 --- a/elisp/geiser-autodoc.el +++ b/elisp/geiser-autodoc.el @@ -71,25 +71,27 @@ when `geiser-autodoc-display-module-p' is on." (defvar geiser-autodoc--last-funs nil)) (defun geiser-autodoc--function-args (funs) - (let ((pr (and (eq (car geiser-autodoc--last) (caar funs)) (car funs)))) - (if pr (geiser-autodoc--fun-args-str (car pr) - (cdr geiser-autodoc--last) - (cdr pr)) - (setq geiser-autodoc--last-funs funs) - (geiser-eval--send `(:gs ((:ge arguments) ,@(mapcar (lambda (f) (list 'quote (car f))) - funs))) - 'geiser-autodoc--function-args-cont) - ""))) + (when funs + (let ((pr (and (eq (car geiser-autodoc--last) (caar funs)) (car funs)))) + (if pr (geiser-autodoc--fun-args-str (car pr) + (cdr geiser-autodoc--last) + (cdr pr)) + (setq geiser-autodoc--last-funs funs) + (geiser-eval--send `(:gs ((:ge arguments) ,@(mapcar (lambda (f) (list 'quote (car f))) + funs))) + 'geiser-autodoc--function-args-cont) + "")))) (defun geiser-autodoc--function-args-cont (ret) (let ((result (geiser-eval--retort-result ret))) - (when (listp result) + (when (and result (listp result)) (setq geiser-autodoc--last result) (eldoc-message (geiser-autodoc--fun-args-str (car result) (cdr result) (or (cdr (assoc (car result) - geiser-autodoc--last-funs)))))))) + geiser-autodoc--last-funs)) + 0)))))) (defun geiser-autodoc--insert (sym current pos) (let ((str (format "%s" sym))) diff --git a/scheme/guile/geiser/introspection.scm b/scheme/guile/geiser/introspection.scm index a158d66..cd48740 100644 --- a/scheme/guile/geiser/introspection.scm +++ b/scheme/guile/geiser/introspection.scm @@ -25,19 +25,19 @@ ;;; Code: (define-module (geiser introspection) - #:export (arguments completions symbol-location) + #:export (arguments completions symbol-location docstring) #:use-module (system vm program) #:use-module (ice-9 session) #:use-module (srfi srfi-1)) (define (arguments sym . syms) (let loop ((sym sym) (syms syms)) - (cond ((obj-args (resolve-symbol sym)) => (lambda (args) (cons sym args))) + (cond ((obj-args (symbol->obj sym)) => (lambda (args) (cons sym args))) ((null? syms) #f) (else (loop (car syms) (cdr syms)))))) -(define (resolve-symbol sym) - (module-ref (current-module) sym)) +(define (symbol->obj sym) + (and (symbol? sym) (module-ref (current-module) sym))) (define (obj-args obj) (cond ((not obj) #f) @@ -80,9 +80,11 @@ (define (procedure-args-from-source name src) (let ((formals (cadr src))) (cond ((list? formals) (format-args formals #f (symbol-module name))) - ((pair? formals) (format-args (car formals) - (cdr formals) - (symbol-module name))) + ((pair? formals) (let ((req (car formals)) + (opt (cdr formals))) + (format-args (if (list? req) req (list req)) + opt + (symbol-module name)))) (else #f)))) (define (macro-args macro) |