On Thu, Mar 13, 2025 at 2:47 AM Markus Armbruster <arm...@redhat.com> wrote:

> John Snow <js...@redhat.com> writes:
>
> > This patch does three things:
> >
> > 1. Record the current namespace context in pending_xrefs so it can be
> >    used for link resolution later,
> > 2. Pass that recorded namespace context to find_obj() when resolving a
> >    reference, and
> > 3. Wildly and completely rewrite find_obj().
> >
> > cross-reference support is expanded to tolerate the presence or absence
> > of either namespace or module, and to cope with the presence or absence
> > of contextual information for either.
> >
> > References now work like this:
> >
> > 1. If the explicit reference target is recorded in the domain's object
> >    registry, we link to that target and stop looking. We do this lookup
> >    regardless of how fully qualified the target is, which allows direct
> >    references to modules (which don't have a module component to their
> >    names) or direct references to definitions that may or may not belong
> >    to a namespace or module.
> >
> > 2. If contextual information is available from qapi:namespace or
> >    qapi:module directives, try using those components to find a direct
> >    match to the implied target name.
> >
> > 3. If both prior lookups fail, generate a series of regular expressions
> >    looking for wildcard matches in order from most to least
> >    specific. Any explicitly provided components (namespace, module)
> >    *must* match exactly, but both contextual and entirely omitted
> >    components are allowed to differ from the search result. Note that if
> >    more than one result is found, Sphinx will emit a warning (a build
> >    error for QEMU) and list all of the candidate references.
> >
> > The practical upshot is that in the large majority of cases, namespace
> > and module information is not required when creating simple `references`
> > to definitions from within the same context -- even when identical
> > definitions exist in other contexts.
>
> Can you illustrate this this examples?
>

do wha?


>
> > Even when using simple `references` from elsewhere in the QEMU
> > documentation manual, explicit namespace info is not required if there
> > is only one definition by that name.
>
> Fails safely: if we add a second definition, doc generation errors out.
> Correct?
>

Yes, see the disambiguation patch for qapi-domain.rst for proof. Roll it
back and see what happens!


>
> > Disambiguation *will* be required from outside of the QAPI documentation
> > when referencing e.g. block-core definitions, which are shared between
> > QEMU QMP and the QEMU Storage Daemon. In that case, there are two
> > options:
> >
> > A: References can be made partially or fully explicit,
> >    e.g. `QMP:block-dirty-bitmap-add` will link to the QEMU version of
> >    the definition, while `QGA:block-dirty-bitmap-add` would link to the
> >    QGA version.
>
> Do you mean "QSD:"?
>

Haha! Yes, I suppose I did.


>
> > B: If all of the references in a document are intended to go to the same
> >    place, you can insert a "qapi:namespace:: QMP" directive to influence
> >    the fuzzy-searching for later references.
> >
> > Signed-off-by: John Snow <js...@redhat.com>
>
>

Reply via email to