At Sun, 17 Nov 2019 12:12:15 -0600, Alexis King wrote:
> I do have two related followup questions, though. First, how does
> `raco setup` know what the dependencies are in the first place, so it
> knows what it needs to rerender? I’ve noticed it seems to do things
> in at least two passes—“running” the documentation before “rendering”
> it—is that somehow involved?

Yes, more or less. Unless I've forgotten something, it would be ok to
start with "rendering" and then use as many "re-rendering" passes as
needed. But when starting from scratch, it's typically going to take a
couple of passes to get cross-references resolved, in which case
actually rendering the documentation the first time around would take
even longer. There's probably room for improvement through heuristics
that choose whether to use a "running" pass or not.

Dependencies are determined by keeping track of what searches the
cross-reference database are made and keeping track of which documents
end up supplying results for those searches. For example, if a document
links to `cons` from `racket/base`, then that's supplied by the
Reference, so that means a dependency for the document on the
Reference. Those dependencies are recorded by `raco setup` in
"in.sxref" files.

> Second, I’d like to better understand how “tag prefixes” work,  [...]
> What part of the pipeline implements this prefix-sensitive lookup behavior?
> Is it the `resolve-get` family of functions, so I can just put things
> in the `tag-prefixes` field of a `part` during the collect phase and
> everything else will happen automatically?

Yes, that's right.

Some searches can involve multiples tries until there's a hit. That
happens with the search implemented in `scribble/racket` for linking to
bindings, where searching tries a module, then the module that the
first re-exports from (if any), and so on. In that case, there's a way
of recording all the keys that were tried, so that dependencies can be
updated when something starts supplying one of the intermediate keys.

> Also, I don’t completely understand the way the resolution works… is
> it possible for there to be some kind of “ambiguous match,” where two
> different tag definitions are equally-specific matches for a given
> reference? If so, what happens in that scenario? (And if not, why
> not?)

A warning is reported by `raco setup` when the same key is defined by
multiple documents; it inspects cross-reference information
specifically to look for those duplicates. The Scribble layer by itself
only warns about multiple definitions of a key within a document.

(Like many warnings, it would have been better to make that one an
error at the `raco setup` level, but it seemed too stringent
originally.)

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/5dd1b51c.1c69fb81.d796b.dc20SMTPIN_ADDED_MISSING%40gmr-mx.google.com.

Reply via email to