emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-chicken 50ddd07 070/102: Much faster completions fo


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-chicken 50ddd07 070/102: Much faster completions for Chicken 5; less errors in the log.
Date: Sun, 1 Aug 2021 18:26:57 -0400 (EDT)

branch: elpa/geiser-chicken
commit 50ddd071588e9e284566561afccf720eca507fed
Author: Dan Leslie <dan@ironoxide.ca>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Much faster completions for Chicken 5; less errors in the log.
---
 geiser/chicken5.scm | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/geiser/chicken5.scm b/geiser/chicken5.scm
index 4ef110e..6c8ceae 100644
--- a/geiser/chicken5.scm
+++ b/geiser/chicken5.scm
@@ -140,15 +140,13 @@
         (write-to-log out-form))
 
       (newline)))
-
-  (define (read* str)
-    (with-input-from-string str (lambda () (read))))
   
   (define (eval* str)
-    (cond
-     ((symbol? str) (eval str))
-     ((string? str) (eval (read* str)))
-     (else #f)))
+    (handle-exceptions exn #f 
+      (with-all-output-to-string
+       (eval
+       (with-input-from-string (->string str)
+         (lambda () (read)))))))
   
   (define (fmt node)
     (let* ((mod (cadr node))
@@ -160,7 +158,9 @@
        `(,sym ("args" (("required" <macro>)
                        ("optional" ...)
                        ("key")))
-              ("module")))
+              ,(if (and mod)
+                   (cons "module" mod)
+                   (list "module"))))
        ((or (equal? 'variable type)
            (equal? 'constant type))
        `(,sym ("value" . ,(eval* sym))))
@@ -197,7 +197,9 @@
          `(,sym ("args" (("required" ,@reqs)
                          ("optional" ,@opts)
                          ("key" ,@keys)))
-                ("module")))))))
+                ,(if (and mod)
+                     (cons "module" mod)
+                     (list "module"))))))))
 
   ;; Builds a signature list from an identifier
   (define (find-signatures sym)
@@ -277,14 +279,13 @@
   
   (define (geiser-autodoc ids . rest)
     (cond
-     ((null? ids) '())
-     ((not (list? ids))
-      (geiser-autodoc (list ids)))
-     (else 
-      (let ((details (find-signatures (car ids))))
-       (if (null? details)
-           (geiser-autodoc (cdr ids))
-           details)))))
+     ((null? ids) #f)
+     ((symbol? ids)
+      (find-signatures ids))
+     ((list? ids)
+      (let ((first (find-signatures (car ids))))
+       (if first first (geiser-autodoc (cdr ids)))))
+     (else #f)))
   
   (define (geiser-object-signature name object . rest)
     (let* ((sig (geiser-autodoc `(,name))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]