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

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

[nongnu] elpa/geiser-guile d5ff699 057/284: Refactoring.


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-guile d5ff699 057/284: Refactoring.
Date: Sun, 1 Aug 2021 18:29:15 -0400 (EDT)

branch: elpa/geiser-guile
commit d5ff699cf64305c6264941a9e8e6b89e39aac199
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Refactoring.
---
 geiser/doc.scm | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/geiser/doc.scm b/geiser/doc.scm
index ae24a87..35c5bfb 100644
--- a/geiser/doc.scm
+++ b/geiser/doc.scm
@@ -37,29 +37,29 @@
   #:use-module (oop goops)
   #:use-module (srfi srfi-1))
 
+(define placeholder (gensym))
+
 (define (autodoc form)
-  (cond ((null? form) #f)
+  (cond ((or (eq? form placeholder) (null? form)) #f)
         ((symbol? form) (describe-application (list form)))
-        ((and (pair? form) (not (list? form))) (autodoc (pair->list form)))
-        ((and (list? form)
-              (= 2 (length form))
-              (memq (car form)
-                    '(define define* define-macro define-macro* 
define-method)))
-         (autodoc (cons (car form)
-                        (cond ((or (symbol? (cadr form))
-                                   (null? (cadr form))
-                                   (not (list? (cadr form)))) '())
-                              (else (cdadr form))))))
-        ((list? form)
+        ((not (pair? form)) #f)
+        ((not (list? form)) (autodoc (pair->list form)))
+        ((define-head? form) => autodoc)
+        (else
          (let ((lst (last form)))
-           (cond ((symbol? lst) (or (describe-application (list lst))
-                                    (describe-application form)))
-                 ((pair? lst)
-                  (or (and (not (memq (car lst) '(quote)))
-                           (autodoc (pair->list lst)))
-                      (autodoc (map (lambda (s) (if (pair? s) (gensym) s)) 
form))))
-                 (else (describe-application form)))))
-        (else #f)))
+           (cond ((and (symbol? lst) (describe-application (list lst))))
+                 ((and (pair? lst) (not (memq (car lst) '(quote)))) (autodoc 
lst))
+                 ((pair? lst) (autodoc (flatten-last form)))
+                 (else (describe-application form)))))))
+
+(define (flatten-last form)
+  (reverse! (cons placeholder (cdr (reverse! form)))))
+
+(define (define-head? form)
+  (define def-heads '(define define* define-macro define-macro* define-method))
+  (and (= 2 (length form))
+       (memq (car form) def-heads)
+       (car form)))
 
 (define (object-signature name obj)
   (let ((args (obj-args obj)))



reply via email to

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