diff options
-rw-r--r-- | scheme/guile/geiser/doc.scm | 24 | ||||
-rw-r--r-- | scheme/guile/geiser/modules.scm | 14 | ||||
-rw-r--r-- | scheme/guile/geiser/utils.scm | 12 |
3 files changed, 28 insertions, 22 deletions
diff --git a/scheme/guile/geiser/doc.scm b/scheme/guile/geiser/doc.scm index 982af95..85bf4d4 100644 --- a/scheme/guile/geiser/doc.scm +++ b/scheme/guile/geiser/doc.scm @@ -38,11 +38,14 @@ (and args (signature name args)))) (define (signature id args-list) + (define (rem-gensyms args) + (map (lambda (s) (if (gensym? s) '_ + (if (list? s) (rem-gensyms s) s))) args)) (define (arglst args kind) (let ((args (assq-ref args kind))) - (cond ((or (not args) (null? args)) '()) - ((list? args) args) - (else (list args))))) + (rem-gensyms (cond ((or (not args) (null? args)) '()) + ((list? args) args) + (else (list args)))))) (define (mkargs as) `((required ,@(arglst as 'required)) (optional ,@(arglst as 'optional) @@ -80,24 +83,19 @@ (else #f)))) (define (arity->args art) + (define (gen-arg-names count) + (map (lambda (x) '_) (iota (max count 0)))) (let ((req (car art)) (opt (cadr art)) (rest (caddr art))) `(,@(if (> req 0) - (list (cons 'required (gen-arg-names 1 req))) + (list (cons 'required (gen-arg-names req))) '()) ,@(if (> opt 0) - (list (cons 'optional (gen-arg-names (+ 1 req) opt))) + (list (cons 'optional (gen-arg-names opt))) '()) ,@(if rest (list (cons 'rest 'rest)) '())))) -(define (gen-arg-names fst count) - (let* ((letts (list->vector '(#\x #\y #\z #\u #\v #\w #\t))) - (len (vector-length letts)) - (lett (lambda (n) (vector-ref letts (modulo n len))))) - (map (lambda (n) (string->symbol (format "~A" (lett (- n 1))))) - (iota (max count 1) fst)))) - (define (arglist->args arglist) `((required . ,(car arglist)) (optional . ,(cadr arglist)) @@ -173,7 +171,7 @@ (with-output-to-string (lambda () (let* ((type (cond ((macro? obj) "A macro") - ((procedure? obj) "A procedure") + ((procedure? obj) "A procedure") ((program? obj) "A compiled program") (else "An object"))) (modname (symbol-module sym)) diff --git a/scheme/guile/geiser/modules.scm b/scheme/guile/geiser/modules.scm index 6f499dd..7ca18c9 100644 --- a/scheme/guile/geiser/modules.scm +++ b/scheme/guile/geiser/modules.scm @@ -25,7 +25,7 @@ (define (module-name? module-name) (and (list? module-name) - (> (length module-name) 0) + (not (null? module-name)) (every symbol? module-name))) (define (symbol-module sym . all) @@ -67,13 +67,13 @@ (define (all-modules) (define (maybe-name m) - (let ((name (format "~A" (module-name m)))) - (and (not (string-match "^[(]#[{]" name)) name))) + (let ((name (module-name m))) + (and (not (gensym? (car name))) + (format "~A" name)))) (let* ((guile (resolve-module '(guile))) - (roots (remove (lambda (m) (eq? m guile)) (root-modules)))) - (cons "(guile)" - (filter-map maybe-name - (apply append (map all-child-modules roots)))))) + (roots (remove (lambda (m) (eq? m guile)) (root-modules))) + (children (append-map all-child-modules roots))) + (cons "(guile)" (filter-map maybe-name children)))) (define* (all-child-modules mod #:optional (seen '())) (let ((cs (filter (lambda (m) (not (member m seen))) (submodules mod)))) diff --git a/scheme/guile/geiser/utils.scm b/scheme/guile/geiser/utils.scm index b047e6c..01dfaa0 100644 --- a/scheme/guile/geiser/utils.scm +++ b/scheme/guile/geiser/utils.scm @@ -1,6 +1,6 @@ ;;; utils.scm -- utility functions -;; Copyright (C) 2009 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the Modified BSD License. You should @@ -13,7 +13,9 @@ #:export (make-location symbol->object pair->list - sort-symbols!)) + sort-symbols! + gensym?) + #:use-module (ice-9 regex)) (define (symbol->object sym) (and (symbol? sym) @@ -35,4 +37,10 @@ (string<? (symbol->string l) (symbol->string r))))) (sort! syms cmp))) +(define (gensym? sym) + (and (symbol? sym) (gensym-name? (format "~A" sym)))) + +(define (gensym-name? name) + (and (string-match "^#[{]" name) #t)) + ;;; utils.scm ends here |