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

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

[nongnu] elpa/geiser-gambit 46b1549 15/34: better autocompletion with cl


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-gambit 46b1549 15/34: better autocompletion with cleaner procedure
Date: Sun, 1 Aug 2021 18:27:17 -0400 (EDT)

branch: elpa/geiser-gambit
commit 46b15497259c8d7dddc2c9f95b12cbe03165c648
Author: mathieu2em <math.per@hotmail.com>
Commit: mathieu2em <math.per@hotmail.com>

    better autocompletion with cleaner procedure
---
 scheme/gambit/geiser/gambit.scm | 40 ++++++++++++++++++----------------------
 1 file changed, 18 insertions(+), 22 deletions(-)

diff --git a/scheme/gambit/geiser/gambit.scm b/scheme/gambit/geiser/gambit.scm
index 74682f5..c3cedc4 100644
--- a/scheme/gambit/geiser/gambit.scm
+++ b/scheme/gambit/geiser/gambit.scm
@@ -101,29 +101,25 @@
 
 (define (geiser:module-completions prefix . rest)
 
+  (define (interesting? sym)
+    (and (string-prefix? prefix (symbol->string sym))
+         (procedure? (##global-var-ref (##make-global-var sym)))))
+
   (define (environment-symbols)
-    (let* ((sym-tab (##symbol-table))
-           (sym-len (vector-length sym-tab)))
-      (let loop ((i 1)
-                 (symbols-list '()))
-        (if (< i sym-len)
-            (let ((sym (vector-ref sym-tab i)))
-              (loop (+ i 1)
-                    (if (symbol? sym)
-                        (let loop2 ((sym-list (if (and (string-prefix? prefix 
sym)
-                                                       (procedure? 
(##global-var-ref (##make-global-var sym))))
-                                                  (cons (symbol->string sym) 
symbols-list)
-                                                  symbols-list))
-                                    (vect sym))
-                          (let ((sym2 (##vector-ref vect 2)))
-                            (if (symbol? sym2)
-                                (if (and (string-prefix? prefix sym2)
-                                         (procedure? (##global-var-ref 
(##make-global-var sym))))
-                                    (loop2 (cons (symbol->string sym2) 
sym-list) sym2)
-                                    (loop2 sym-list sym2))
-                                  sym-list)))
-                        symbols-list)))
-            symbols-list))))
+    (let ((symtab (##symbol-table)))
+      (let loop1 ((i (- (vector-length symtab) 1))
+                  (result '()))
+        (if (> i 0)
+            (let loop2 ((sym (vector-ref symtab i))
+                        (result result))
+              (if (symbol? sym)
+                  (loop2 (##vector-ref sym 2)
+                         (if (interesting? sym)
+                             (cons (symbol->string sym) result)
+                             result))
+                  (loop1 (- i 1)
+                         result)))
+            result))))
 
   (sort-list (environment-symbols) string-ci<?))
 



reply via email to

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