aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2025-03-13 00:43:04 -0400
committerMarkus Armbruster <armbru@redhat.com>2025-03-14 07:31:56 +0100
commit74d40b011c27dc343ad56022a322d212135c96ed (patch)
tree1db6620af39c0dca0a7a751efe5d2099c8dcbec5 /docs
parente36afc7bcc193da144f5d45c7c37eb62835b3ab1 (diff)
downloadqemu-74d40b011c27dc343ad56022a322d212135c96ed.zip
qemu-74d40b011c27dc343ad56022a322d212135c96ed.tar.gz
qemu-74d40b011c27dc343ad56022a322d212135c96ed.tar.bz2
docs/qapi_domain: add namespace support to FQN
This patch adds a namespace component to the "Fully Qualified Name", in the form of "domain:module.name". As there are no namespace directives or options yet, this component will simply be empty as of this patch. Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250313044312.189276-4-jsnow@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/sphinx/qapi_domain.py35
1 files changed, 27 insertions, 8 deletions
diff --git a/docs/sphinx/qapi_domain.py b/docs/sphinx/qapi_domain.py
index 6b23fc7..48a082d 100644
--- a/docs/sphinx/qapi_domain.py
+++ b/docs/sphinx/qapi_domain.py
@@ -178,15 +178,18 @@ class QAPIDescription(ParserFix):
# NB: this is used for the global index, not the QAPI index.
return ("single", f"{name} (QMP {self.objtype})")
- def _get_context(self) -> str:
+ def _get_context(self) -> Tuple[str, str]:
+ namespace = self.options.get(
+ "namespace", self.env.ref_context.get("qapi:namespace", "")
+ )
modname = self.options.get(
"module", self.env.ref_context.get("qapi:module", "")
)
- assert isinstance(modname, str)
- return modname
+
+ return namespace, modname
def _get_fqn(self, name: Signature) -> str:
- modname = self._get_context()
+ namespace, modname = self._get_context()
# If we're documenting a module, don't include the module as
# part of the FQN; we ARE the module!
@@ -195,6 +198,8 @@ class QAPIDescription(ParserFix):
if modname:
name = f"{modname}.{name}"
+ if namespace:
+ name = f"{namespace}:{name}"
return name
def add_target_and_index(
@@ -227,13 +232,18 @@ class QAPIDescription(ParserFix):
)
@staticmethod
- def split_fqn(name: str) -> Tuple[str, str]:
+ def split_fqn(name: str) -> Tuple[str, str, str]:
+ if ":" in name:
+ ns, name = name.split(":")
+ else:
+ ns = ""
+
if "." in name:
module, name = name.split(".")
else:
module = ""
- return (module, name)
+ return (ns, module, name)
def _object_hierarchy_parts(
self, sig_node: desc_signature
@@ -251,7 +261,7 @@ class QAPIDescription(ParserFix):
return ""
config = self.env.app.config
- modname, name = toc_parts
+ namespace, modname, name = toc_parts
if config.toc_object_entries_show_parents == "domain":
ret = name
@@ -259,6 +269,10 @@ class QAPIDescription(ParserFix):
"qapi:module", ""
):
ret = f"{modname}.{name}"
+ if namespace and namespace != self.env.ref_context.get(
+ "qapi:namespace", ""
+ ):
+ ret = f"{namespace}:{ret}"
return ret
if config.toc_object_entries_show_parents == "hide":
return name
@@ -334,10 +348,15 @@ class QAPIObject(QAPIDescription):
As such, the only argument here is "sig", which is just the QAPI
definition name.
"""
- modname = self._get_context()
+ # No module or domain info allowed in the signature!
+ assert ":" not in sig
+ assert "." not in sig
+ namespace, modname = self._get_context()
signode["fullname"] = self._get_fqn(sig)
+ signode["namespace"] = namespace
signode["module"] = modname
+
sig_prefix = self.get_signature_prefix()
if sig_prefix:
signode += addnodes.desc_annotation(