John Snow <js...@redhat.com> writes:

> 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?

Sorry, I went into the curve too fast.

The stuff under "References now work like this" confuses me.  I guess it
describes a series of lookups to try one after the other.

I understand a cross-reference consists of namespace (optional), module
(optional), name, and role.

Let's assume role is "any" for simplicity's sake.

Regarding "1. If the explicit ...":

    What is a reference's "explicit reference target"?  Examples might
    help me understand.

    What is "recorded in the domain's object registry"?

    Can you show me a reference where this lookup succeeds?

Regarding "2. If contextual information ...":

    I guess "contextual information" is the context established by
    qapi:namespace and qapi:module directives, i.e. the current
    namespace and module, if any.

    If the cross reference lacks a namespace, we substitute the current
    namespace.  Same for module.

    We then use that "to find a direct match to the implied target
    name".  Sounds greek to me.  Example(s) might help.

Regarding "3. If both prior lookups fail ...":

    I guess we get here when namespace or module are absent, and
    substituting the current namespace or module doesn't resolve.  We
    then substitute a wildcard, so to speak, i.e. look in all namespaces
    / modules, and succeed if we find exactly one resolution.  Fair?

[...]


Reply via email to