diff options
| -rw-r--r-- | elisp/geiser-autodoc.el | 25 | ||||
| -rw-r--r-- | elisp/geiser-syntax.el | 25 | 
2 files changed, 34 insertions, 16 deletions
| diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el index 8222e0b..a338bb9 100644 --- a/elisp/geiser-autodoc.el +++ b/elisp/geiser-autodoc.el @@ -90,21 +90,11 @@ when `geiser-autodoc-display-module-p' is on."          (t '("..."))))  (defun geiser-autodoc--format-arg (a) -  (cond ((null a) "()") -        ((symbolp a) (format "%s" a)) -        ((equal a "...") "...") -        ((stringp a) (format "%S" a)) -        ((and (listp a) (keywordp (car a))) +  (cond ((and (listp a) (geiser-syntax--keywordp (car a)))           (if (and (cdr a) (listp (cdr a))) -             (format "(#%s %s)" (car a) (geiser-autodoc--format-arg (cadr a))) +             (format "(#%s %s)" (car a) (geiser-syntax--display (cadr a)))             (format "(#%s)" (car a)))) -        ((and (listp a) (eq (car a) 'quote)) -         (format "'%s" (geiser-autodoc--format-arg (cadr a)))) -        ((listp a) (format "(%s)" -                           (mapconcat 'geiser-autodoc--format-arg -                                      (geiser-autodoc--sanitize-args a) -                                      " "))) -        (t (format "%s" a)))) +        (t (geiser-syntax--display a))))  (defun geiser-autodoc--insert-arg-group (args current &optional pos)    (when args (insert " ")) @@ -115,9 +105,9 @@ when `geiser-autodoc-display-module-p' is on."                       (numberp current)                       (setq current (1+ current))                       (= (1+ pos) current)) -                (and (keywordp current) +                (and (geiser-syntax--keywordp current)                       (listp a) -                     (eq current (car a)))) +                     (geiser-syntax--symbol-eq current (car a))))          (put-text-property p (point)                             'face 'geiser-font-lock-autodoc-current-arg)          (setq pos nil current nil))) @@ -129,7 +119,10 @@ when `geiser-autodoc-display-module-p' is on."    (let ((cpos 1)          (reqs (cdr (assoc "required" args)))          (opts (mapcar (lambda (a) -                        (if (and (symbolp a) (not (eq a '...))) (list a) a)) +                        (if (and (symbolp a) +                                 (not (equal (symbol-name a) "..."))) +                            (list a) +                          a))                        (cdr (assoc "optional" args))))          (keys (cdr (assoc "key" args))))      (setq cpos diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el index ce5a7af..d6c6f91 100644 --- a/elisp/geiser-syntax.el +++ b/elisp/geiser-syntax.el @@ -235,6 +235,31 @@ implementation-specific entries for font-lock-keywords.")    (let ((geiser-syntax--read/buffer-limit (and (numberp boundary) boundary)))      (save-excursion (values (geiser-syntax--read) (point))))) +(defun geiser-syntax--mapconcat (fun lst sep) +  (cond ((null lst) "") +        ((not (listp lst)) (format ".%s%s" sep (funcall fun lst))) +        ((null (cdr lst)) (format "%s" (funcall fun (car lst)))) +        (t (format "%s%s%s" +                   (funcall fun (car lst)) +                   sep +                   (geiser-syntax--mapconcat fun (cdr lst) sep))))) + +(defun geiser-syntax--display (a) +  (cond ((null a) "()") +        ((eq a :t) "#t") +        ((eq a :f) "#f") +        ((geiser-syntax--keywordp a) (format "#%s" a)) +        ((symbolp a) (format "%s" a)) +        ((equal a "...") "...") +        ((stringp a) (format "%S" a)) +        ((and (listp a) (symbolp (car a)) +              (equal (symbol-name (car a)) "quote")) +         (format "'%s" (geiser-syntax--display (cadr a)))) +        ((listp a) +         (format "(%s)" +                 (geiser-syntax--mapconcat 'geiser-syntax--display a " "))) +        (t (format "%s" a)))) +  ;;; Code parsing: | 
