mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
docs/qapi-domain: always store fully qualified name in signode
Currently, only the definition name is stored in the tree metadata; but the node property is confusingly called "fullname". Rectify this by always storing the FQN in the tree metadata. ... While we're here, re-organize the code in preparation for namespace support to make it a bit easier to add additional components of the FQN. With this change, there is now extremely little code left that's taken directly from the Python domain :) Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250313044312.189276-3-jsnow@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
8fad366260
commit
e36afc7bcc
1 changed files with 42 additions and 22 deletions
|
@ -178,6 +178,25 @@ class QAPIDescription(ParserFix):
|
||||||
# NB: this is used for the global index, not the QAPI index.
|
# NB: this is used for the global index, not the QAPI index.
|
||||||
return ("single", f"{name} (QMP {self.objtype})")
|
return ("single", f"{name} (QMP {self.objtype})")
|
||||||
|
|
||||||
|
def _get_context(self) -> str:
|
||||||
|
modname = self.options.get(
|
||||||
|
"module", self.env.ref_context.get("qapi:module", "")
|
||||||
|
)
|
||||||
|
assert isinstance(modname, str)
|
||||||
|
return modname
|
||||||
|
|
||||||
|
def _get_fqn(self, name: Signature) -> str:
|
||||||
|
modname = self._get_context()
|
||||||
|
|
||||||
|
# If we're documenting a module, don't include the module as
|
||||||
|
# part of the FQN; we ARE the module!
|
||||||
|
if self.objtype == "module":
|
||||||
|
modname = ""
|
||||||
|
|
||||||
|
if modname:
|
||||||
|
name = f"{modname}.{name}"
|
||||||
|
return name
|
||||||
|
|
||||||
def add_target_and_index(
|
def add_target_and_index(
|
||||||
self, name: Signature, sig: str, signode: desc_signature
|
self, name: Signature, sig: str, signode: desc_signature
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -187,14 +206,8 @@ class QAPIDescription(ParserFix):
|
||||||
|
|
||||||
assert self.objtype
|
assert self.objtype
|
||||||
|
|
||||||
# If we're documenting a module, don't include the module as
|
if not (fullname := signode.get("fullname", "")):
|
||||||
# part of the FQN.
|
fullname = self._get_fqn(name)
|
||||||
modname = ""
|
|
||||||
if self.objtype != "module":
|
|
||||||
modname = self.options.get(
|
|
||||||
"module", self.env.ref_context.get("qapi:module")
|
|
||||||
)
|
|
||||||
fullname = (modname + "." if modname else "") + name
|
|
||||||
|
|
||||||
node_id = make_id(
|
node_id = make_id(
|
||||||
self.env, self.state.document, self.objtype, fullname
|
self.env, self.state.document, self.objtype, fullname
|
||||||
|
@ -213,18 +226,21 @@ class QAPIDescription(ParserFix):
|
||||||
(arity, indextext, node_id, "", None)
|
(arity, indextext, node_id, "", None)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def split_fqn(name: str) -> Tuple[str, str]:
|
||||||
|
if "." in name:
|
||||||
|
module, name = name.split(".")
|
||||||
|
else:
|
||||||
|
module = ""
|
||||||
|
|
||||||
|
return (module, name)
|
||||||
|
|
||||||
def _object_hierarchy_parts(
|
def _object_hierarchy_parts(
|
||||||
self, sig_node: desc_signature
|
self, sig_node: desc_signature
|
||||||
) -> Tuple[str, ...]:
|
) -> Tuple[str, ...]:
|
||||||
if "fullname" not in sig_node:
|
if "fullname" not in sig_node:
|
||||||
return ()
|
return ()
|
||||||
modname = sig_node.get("module")
|
return self.split_fqn(sig_node["fullname"])
|
||||||
fullname = sig_node["fullname"]
|
|
||||||
|
|
||||||
if modname:
|
|
||||||
return (modname, *fullname.split("."))
|
|
||||||
|
|
||||||
return tuple(fullname.split("."))
|
|
||||||
|
|
||||||
def _toc_entry_name(self, sig_node: desc_signature) -> str:
|
def _toc_entry_name(self, sig_node: desc_signature) -> str:
|
||||||
# This controls the name in the TOC and on the sidebar.
|
# This controls the name in the TOC and on the sidebar.
|
||||||
|
@ -235,13 +251,19 @@ class QAPIDescription(ParserFix):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
config = self.env.app.config
|
config = self.env.app.config
|
||||||
*parents, name = toc_parts
|
modname, name = toc_parts
|
||||||
|
|
||||||
if config.toc_object_entries_show_parents == "domain":
|
if config.toc_object_entries_show_parents == "domain":
|
||||||
return sig_node.get("fullname", name)
|
ret = name
|
||||||
|
if modname and modname != self.env.ref_context.get(
|
||||||
|
"qapi:module", ""
|
||||||
|
):
|
||||||
|
ret = f"{modname}.{name}"
|
||||||
|
return ret
|
||||||
if config.toc_object_entries_show_parents == "hide":
|
if config.toc_object_entries_show_parents == "hide":
|
||||||
return name
|
return name
|
||||||
if config.toc_object_entries_show_parents == "all":
|
if config.toc_object_entries_show_parents == "all":
|
||||||
return ".".join(parents + [name])
|
return sig_node.get("fullname", name)
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@ -312,11 +334,9 @@ class QAPIObject(QAPIDescription):
|
||||||
As such, the only argument here is "sig", which is just the QAPI
|
As such, the only argument here is "sig", which is just the QAPI
|
||||||
definition name.
|
definition name.
|
||||||
"""
|
"""
|
||||||
modname = self.options.get(
|
modname = self._get_context()
|
||||||
"module", self.env.ref_context.get("qapi:module")
|
|
||||||
)
|
|
||||||
|
|
||||||
signode["fullname"] = sig
|
signode["fullname"] = self._get_fqn(sig)
|
||||||
signode["module"] = modname
|
signode["module"] = modname
|
||||||
sig_prefix = self.get_signature_prefix()
|
sig_prefix = self.get_signature_prefix()
|
||||||
if sig_prefix:
|
if sig_prefix:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue