docs/qapi-domain: warn when QAPI domain xrefs fail to resolve

This patch adds a warning (which is a build failure under our current
build settings) whenever a QAPI cross-reference fails to resolve.

This applies to any cross-references of the form :qapi:{role}:`foo`,
which covers all of the automatically generated references by the qapi
domain, and any such references that are manually written into the
documentation rst files.

Cross-references of the form `foo` do not use this system, but are
already configured to issue a warning (Again, a build failure) if the
cross-reference isn't found anywhere.

Adds warnings that look like the following:

docs/qapi/index.rst:48: WARNING: qapi:type reference target not found: 'footype' [ref.qapi]
docs/qapi/index.rst:50: WARNING: qapi:mod reference target not found: 'foomod' [ref.qapi]

Signed-off-by: John Snow <jsnow@redhat.com>
Message-ID: <20250311034303.75779-31-jsnow@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
John Snow 2025-03-10 23:42:28 -04:00 committed by Markus Armbruster
parent a1fe2cd443
commit d48a8f8de3

View file

@ -830,6 +830,29 @@ class QAPIDomain(Domain):
matches = self.find_obj(modname, target, typ)
if not matches:
# Normally, we could pass warn_dangling=True to QAPIXRefRole(),
# but that will trigger on references to these built-in types,
# which we'd like to ignore instead.
# Take care of that warning here instead, so long as the
# reference isn't to one of our built-in core types.
if target not in (
"string",
"number",
"int",
"boolean",
"null",
"value",
"q_empty",
):
logger.warning(
__("qapi:%s reference target not found: %r"),
typ,
target,
type="ref",
subtype="qapi",
location=node,
)
return None
if len(matches) > 1: