summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elisp/geiser-autodoc.el54
-rw-r--r--elisp/geiser-doc.el5
-rw-r--r--elisp/geiser-syntax.el20
3 files changed, 42 insertions, 37 deletions
diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el
index 16ca9ac..1d876dd 100644
--- a/elisp/geiser-autodoc.el
+++ b/elisp/geiser-autodoc.el
@@ -79,8 +79,7 @@ when `geiser-autodoc-display-module-p' is on."
(push f missing)))))
(unless cached
(setq geiser-autodoc--cached-signatures nil))
- (if (not missing)
- geiser-autodoc--cached-signatures
+ (if (not missing) geiser-autodoc--cached-signatures
(let ((res (geiser-eval--send/result `(:eval ((:ge autodoc)
(quote ,missing)))
500)))
@@ -111,33 +110,34 @@ when `geiser-autodoc-display-module-p' is on."
(propertize str 'face 'geiser-font-lock-autodoc-procedure-name)))
(defun geiser-autodoc--str (proc desc signature)
- ;; (message "composing %s with desc %s and signature %s" proc desc signature)
- (let ((cpos 1)
- (pos (second desc))
- (prev (third desc))
- (module (cdr (assoc 'module signature)))
- (reqs (cdr (assoc 'required signature)))
- (opts (cdr (assoc 'optional signature)))
- (keys (cdr (assoc 'key signature))))
- (save-current-buffer
- (set-buffer (geiser-syntax--font-lock-buffer))
- (erase-buffer)
- (insert (format "(%s " (geiser-autodoc--proc-name proc module)))
- (setq cpos
- (geiser-autodoc--insert-args reqs cpos (and (not (zerop pos)) pos)))
- (when opts
- (insert " [")
- (setq cpos (geiser-autodoc--insert-args opts cpos pos))
- (when keys
- (insert " [")
- (geiser-autodoc--insert-args keys prev nil)
- (insert "]"))
- (insert "]"))
- (insert ")")
- (buffer-string))))
+ (let ((args (cdr (assoc 'args signature)))
+ (module (cdr (assoc 'module signature))))
+ (if (not args) (geiser-autodoc--proc-name proc module)
+ (let ((cpos 1)
+ (pos (or (second desc) 0))
+ (prev (third desc))
+ (reqs (cdr (assoc 'required args)))
+ (opts (cdr (assoc 'optional args)))
+ (keys (cdr (assoc 'key args))))
+ (save-current-buffer
+ (set-buffer (geiser-syntax--font-lock-buffer))
+ (erase-buffer)
+ (insert (format "(%s " (geiser-autodoc--proc-name proc module)))
+ (setq cpos
+ (geiser-autodoc--insert-args reqs cpos (and (not (zerop pos)) pos)))
+ (when opts
+ (insert " [")
+ (setq cpos (geiser-autodoc--insert-args opts cpos pos))
+ (when keys
+ (insert " [")
+ (geiser-autodoc--insert-args keys prev nil)
+ (insert "]"))
+ (insert "]"))
+ (insert ")")
+ (buffer-string))))))
(defun geiser-autodoc--autodoc (path)
- (let* ((funs (nreverse (mapcar 'car path)))
+ (let* ((funs (mapcar 'car path))
(signs (geiser-autodoc--get-signatures funs)))
(when signs
(catch 'signature
diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el
index adef4c6..61c50f5 100644
--- a/elisp/geiser-doc.el
+++ b/elisp/geiser-doc.el
@@ -26,6 +26,7 @@
(require 'geiser-impl)
(require 'geiser-completion)
+(require 'geiser-autodoc)
(require 'geiser-eval)
(require 'geiser-syntax)
(require 'geiser-popup)
@@ -174,7 +175,9 @@
(message "No documentation available for '%s'" symbol)
(geiser-doc--with-buffer
(erase-buffer)
- (geiser-doc--insert-title (cdr (assoc 'signature ds)))
+ (geiser-doc--insert-title (geiser-autodoc--str (format "%s" symbol)
+ nil
+ (cdr (assoc 'signature ds))))
(newline)
(insert (or (cdr (assoc 'docstring ds)) ""))
(goto-line (point-min))
diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el
index 475a556..6cadf61 100644
--- a/elisp/geiser-syntax.el
+++ b/elisp/geiser-syntax.el
@@ -97,29 +97,31 @@
(defun geiser-syntax--scan-sexp ()
(let ((p (point))
(n -1)
- prev
- head)
+ prev head)
(ignore-errors
(backward-up-list)
(save-excursion
(forward-char)
- (skip-syntax-forward "^_w" p)
+ (skip-syntax-forward "^_w(" p)
(when (setq head (symbol-at-point))
(while (< (point) p)
(setq n (1+ n))
(setq prev (symbol-at-point))
(forward-sexp))))
- (if head (list head n prev) 'skip))))
+ (if head (list head n (and (> n 1) prev)) 'skip))))
(defun geiser-syntax--scan-sexps ()
(save-excursion
(goto-char (or (nth 8 (syntax-ppss)) (point)))
(let* ((sap (symbol-at-point))
- (path (and sap `((,sap 0))))
- s)
- (while (setq s (geiser-syntax--scan-sexp))
- (when (listp s) (push s path)))
- path)))
+ (fst (and sap (geiser-syntax--scan-sexp)))
+ (path (and fst
+ (cond ((not (listp fst)) `((,sap 0)))
+ ((eq sap (car fst)) (list fst))
+ (t (list fst (list sap 0)))))))
+ (while (setq fst (geiser-syntax--scan-sexp))
+ (when (listp fst) (push fst path)))
+ (nreverse path))))
(defun geiser-syntax--complete-partial-sexp (buffer begin end)
(geiser-syntax--with-buffer