diff options
Diffstat (limited to 'scheme')
| -rw-r--r-- | scheme/Makefile.am | 2 | ||||
| -rw-r--r-- | scheme/racket/geiser/autodoc.rkt | 5 | ||||
| -rw-r--r-- | scheme/racket/geiser/completions.rkt | 2 | ||||
| -rw-r--r-- | scheme/racket/geiser/modules.rkt | 71 | ||||
| -rw-r--r-- | scheme/racket/geiser/startup.rkt (renamed from scheme/racket/geiser.rkt) | 2 | ||||
| -rw-r--r-- | scheme/racket/geiser/user.rkt | 4 | 
6 files changed, 62 insertions, 24 deletions
diff --git a/scheme/Makefile.am b/scheme/Makefile.am index 3c8908e..e1b6559 100644 --- a/scheme/Makefile.am +++ b/scheme/Makefile.am @@ -7,7 +7,6 @@ nobase_dist_pkgdata_DATA = \    guile/geiser/modules.scm \    guile/geiser/utils.scm \    guile/geiser/xref.scm \ -  racket/geiser.rkt \    racket/geiser/autodoc.rkt \    racket/geiser/completions.rkt \    racket/geiser/enter.rkt \ @@ -16,5 +15,6 @@ nobase_dist_pkgdata_DATA = \    racket/geiser/main.rkt \    racket/geiser/modules.rkt \    racket/geiser/server.rkt \ +  racket/geiser/startup.rkt \    racket/geiser/user.rkt \    racket/geiser/utils.rkt diff --git a/scheme/racket/geiser/autodoc.rkt b/scheme/racket/geiser/autodoc.rkt index e9c6a07..54cac24 100644 --- a/scheme/racket/geiser/autodoc.rkt +++ b/scheme/racket/geiser/autodoc.rkt @@ -229,5 +229,6 @@                  (module-compiled-exports                   (get-module-code (resolve-module-path mod #f)))])      (let ([syn (map contracted (extract-ids syn))] -          [reg (extract-ids reg)]) -      `((syntax ,@syn) ,@(classify-ids reg))))) +          [reg (extract-ids reg)] +          [subm (map list (or (submodules mod) '()))]) +      `((syntax ,@syn) ,@(classify-ids reg) (modules ,@subm))))) diff --git a/scheme/racket/geiser/completions.rkt b/scheme/racket/geiser/completions.rkt index 4cbc09f..0ed18d1 100644 --- a/scheme/racket/geiser/completions.rkt +++ b/scheme/racket/geiser/completions.rkt @@ -27,5 +27,3 @@  (define (module-completions prefix)    (filter-prefix prefix (module-list) #f)) - -;;; completions.rkt ends here diff --git a/scheme/racket/geiser/modules.rkt b/scheme/racket/geiser/modules.rkt index 8e85570..02fd460 100644 --- a/scheme/racket/geiser/modules.rkt +++ b/scheme/racket/geiser/modules.rkt @@ -18,7 +18,8 @@           namespace->module-path-name           module-path-name->name           module-spec->path-name -         module-list) +         module-list +         submodules)  (require srfi/13 geiser/enter) @@ -71,8 +72,8 @@                  [lens (map prefix-len cpaths)]                  [real-path (substring path (apply max lens))])             (if (absolute-path? real-path) -               (call-with-values (lambda () (split-path path)) -                 (lambda (_ basename __) (path->string basename))) +               (let-values ([(_ base __) (split-path path)]) +                 (path->string base))                 (regexp-replace "\\.[^./]*$" real-path "")))]          ;; [(eq? path '#%kernel) "(kernel)"]          [(string? path) path] @@ -98,37 +99,75 @@                  [len (- (string-length path) (bytes-length ext) 1)])             (substring path 0 len))))) -(define (visit-module-path path kind acc) +(define main-rkt (build-path "main.rkt")) +(define main-ss (build-path "main.ss")) + +(define ((visit-module-path reg?) path kind acc)    (define (register e p) -    (register-path (string->symbol e) (build-path (current-directory) p)) -    (cons e acc)) -  (define (find-main ext) -    (let ([m (build-path path (string-append "main." ext))]) -      (and (file-exists? m) m))) +    (when reg? +      (register-path (string->symbol e) (build-path (current-directory) p))) +    (values (cons e acc) reg?)) +  (define (get-main path main) +    (and (file-exists? main) (build-path path main))) +  (define (find-main path) +    (parameterize ([current-directory path]) +      (or (get-main path main-rkt) (get-main path main-ss))))    (case kind      [(file) (let ([entry (path->entry path)])                (if (not entry) acc (register entry path)))]      [(dir) (cond [(skippable-dir? path) (values acc #f)] -                 [(or (find-main "rkt") (find-main "ss")) => -                  (curry register (path->string path))] -                 [else acc])] +                 [(find-main path) => (curry register (path->string path))] +                 [else (values acc reg?)])]      [else acc])) -(define (find-modules path acc) +(define ((find-modules reg?) path acc)    (if (directory-exists? path)        (parameterize ([current-directory path]) -        (fold-files visit-module-path acc)) +        (fold-files (visit-module-path reg?) acc))        acc)) +(define (take-while pred lst) +  (let loop ([lst lst] [acc '()]) +    (cond [(null? lst) (reverse acc)] +          [(pred (car lst)) (loop (cdr lst) (cons (car lst) acc))] +          [else (reverse acc)]))) + +(define (submodules mod) +  (let* ([mod-name (if (symbol? mod) mod (get-mod mod))] +         [mod-str (and (symbol? mod-name) (symbol->string mod-name))]) +    (if mod-str +        (let ([ms (member mod-str (module-list))]) +          (and ms +               (take-while (lambda (m) (string-prefix? mod-str m)) +                           (cdr ms)))) +        (find-submodules mod)))) + +(define (find-submodules path) +  (and (path-string? path) +       (let-values ([(dir base ign) (split-path path)]) +         (and (or (equal? base main-rkt) +                  (equal? base main-ss)) +              (map (lambda (m) (path->string (build-path dir m))) +                   (remove "main" ((find-modules #f) dir '()))))))) +  (define (known-modules) -  (sort (foldl find-modules '() (current-library-collection-paths)) string<?)) +  (sort (foldl (find-modules #t) +               '() +               (current-library-collection-paths)) +        string<?))  (define registered (make-hash)) +(define registered-paths (make-hash)) + +(define (get-path mod) +  (hash-ref registered mod #f)) -(define (get-path mod) (hash-ref registered mod #f)) +(define (get-mod path) +  (hash-ref registered-paths path #f))  (define (register-path mod path)    (hash-set! registered mod path) +  (hash-set! registered-paths path mod)    path)  (define module-cache #f) diff --git a/scheme/racket/geiser.rkt b/scheme/racket/geiser/startup.rkt index 3d75157..6af06da 100644 --- a/scheme/racket/geiser.rkt +++ b/scheme/racket/geiser/startup.rkt @@ -1,4 +1,4 @@ -;;; geiser.rkt -- entry point +;;; startup.rkt -- entry point  ;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz diff --git a/scheme/racket/geiser/user.rkt b/scheme/racket/geiser/user.rkt index 4dc13e4..70defd4 100644 --- a/scheme/racket/geiser/user.rkt +++ b/scheme/racket/geiser/user.rkt @@ -16,7 +16,7 @@  (require (for-syntax racket/base)           mzlib/thread           racket/tcp -         geiser/main +         geiser           geiser/enter           geiser/eval           geiser/modules) @@ -38,7 +38,7 @@  (define geiser-loader (module-loader orig-loader))  (define (geiser-eval) -  (define geiser-main (module->namespace 'geiser/main)) +  (define geiser-main (module->namespace 'geiser))    (let* ([mod (read)]           [lang (read)]           [form (read)])  | 
