diff --git a/collects/setup/xref.ss b/collects/setup/xref.ss index 63717c4674..e1255b3049 100644 --- a/collects/setup/xref.ss +++ b/collects/setup/xref.ss @@ -8,47 +8,40 @@ (define cached-xref #f) +(define (get-dests dir) + (map (lambda (d) + (if (pair? d) + (let* ([flags (if (pair? (cdr d)) (cadr d) null)] + [name (if (and (pair? (cdr d)) (pair? (cddr d)) (caddr d)) + (cadr d) + (let-values ([(base name dir?) (split-path (car d))]) + (path-replace-suffix name #"")))]) + (build-path + (if (memq 'main-doc flags) + (build-path (find-doc-dir) name) + (build-path dir "compiled" "doc" name)) + "out.sxref")) + #f)) + ((get-info/full dir) 'scribblings))) + (define (load-collections-xref [report-loading void]) (or cached-xref (begin (report-loading) - (let* ([dirs (find-relevant-directories '(scribblings))] - [infos (map get-info/full dirs)] - [dests (filter - values - (apply append - (map (lambda (i dir) - (let ([s (i 'scribblings)]) - (map (lambda (d) - (if (pair? d) - (let ([flags (if (pair? (cdr d)) - (cadr d) - null)]) - (let ([name (if (and (pair? (cdr d)) - (pair? (cddr d)) - (caddr d)) - (cadr d) - (let-values ([(base name dir?) (split-path (car d))]) - (path-replace-suffix name #"")))]) - (build-path - (if (memq 'main-doc flags) - (build-path (find-doc-dir) name) - (build-path dir "compiled" "doc" name)) - "out.sxref"))) - #f)) - s))) - infos - dirs)))]) - (set! cached-xref (load-xref (map (lambda (dest) - (lambda () - (with-handlers ([exn:fail? (lambda (exn) - (fprintf (current-error-port) - "WARNING: ~a\n" - (if (exn? exn) - (exn-message exn) - (format "~e" exn))) - #f)]) - (let ([r (with-input-from-file dest read)]) - (cadr r))))) - dests))) + (let* ([dests (map get-dests (find-relevant-directories '(scribblings)))] + [dests (filter values (apply append dests))]) + (set! cached-xref + (load-xref (map (lambda (dest) + (lambda () + (with-handlers ([exn:fail? + (lambda (exn) + (fprintf (current-error-port) + "WARNING: ~a\n" + (if (exn? exn) + (exn-message exn) + (format "~e" exn))) + #f)]) + (let ([r (with-input-from-file dest read)]) + (cadr r))))) + dests))) cached-xref))))