diff options
author | John Snow <jsnow@redhat.com> | 2025-03-13 00:43:04 -0400 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2025-03-14 07:31:56 +0100 |
commit | 74d40b011c27dc343ad56022a322d212135c96ed (patch) | |
tree | 1db6620af39c0dca0a7a751efe5d2099c8dcbec5 /docs | |
parent | e36afc7bcc193da144f5d45c7c37eb62835b3ab1 (diff) | |
download | qemu-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.py | 35 |
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( |