docs/qapi-domain: add :ifcond: directive option

Add a special :ifcond: option that allows us to annotate the
definition-level conditionals.

The syntax of the argument is currently undefined, but it's possible we
can apply better formatting in the future. Currently, we just display
the ifcond string as preformatted text.

Signed-off-by: Harmonie Snow <harmonie@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Message-ID: <20250311034303.75779-26-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:23 -04:00 committed by Markus Armbruster
parent d25808c2bc
commit 6a41330206
2 changed files with 34 additions and 2 deletions

View file

@ -14,6 +14,7 @@ from typing import (
NamedTuple,
Optional,
Tuple,
Union,
cast,
)
@ -217,6 +218,7 @@ class QAPIObject(QAPIDescription):
"module": directives.unchanged, # Override contextual module name
# These are QAPI originals:
"since": directives.unchanged,
"ifcond": directives.unchanged,
"deprecated": directives.flag,
"unstable": directives.flag,
}
@ -288,9 +290,14 @@ class QAPIObject(QAPIDescription):
infopips = nodes.container()
infopips.attributes["classes"].append("qapi-infopips")
def _add_pip(source: str, content: str, classname: str) -> None:
def _add_pip(
source: str, content: Union[str, List[nodes.Node]], classname: str
) -> None:
node = nodes.container(source)
node.append(nodes.Text(content))
if isinstance(content, str):
node.append(nodes.Text(content))
else:
node.extend(content)
node.attributes["classes"].extend(["qapi-infopip", classname])
infopips.append(node)
@ -308,6 +315,18 @@ class QAPIObject(QAPIDescription):
"qapi-unstable",
)
if self.options.get("ifcond", ""):
ifcond = self.options["ifcond"]
_add_pip(
f":ifcond: {ifcond}",
[
nodes.emphasis("", "Availability"),
nodes.Text(": "),
nodes.literal(ifcond, ifcond),
],
"qapi-ifcond",
)
if infopips.children:
contentnode.insert(0, infopips)