[racket] Additional cached index for documentation?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Mar 17 22:50:12 EDT 2014

Probably it should be a new document along the lines of
"scribblings/main/[user/]search.scrbl" (in the "racket-index" package)
or an extra output of those documents.

And probably you want to generate a mapping from symbols to xref tags,
since `xref-tag->path+anchor` can convert a tag to a URL relatively
efficiently (by way of "docindex.sqlite").

At Mon, 17 Mar 2014 22:26:25 -0400, Greg Hendershott wrote:
> Let's say that, given a symbol that may be a documented item -- e.g.
> `case` -- I want a list of symbols representing the module(s) for
> which it is documented.
> 
> I might want this so that I can build hyperlink(s) to the
> documentation for the item. Or maybe I'm doing autocomplete and just
> want to see if it's documented, at all.
> 
> How I currently do this, based on IIRC looking at racket/help source:
> 
> (define xref (load-collections-xref))
> 
> (define sym-mods
>   ;; (symbol? . -> . (listof symbol?))
>   (let ([cache #f])
>     (lambda (sym)
>       (unless cache
>         (set! cache (make-hasheq))
>         (prn0 "Building Racket documentation cache...")
>         (for ([x (in-list (xref-index xref))])
>           (match x
>             [(entry words content tag (exported-index-desc name from-libs))
>              (hash-set! cache name (append (hash-ref cache name '())
>                                            (filter symbol? from-libs)))]
>             [_ (void)]))
>         (prn0 "...~a items" (hash-count cache)))
>       (hash-ref cache sym #f))))
> 
> And e.g. for `case` this would return '(rnrs/base-6 racket/base racket
> mzscheme lang/htdp-advanced plai/mutator lazy r5rs plai/gc2/mutator).
> 
> This works but is quite slow building the cache the first time.
> 
> I think at least a few of us do this sort of thing. I think DrRacket
> does this, racket/help does this, and some third-party tools do it (or
> would do it if easier to do). So it would be great to save this cache
> on-disk, and a simple function to access it.
> 
> I started off thinking oh I should make a package for this. But now
> I'm thinking it should be a pull-request.  Why?  Because it seems like
> `raco setup` would be the entity that knows when to rebuild the cache.
> Perhaps when it rebuilds the collections xref?  I don't clearly
> understand the whole doc xref process. Maybe there's a good reason
> this doesn't already exist, or it isn't so straightforward. So I
> wanted to see if folks who do know it well, have any suggestions or
> ideas.
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

Posted on the users mailing list.