[racket] Additional cached index for documentation?
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