* [PATCH v5 0/4] qapi: add auto-generated return docs
@ 2025-06-26 19:53 John Snow
2025-06-26 19:53 ` [PATCH v5 1/4] docs/qapi-domain: add return-nodesc John Snow
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: John Snow @ 2025-06-26 19:53 UTC (permalink / raw)
To: qemu-devel
Cc: Jason Wang, Eduardo Habkost, Peter Maydell, Jiri Pirko,
Vladimir Sementsov-Ogievskiy, Philippe Mathieu-Daudé,
Michael Tokarev, Marc-André Lureau, qemu-trivial,
Gonglei (Arei), Laurent Vivier, Peter Xu, Marcel Apfelbaum,
Zhao Liu, Fabiano Rosas, Yanan Wang, Gerd Hoffmann, Paolo Bonzini,
Markus Armbruster, Daniel P. Berrangé, Michael Roth,
Zhenwei Pi, Lukas Straub, John Snow, Hanna Reitz, Stefan Hajnoczi,
Ani Sinha, Stefan Berger, Michael S. Tsirkin, Kevin Wolf,
Eric Blake, qemu-block, Mads Ynddal
This series adds the ability for the new QAPIDoc system to generate
"Returns:" documentation based on the return type declared in the Schema
even when no explicit documentation is found in the QAPI source. As a
result and as an immediate cleanup, trivial return statements are
removed and remaining Return documentation is revised to avoid
re-stating the return type, which is always generated automatically.
v5: rebased, implemented Markus' preferred insertion algorithm
v4: rebased on origin/master (2025-06-12)
v3: rebased on top of python-qapi-linting (v4) pull request;
removed commits that are no longer needed.
v2: fix multi-return-sections bug :(
John Snow (4):
docs/qapi-domain: add return-nodesc
docs, qapi: generate undocumented return sections
qapi: remove trivial "Returns:" sections
qapi: rephrase return docs to avoid type name
docs/devel/qapi-domain.rst | 30 ++++++++++++++++++++++++++++++
docs/sphinx/qapi_domain.py | 8 ++++++++
docs/sphinx/qapidoc.py | 14 ++++++++------
qapi/audio.json | 2 --
qapi/block-core.json | 14 +++-----------
qapi/block-export.json | 2 +-
qapi/block.json | 2 +-
qapi/char.json | 8 --------
qapi/control.json | 5 ++---
qapi/cryptodev.json | 2 --
qapi/dump.json | 5 ++---
qapi/introspect.json | 6 +++---
qapi/job.json | 2 +-
qapi/machine.json | 22 ----------------------
qapi/migration.json | 12 ------------
qapi/misc-i386.json | 12 +-----------
qapi/misc.json | 12 ++----------
qapi/net.json | 2 +-
qapi/pci.json | 2 +-
qapi/qdev.json | 3 +--
qapi/qom.json | 8 +++-----
qapi/rocker.json | 4 ----
qapi/run-state.json | 2 --
qapi/stats.json | 2 +-
qapi/tpm.json | 4 ----
qapi/trace.json | 2 +-
qapi/ui.json | 10 +---------
qapi/virtio.json | 8 +++-----
qapi/yank.json | 1 -
scripts/qapi/parser.py | 34 ++++++++++++++++++++++++++++++++++
scripts/qapi/schema.py | 3 +++
31 files changed, 111 insertions(+), 132 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 1/4] docs/qapi-domain: add return-nodesc
2025-06-26 19:53 [PATCH v5 0/4] qapi: add auto-generated return docs John Snow
@ 2025-06-26 19:53 ` John Snow
2025-06-26 19:53 ` [PATCH v5 2/4] docs, qapi: generate undocumented return sections John Snow
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2025-06-26 19:53 UTC (permalink / raw)
To: qemu-devel
Cc: Jason Wang, Eduardo Habkost, Peter Maydell, Jiri Pirko,
Vladimir Sementsov-Ogievskiy, Philippe Mathieu-Daudé,
Michael Tokarev, Marc-André Lureau, qemu-trivial,
Gonglei (Arei), Laurent Vivier, Peter Xu, Marcel Apfelbaum,
Zhao Liu, Fabiano Rosas, Yanan Wang, Gerd Hoffmann, Paolo Bonzini,
Markus Armbruster, Daniel P. Berrangé, Michael Roth,
Zhenwei Pi, Lukas Straub, John Snow, Hanna Reitz, Stefan Hajnoczi,
Ani Sinha, Stefan Berger, Michael S. Tsirkin, Kevin Wolf,
Eric Blake, qemu-block, Mads Ynddal
This form is used to annotate a return type without an accompanying
description, for when there is no "Returns:" information in the source
doc, but we have a return type we want to generate a cross-reference to.
The syntax is:
:return-nodesc: TypeName
It's primarily necessary because Sphinx always expects both a type and a
description for the prior form and will format it accordingly. To have a
reasonable rendering when the body is missing, we need to use a
different info field list entirely.
Signed-off-by: John Snow <jsnow@redhat.com>
---
docs/devel/qapi-domain.rst | 30 ++++++++++++++++++++++++++++++
docs/sphinx/qapi_domain.py | 8 ++++++++
2 files changed, 38 insertions(+)
diff --git a/docs/devel/qapi-domain.rst b/docs/devel/qapi-domain.rst
index 11238723c2d..204abb72ff4 100644
--- a/docs/devel/qapi-domain.rst
+++ b/docs/devel/qapi-domain.rst
@@ -242,6 +242,36 @@ Example::
}
+``:return-nodesc:``
+-------------------
+
+Document the return type of a QAPI command, without an accompanying description.
+
+:availability: This field list is only available in the body of the
+ Command directive.
+:syntax: ``:return-nodesc: type``
+:type: `sphinx.util.docfields.Field
+ <https://pydoc.dev/sphinx/latest/sphinx.util.docfields.Field.html?private=1>`_
+
+
+Example::
+
+ .. qapi:command:: query-replay
+ :since: 5.2
+
+ Retrieve the record/replay information. It includes current
+ instruction count which may be used for ``replay-break`` and
+ ``replay-seek`` commands.
+
+ :return-nodesc: ReplayInfo
+
+ .. qmp-example::
+
+ -> { "execute": "query-replay" }
+ <- { "return": {
+ "mode": "play", "filename": "log.rr", "icount": 220414 }
+ }
+
``:value:``
-----------
diff --git a/docs/sphinx/qapi_domain.py b/docs/sphinx/qapi_domain.py
index ebc46a72c61..f561dc465f8 100644
--- a/docs/sphinx/qapi_domain.py
+++ b/docs/sphinx/qapi_domain.py
@@ -532,6 +532,14 @@ class QAPICommand(QAPIObject):
names=("return",),
can_collapse=True,
),
+ # :return-nodesc: TypeName
+ CompatField(
+ "returnvalue",
+ label=_("Return"),
+ names=("return-nodesc",),
+ bodyrolename="type",
+ has_arg=False,
+ ),
]
)
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v5 2/4] docs, qapi: generate undocumented return sections
2025-06-26 19:53 [PATCH v5 0/4] qapi: add auto-generated return docs John Snow
2025-06-26 19:53 ` [PATCH v5 1/4] docs/qapi-domain: add return-nodesc John Snow
@ 2025-06-26 19:53 ` John Snow
2025-06-27 12:30 ` Markus Armbruster
2025-06-26 19:53 ` [PATCH v5 3/4] qapi: remove trivial "Returns:" sections John Snow
2025-06-26 19:53 ` [PATCH v5 4/4] qapi: rephrase return docs to avoid type name John Snow
3 siblings, 1 reply; 6+ messages in thread
From: John Snow @ 2025-06-26 19:53 UTC (permalink / raw)
To: qemu-devel
Cc: Jason Wang, Eduardo Habkost, Peter Maydell, Jiri Pirko,
Vladimir Sementsov-Ogievskiy, Philippe Mathieu-Daudé,
Michael Tokarev, Marc-André Lureau, qemu-trivial,
Gonglei (Arei), Laurent Vivier, Peter Xu, Marcel Apfelbaum,
Zhao Liu, Fabiano Rosas, Yanan Wang, Gerd Hoffmann, Paolo Bonzini,
Markus Armbruster, Daniel P. Berrangé, Michael Roth,
Zhenwei Pi, Lukas Straub, John Snow, Hanna Reitz, Stefan Hajnoczi,
Ani Sinha, Stefan Berger, Michael S. Tsirkin, Kevin Wolf,
Eric Blake, qemu-block, Mads Ynddal
This patch changes the qapidoc parser to generate stub Return value
documentation for any command that has a return value but does not have
a "Returns:" doc section.
The stubs include just the type name, which will be rendered with a
cross-reference link in the HTML output.
Signed-off-by: John Snow <jsnow@redhat.com>
---
docs/sphinx/qapidoc.py | 14 ++++++++------
scripts/qapi/parser.py | 34 ++++++++++++++++++++++++++++++++++
scripts/qapi/schema.py | 3 +++
3 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py
index 8011ac9efaf..77e28a65cfc 100644
--- a/docs/sphinx/qapidoc.py
+++ b/docs/sphinx/qapidoc.py
@@ -255,16 +255,18 @@ def visit_feature(self, section: QAPIDoc.ArgSection) -> None:
def visit_returns(self, section: QAPIDoc.Section) -> None:
assert isinstance(self.entity, QAPISchemaCommand)
rtype = self.entity.ret_type
- # q_empty can produce None, but we won't be documenting anything
- # without an explicit return statement in the doc block, and we
- # should not have any such explicit statements when there is no
- # return value.
+ # return statements will not be present (and won't be
+ # autogenerated) for any command that doesn't return
+ # *something*, so rtype will always be defined here.
assert rtype
typ = self.format_type(rtype)
assert typ
- assert section.text
- self.add_field("return", typ, section.text, section.info)
+
+ if section.text:
+ self.add_field("return", typ, section.text, section.info)
+ else:
+ self.add_lines(f":return-nodesc: {typ}", section.info)
def visit_errors(self, section: QAPIDoc.Section) -> None:
# FIXME: the formatting for errors may be inconsistent and may
diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py
index 949d9e8bff7..fc5174e3357 100644
--- a/scripts/qapi/parser.py
+++ b/scripts/qapi/parser.py
@@ -815,6 +815,40 @@ def connect_feature(self, feature: 'QAPISchemaFeature') -> None:
% feature.name)
self.features[feature.name].connect(feature)
+ def ensure_returns(self, info: QAPISourceInfo) -> None:
+
+ def _insert_after_kind(
+ kind: QAPIDoc.Kind,
+ new_sect: QAPIDoc.Section
+ ) -> bool:
+ for sect in filter(lambda sect: sect.kind == kind, reversed(
+ self.all_sections)):
+ idx = self.all_sections.index(sect) + 1
+ self.all_sections.insert(idx, new_sect)
+ return True
+ return False
+
+ if any(s.kind == QAPIDoc.Kind.RETURNS for s in self.all_sections):
+ return
+
+ # Stub "Returns" section for undocumented returns value
+ stub = QAPIDoc.Section(info, QAPIDoc.Kind.RETURNS)
+
+ if any(_insert_after_kind(kind, stub) for kind in (
+ # 1. If arguments, right after those.
+ QAPIDoc.Kind.MEMBER,
+ # 2. Elif errors, right after those.
+ QAPIDoc.Kind.ERRORS,
+ # 3. Elif features, right after those.
+ QAPIDoc.Kind.FEATURE,
+ )):
+ return
+
+ # Otherwise, it should go right after the intro. The intro
+ # is always the first section and is always present (even
+ # when empty), so we can insert directly at index=1 blindly.
+ self.all_sections.insert(1, stub)
+
def check_expr(self, expr: QAPIExpression) -> None:
if 'command' in expr:
if self.returns and 'returns' not in expr:
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index cbe3b5aa91e..3abddea3525 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -1062,6 +1062,9 @@ def connect_doc(self, doc: Optional[QAPIDoc] = None) -> None:
if self.arg_type and self.arg_type.is_implicit():
self.arg_type.connect_doc(doc)
+ if self.ret_type and self.info:
+ doc.ensure_returns(self.info)
+
def visit(self, visitor: QAPISchemaVisitor) -> None:
super().visit(visitor)
visitor.visit_command(
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v5 3/4] qapi: remove trivial "Returns:" sections
2025-06-26 19:53 [PATCH v5 0/4] qapi: add auto-generated return docs John Snow
2025-06-26 19:53 ` [PATCH v5 1/4] docs/qapi-domain: add return-nodesc John Snow
2025-06-26 19:53 ` [PATCH v5 2/4] docs, qapi: generate undocumented return sections John Snow
@ 2025-06-26 19:53 ` John Snow
2025-06-26 19:53 ` [PATCH v5 4/4] qapi: rephrase return docs to avoid type name John Snow
3 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2025-06-26 19:53 UTC (permalink / raw)
To: qemu-devel
Cc: Jason Wang, Eduardo Habkost, Peter Maydell, Jiri Pirko,
Vladimir Sementsov-Ogievskiy, Philippe Mathieu-Daudé,
Michael Tokarev, Marc-André Lureau, qemu-trivial,
Gonglei (Arei), Laurent Vivier, Peter Xu, Marcel Apfelbaum,
Zhao Liu, Fabiano Rosas, Yanan Wang, Gerd Hoffmann, Paolo Bonzini,
Markus Armbruster, Daniel P. Berrangé, Michael Roth,
Zhenwei Pi, Lukas Straub, John Snow, Hanna Reitz, Stefan Hajnoczi,
Ani Sinha, Stefan Berger, Michael S. Tsirkin, Kevin Wolf,
Eric Blake, qemu-block, Mads Ynddal
The new qapidoc.py can generate "Returns" statements with type
information just fine, so we can remove it from the source where it
doesn't add anything particularly novel or helpful and just repeats the
type info.
This patch is fairly "gentle" and doesn't aggressively touch other
"Returns" lines that could be rephrased to omit repeating type
information; it only removes lines that appear appropriate to wholly
remove.
Signed-off-by: John Snow <jsnow@redhat.com>
---
qapi/audio.json | 2 --
qapi/block-core.json | 8 --------
qapi/char.json | 8 --------
qapi/cryptodev.json | 2 --
qapi/machine.json | 22 ----------------------
qapi/migration.json | 12 ------------
qapi/misc-i386.json | 10 ----------
qapi/misc.json | 7 -------
qapi/rocker.json | 4 ----
qapi/run-state.json | 2 --
qapi/tpm.json | 4 ----
qapi/ui.json | 8 --------
qapi/virtio.json | 2 --
qapi/yank.json | 1 -
14 files changed, 92 deletions(-)
diff --git a/qapi/audio.json b/qapi/audio.json
index 16de231f6d8..e8c469f3452 100644
--- a/qapi/audio.json
+++ b/qapi/audio.json
@@ -535,8 +535,6 @@
#
# Return information about audiodev configuration
#
-# Returns: array of @Audiodev
-#
# Since: 8.0
##
{ 'command': 'query-audiodevs',
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 1df6644f0de..d64f482d9bd 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1950,8 +1950,6 @@
# @flat: Omit the nested data about backing image ("backing-image"
# key) if true. Default is false (Since 5.0)
#
-# Returns: the list of BlockDeviceInfo
-#
# Since: 2.0
#
# .. qmp-example::
@@ -2464,9 +2462,6 @@
#
# @unstable: This command is meant for debugging.
#
-# Returns:
-# BlockDirtyBitmapSha256
-#
# Errors:
# - If @node is not a valid block device, DeviceNotFound
# - If @name is not found or if hashing has failed, GenericError
@@ -6202,9 +6197,6 @@
#
# @name: optional the snapshot's name to be deleted
#
-# Returns:
-# SnapshotInfo
-#
# Errors:
# - If @device is not a valid block device, GenericError
# - If snapshot not found, GenericError
diff --git a/qapi/char.json b/qapi/char.json
index df6e325e2e1..c189f629c1c 100644
--- a/qapi/char.json
+++ b/qapi/char.json
@@ -36,8 +36,6 @@
#
# Return information about current character devices.
#
-# Returns: a list of @ChardevInfo
-#
# Since: 0.14
#
# .. qmp-example::
@@ -82,8 +80,6 @@
#
# Return information about character device backends.
#
-# Returns: a list of @ChardevBackendInfo
-#
# Since: 2.0
#
# .. qmp-example::
@@ -772,8 +768,6 @@
#
# @backend: backend type and parameters
#
-# Returns: ChardevReturn.
-#
# Since: 1.4
#
# .. qmp-example::
@@ -812,8 +806,6 @@
#
# @backend: new backend type and parameters
#
-# Returns: ChardevReturn.
-#
# Since: 2.10
#
# .. qmp-example::
diff --git a/qapi/cryptodev.json b/qapi/cryptodev.json
index b13db264034..b028abf927b 100644
--- a/qapi/cryptodev.json
+++ b/qapi/cryptodev.json
@@ -96,8 +96,6 @@
#
# Return information about current crypto devices.
#
-# Returns: a list of @QCryptodevInfo
-#
# Since: 8.0
##
{ 'command': 'query-cryptodev', 'returns': ['QCryptodevInfo']}
diff --git a/qapi/machine.json b/qapi/machine.json
index 0650b8de71a..6aa8abe6cce 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -101,8 +101,6 @@
#
# Return information about all virtual CPUs.
#
-# Returns: list of @CpuInfoFast
-#
# Since: 2.12
#
# .. qmp-example::
@@ -218,8 +216,6 @@
#
# @unstable: Argument @compat-props is experimental.
#
-# Returns: a list of MachineInfo
-#
# Since: 1.2
#
# .. qmp-example::
@@ -268,8 +264,6 @@
#
# Return information on the current virtual machine.
#
-# Returns: CurrentMachineParams
-#
# Since: 4.0
##
{ 'command': 'query-current-machine', 'returns': 'CurrentMachineParams' }
@@ -291,8 +285,6 @@
#
# Return information about the target for this QEMU
#
-# Returns: QemuTargetInfo
-#
# Since: 1.2
##
{ 'command': 'query-target', 'returns': 'QemuTargetInfo' }
@@ -316,8 +308,6 @@
#
# Query the guest UUID information.
#
-# Returns: The @UuidInfo for the guest
-#
# Since: 0.14
#
# .. qmp-example::
@@ -469,8 +459,6 @@
#
# Return information about KVM acceleration
#
-# Returns: @KvmInfo
-#
# Since: 0.14
#
# .. qmp-example::
@@ -932,8 +920,6 @@
#
# Return information for all memory backends.
#
-# Returns: a list of @Memdev.
-#
# Since: 2.1
#
# .. qmp-example::
@@ -1049,8 +1035,6 @@
#
# TODO: Better documentation; currently there is none.
#
-# Returns: a list of HotpluggableCPU objects.
-#
# Since: 2.7
#
# .. qmp-example::
@@ -1172,9 +1156,6 @@
#
# Return information about the balloon device.
#
-# Returns:
-# @BalloonInfo
-#
# Errors:
# - If the balloon driver is enabled but not functional because
# the KVM kernel module cannot support it, KVMMissingCap
@@ -1238,9 +1219,6 @@
# Return the hv-balloon driver data contained in the last received
# "STATUS" message from the guest.
#
-# Returns:
-# @HvBalloonInfo
-#
# Errors:
# - If no hv-balloon device is present, guest memory status
# reporting is not enabled or no guest memory status report
diff --git a/qapi/migration.json b/qapi/migration.json
index 4963f6ca127..d7c5047462e 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -286,8 +286,6 @@
# is active there will be another json-object with RAM migration
# status.
#
-# Returns: @MigrationInfo
-#
# Since: 0.14
#
# .. qmp-example::
@@ -537,8 +535,6 @@
#
# Return information about the current migration capabilities status
#
-# Returns: @MigrationCapabilityStatus
-#
# Since: 1.2
#
# .. qmp-example::
@@ -1322,8 +1318,6 @@
#
# Return information about the current migration parameters
#
-# Returns: @MigrationParameters
-#
# Since: 2.4
#
# .. qmp-example::
@@ -1904,8 +1898,6 @@
#
# Query replication status while the vm is running.
#
-# Returns: A @ReplicationStatus object showing the status.
-#
# .. qmp-example::
#
# -> { "execute": "query-xen-replication-status" }
@@ -1958,8 +1950,6 @@
#
# Query COLO status while the vm is running.
#
-# Returns: A @COLOStatus object showing the status.
-#
# .. qmp-example::
#
# -> { "execute": "query-colo-status" }
@@ -2333,8 +2323,6 @@
#
# @deprecated: This command is deprecated with no replacement yet.
#
-# Returns: @MigrationThreadInfo
-#
# Since: 7.2
##
{ 'command': 'query-migrationthreads',
diff --git a/qapi/misc-i386.json b/qapi/misc-i386.json
index 5fefa0a4840..5b3bf597a2f 100644
--- a/qapi/misc-i386.json
+++ b/qapi/misc-i386.json
@@ -132,8 +132,6 @@
# @enabled field is set to 'false' and the state of all other fields
# is unspecified.
#
-# Returns: @SevInfo
-#
# Since: 2.12
#
# .. qmp-example::
@@ -214,8 +212,6 @@
#
# This is only supported on AMD X86 platforms with KVM enabled.
#
-# Returns: SevCapability objects.
-#
# Errors:
# - If SEV is not available on the platform, GenericError
#
@@ -281,8 +277,6 @@
# @mnonce: a random 16 bytes value encoded in base64 (it will be
# included in report)
#
-# Returns: SevAttestationReport objects.
-#
# Errors:
# - This will return an error if the attestation report is
# unavailable, either due to an invalid guest configuration
@@ -345,8 +339,6 @@
#
# Return information about configured SGX capabilities of guest
#
-# Returns: @SgxInfo
-#
# Since: 6.2
#
# .. qmp-example::
@@ -364,8 +356,6 @@
#
# Return information about SGX capabilities of host
#
-# Returns: @SgxInfo
-#
# Since: 6.2
#
# .. qmp-example::
diff --git a/qapi/misc.json b/qapi/misc.json
index 4b9e601cfa5..8c98fb569a9 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -56,8 +56,6 @@
#
# Return the name information of a guest.
#
-# Returns: @NameInfo of the guest
-#
# Since: 0.14
#
# .. qmp-example::
@@ -332,9 +330,6 @@
#
# @opaque: A free-form string that can be used to describe the fd.
#
-# Returns:
-# @AddfdInfo
-#
# Errors:
# - If file descriptor was not received, GenericError
# - If @fdset-id is a negative value, GenericError
@@ -415,8 +410,6 @@
#
# Return information describing all fd sets.
#
-# Returns: A list of @FdsetInfo
-#
# Since: 1.2
#
# .. note:: The list of fd sets is shared by all monitor connections.
diff --git a/qapi/rocker.json b/qapi/rocker.json
index 0c7ef1f77c8..2d2ae3bbafc 100644
--- a/qapi/rocker.json
+++ b/qapi/rocker.json
@@ -28,8 +28,6 @@
#
# @name: switch name
#
-# Returns: @Rocker information
-#
# Since: 2.4
#
# .. qmp-example::
@@ -98,8 +96,6 @@
#
# @name: port name
#
-# Returns: a list of @RockerPort information
-#
# Since: 2.4
#
# .. qmp-example::
diff --git a/qapi/run-state.json b/qapi/run-state.json
index fd09beb35cb..759f8730059 100644
--- a/qapi/run-state.json
+++ b/qapi/run-state.json
@@ -119,8 +119,6 @@
#
# Query the run status of the VM
#
-# Returns: @StatusInfo reflecting the VM
-#
# Since: 0.14
#
# .. qmp-example::
diff --git a/qapi/tpm.json b/qapi/tpm.json
index a16a72edb98..f749e6869df 100644
--- a/qapi/tpm.json
+++ b/qapi/tpm.json
@@ -27,8 +27,6 @@
#
# Return a list of supported TPM models
#
-# Returns: a list of TpmModel
-#
# Since: 1.5
#
# .. qmp-example::
@@ -58,8 +56,6 @@
#
# Return a list of supported TPM types
#
-# Returns: a list of TpmType
-#
# Since: 1.5
#
# .. qmp-example::
diff --git a/qapi/ui.json b/qapi/ui.json
index 514fa159b10..ff52ca5a1ce 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -325,8 +325,6 @@
#
# Return information about the current SPICE server
#
-# Returns: @SpiceInfo
-#
# Since: 0.14
#
# .. qmp-example::
@@ -656,8 +654,6 @@
#
# Return information about the current VNC server
#
-# Returns: @VncInfo
-#
# Since: 0.14
#
# .. qmp-example::
@@ -687,8 +683,6 @@
#
# Return a list of vnc servers. The list can be empty.
#
-# Returns: a list of @VncInfo2
-#
# Since: 2.3
##
{ 'command': 'query-vnc-servers', 'returns': ['VncInfo2'],
@@ -1564,8 +1558,6 @@
#
# Return information about display configuration
#
-# Returns: @DisplayOptions
-#
# Since: 3.1
##
{ 'command': 'query-display-options',
diff --git a/qapi/virtio.json b/qapi/virtio.json
index 73df718a261..28feadcd4bc 100644
--- a/qapi/virtio.json
+++ b/qapi/virtio.json
@@ -847,8 +847,6 @@
#
# @unstable: This command is meant for debugging.
#
-# Returns: VirtioQueueElement information
-#
# Since: 7.2
#
# .. qmp-example::
diff --git a/qapi/yank.json b/qapi/yank.json
index 30f46c97c98..9bd8ecce27f 100644
--- a/qapi/yank.json
+++ b/qapi/yank.json
@@ -102,7 +102,6 @@
#
# Query yank instances. See @YankInstance for more information.
#
-# Returns: list of @YankInstance
#
# .. qmp-example::
#
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v5 4/4] qapi: rephrase return docs to avoid type name
2025-06-26 19:53 [PATCH v5 0/4] qapi: add auto-generated return docs John Snow
` (2 preceding siblings ...)
2025-06-26 19:53 ` [PATCH v5 3/4] qapi: remove trivial "Returns:" sections John Snow
@ 2025-06-26 19:53 ` John Snow
3 siblings, 0 replies; 6+ messages in thread
From: John Snow @ 2025-06-26 19:53 UTC (permalink / raw)
To: qemu-devel
Cc: Jason Wang, Eduardo Habkost, Peter Maydell, Jiri Pirko,
Vladimir Sementsov-Ogievskiy, Philippe Mathieu-Daudé,
Michael Tokarev, Marc-André Lureau, qemu-trivial,
Gonglei (Arei), Laurent Vivier, Peter Xu, Marcel Apfelbaum,
Zhao Liu, Fabiano Rosas, Yanan Wang, Gerd Hoffmann, Paolo Bonzini,
Markus Armbruster, Daniel P. Berrangé, Michael Roth,
Zhenwei Pi, Lukas Straub, John Snow, Hanna Reitz, Stefan Hajnoczi,
Ani Sinha, Stefan Berger, Michael S. Tsirkin, Kevin Wolf,
Eric Blake, qemu-block, Mads Ynddal
Well, I tried. Maybe not very hard. Sorry!
Signed-off-by: John Snow <jsnow@redhat.com>
---
qapi/block-core.json | 6 +++---
qapi/block-export.json | 2 +-
qapi/block.json | 2 +-
qapi/control.json | 5 ++---
qapi/dump.json | 5 ++---
qapi/introspect.json | 6 +++---
qapi/job.json | 2 +-
qapi/misc-i386.json | 2 +-
qapi/misc.json | 5 ++---
qapi/net.json | 2 +-
qapi/pci.json | 2 +-
qapi/qdev.json | 3 +--
qapi/qom.json | 8 +++-----
qapi/stats.json | 2 +-
qapi/trace.json | 2 +-
qapi/ui.json | 2 +-
qapi/virtio.json | 6 +++---
17 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index d64f482d9bd..f18db3149a3 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -763,7 +763,7 @@
#
# Get a list of BlockInfo for all virtual block devices.
#
-# Returns: a list of @BlockInfo describing each virtual block device.
+# Returns: a list describing each virtual block device.
# Filter nodes that were created implicitly are skipped over.
#
# Since: 0.14
@@ -1168,7 +1168,7 @@
# nodes that were created implicitly are skipped over in this
# mode. (Since 2.3)
#
-# Returns: A list of @BlockStats for each virtual block devices.
+# Returns: A list of statistics for each virtual block device.
#
# Since: 0.14
#
@@ -1440,7 +1440,7 @@
#
# Return information about long-running block device operations.
#
-# Returns: a list of @BlockJobInfo for each active block job
+# Returns: a list of job info for each active block job
#
# Since: 1.1
##
diff --git a/qapi/block-export.json b/qapi/block-export.json
index ed4deb54db2..3edbc5436a3 100644
--- a/qapi/block-export.json
+++ b/qapi/block-export.json
@@ -472,7 +472,7 @@
##
# @query-block-exports:
#
-# Returns: A list of BlockExportInfo describing all block exports
+# Returns: A list describing all block exports
#
# Since: 5.2
##
diff --git a/qapi/block.json b/qapi/block.json
index 1490a1a17f8..d288344c648 100644
--- a/qapi/block.json
+++ b/qapi/block.json
@@ -86,7 +86,7 @@
# Return a list of information about each persistent reservation
# manager.
#
-# Returns: a list of @PRManagerInfo for each persistent reservation
+# Returns: a list of manager info for each persistent reservation
# manager
#
# Since: 3.0
diff --git a/qapi/control.json b/qapi/control.json
index 34b733f63b6..3aeb8f4f6fb 100644
--- a/qapi/control.json
+++ b/qapi/control.json
@@ -93,8 +93,7 @@
#
# Return the current version of QEMU.
#
-# Returns: A @VersionInfo object describing the current version of
-# QEMU.
+# Returns: An object describing the current version of QEMU.
#
# Since: 0.14
#
@@ -131,7 +130,7 @@
#
# Return a list of supported QMP commands by this server
#
-# Returns: A list of @CommandInfo for all supported commands
+# Returns: A list of all supported commands
#
# Since: 0.14
#
diff --git a/qapi/dump.json b/qapi/dump.json
index d0ba1f0596f..3a9b67efb1b 100644
--- a/qapi/dump.json
+++ b/qapi/dump.json
@@ -146,7 +146,7 @@
#
# Query latest dump status.
#
-# Returns: A @DumpStatus object showing the dump status.
+# Returns: An object showing the dump status.
#
# Since: 2.6
#
@@ -197,8 +197,7 @@
#
# Return the available formats for dump-guest-memory
#
-# Returns: A @DumpGuestMemoryCapability object listing available
-# formats for dump-guest-memory
+# Returns: An object listing available formats for dump-guest-memory
#
# Since: 2.0
#
diff --git a/qapi/introspect.json b/qapi/introspect.json
index e9e02972821..a5340268d13 100644
--- a/qapi/introspect.json
+++ b/qapi/introspect.json
@@ -34,10 +34,10 @@
# string into a specific enum or from one specific type into an
# alternate that includes the original type alongside something else.
#
-# Returns: array of @SchemaInfo, where each element describes an
-# entity in the ABI: command, event, type, ...
+# Returns: an array where each element describes an entity in the ABI:
+# command, event, type, ...
#
-# The order of the various SchemaInfo is unspecified; however, all
+# The order of the various elements is unspecified; however, all
# names are guaranteed to be unique (no name will be duplicated
# with different meta-types).
#
diff --git a/qapi/job.json b/qapi/job.json
index 126fa5ce602..c1ddae9c0fe 100644
--- a/qapi/job.json
+++ b/qapi/job.json
@@ -295,7 +295,7 @@
#
# Return information about jobs.
#
-# Returns: a list with a @JobInfo for each active job
+# Returns: a list with info for each active job
#
# Since: 3.0
##
diff --git a/qapi/misc-i386.json b/qapi/misc-i386.json
index 5b3bf597a2f..c0c57f9ab25 100644
--- a/qapi/misc-i386.json
+++ b/qapi/misc-i386.json
@@ -163,7 +163,7 @@
# 'sev-guest' confidential virtualization object. The launch
# measurement for SEV-SNP guests is only available within the guest.
#
-# Returns: The @SevLaunchMeasureInfo for the guest
+# Returns: The guest's SEV guest launch measurement info
#
# Errors:
# - If the launch measurement is unavailable, either due to an
diff --git a/qapi/misc.json b/qapi/misc.json
index 8c98fb569a9..70dbcb0aecf 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -105,7 +105,7 @@
# declared using the ``-object iothread`` command-line option. It
# is always the main thread of the process.
#
-# Returns: a list of @IOThreadInfo for each iothread
+# Returns: a list of info for each iothread
#
# Since: 2.0
#
@@ -509,8 +509,7 @@
#
# @option: option name
#
-# Returns: list of @CommandLineOptionInfo for all options (or for the
-# given @option).
+# Returns: list of objects for all options (or for the given @option).
#
# Errors:
# - if the given @option doesn't exist
diff --git a/qapi/net.json b/qapi/net.json
index 97ea1839813..371ade0dc6a 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -845,7 +845,7 @@
#
# @name: net client name
#
-# Returns: list of @RxFilterInfo for all NICs (or for the given NIC).
+# Returns: list of info for all NICs (or for the given NIC).
#
# Errors:
# - if the given @name doesn't exist
diff --git a/qapi/pci.json b/qapi/pci.json
index dc85a41d28b..29549d94551 100644
--- a/qapi/pci.json
+++ b/qapi/pci.json
@@ -175,7 +175,7 @@
#
# Return information about the PCI bus topology of the guest.
#
-# Returns: a list of @PciInfo for each PCI bus. Each bus is
+# Returns: a list of info for each PCI bus. Each bus is
# represented by a json-object, which has a key with a json-array
# of all PCI devices attached to it. Each device is represented
# by a json-object.
diff --git a/qapi/qdev.json b/qapi/qdev.json
index 32c7d100463..5d18fb8e0e0 100644
--- a/qapi/qdev.json
+++ b/qapi/qdev.json
@@ -17,8 +17,7 @@
#
# @typename: the type name of a device
#
-# Returns: a list of ObjectPropertyInfo describing a devices
-# properties
+# Returns: a list describing a devices properties
#
# .. note:: Objects can create properties at runtime, for example to
# describe links between different devices and/or objects. These
diff --git a/qapi/qom.json b/qapi/qom.json
index b133b064471..c6fdce7f7bc 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -54,8 +54,7 @@
# @path: the path within the object model. See @qom-get for a
# description of this parameter.
#
-# Returns: a list of @ObjectPropertyInfo that describe the properties
-# of the object.
+# Returns: a list that describe the properties of the object.
#
# Since: 1.2
#
@@ -178,8 +177,7 @@
#
# @abstract: if true, include abstract types in the results
#
-# Returns: a list of @ObjectTypeInfo or an empty list if no results
-# are found
+# Returns: a list of types, or an empty list if no results are found
#
# Since: 1.1
##
@@ -199,7 +197,7 @@
# describe links between different devices and/or objects. These
# properties are not included in the output of this command.
#
-# Returns: a list of ObjectPropertyInfo describing object properties
+# Returns: a list describing object properties
#
# Since: 2.12
##
diff --git a/qapi/stats.json b/qapi/stats.json
index 8902ef94e08..7e7f1dabbc3 100644
--- a/qapi/stats.json
+++ b/qapi/stats.json
@@ -186,7 +186,7 @@
# The arguments are a StatsFilter and specify the provider and objects
# to return statistics about.
#
-# Returns: a list of StatsResult, one for each provider and object
+# Returns: a list of statistics, one for each provider and object
# (e.g., for each vCPU).
#
# Since: 7.1
diff --git a/qapi/trace.json b/qapi/trace.json
index eb5f63f5135..11f0b5c3427 100644
--- a/qapi/trace.json
+++ b/qapi/trace.json
@@ -47,7 +47,7 @@
#
# @name: Event name pattern (case-sensitive glob).
#
-# Returns: a list of @TraceEventInfo for the matching events
+# Returns: a list of info for the matching events
#
# Since: 2.2
#
diff --git a/qapi/ui.json b/qapi/ui.json
index ff52ca5a1ce..7136c985c38 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -816,7 +816,7 @@
#
# Return information about each active mouse device
#
-# Returns: a list of @MouseInfo for each device
+# Returns: a list of info for each device
#
# Since: 0.14
#
diff --git a/qapi/virtio.json b/qapi/virtio.json
index 28feadcd4bc..d1556dbf24a 100644
--- a/qapi/virtio.json
+++ b/qapi/virtio.json
@@ -199,7 +199,7 @@
#
# @unstable: This command is meant for debugging.
#
-# Returns: VirtioStatus of the virtio device
+# Returns: Status of the virtio device
#
# Since: 7.2
#
@@ -563,7 +563,7 @@
#
# @unstable: This command is meant for debugging.
#
-# Returns: VirtQueueStatus of the VirtQueue
+# Returns: Status of the queue
#
# .. note:: last_avail_idx will not be displayed in the case where the
# selected VirtIODevice has a running vhost device and the
@@ -698,7 +698,7 @@
#
# @unstable: This command is meant for debugging.
#
-# Returns: VirtVhostQueueStatus of the vhost_virtqueue
+# Returns: Status of the vhost_virtqueue
#
# Since: 7.2
#
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 2/4] docs, qapi: generate undocumented return sections
2025-06-26 19:53 ` [PATCH v5 2/4] docs, qapi: generate undocumented return sections John Snow
@ 2025-06-27 12:30 ` Markus Armbruster
0 siblings, 0 replies; 6+ messages in thread
From: Markus Armbruster @ 2025-06-27 12:30 UTC (permalink / raw)
To: John Snow
Cc: qemu-devel, Jason Wang, Eduardo Habkost, Peter Maydell,
Jiri Pirko, Vladimir Sementsov-Ogievskiy,
Philippe Mathieu-Daudé, Michael Tokarev,
Marc-André Lureau, qemu-trivial, Gonglei (Arei),
Laurent Vivier, Peter Xu, Marcel Apfelbaum, Zhao Liu,
Fabiano Rosas, Yanan Wang, Gerd Hoffmann, Paolo Bonzini,
Daniel P. Berrangé, Michael Roth, Zhenwei Pi, Lukas Straub,
Hanna Reitz, Stefan Hajnoczi, Ani Sinha, Stefan Berger,
Michael S. Tsirkin, Kevin Wolf, Eric Blake, qemu-block,
Mads Ynddal
John Snow <jsnow@redhat.com> writes:
> This patch changes the qapidoc parser to generate stub Return value
> documentation for any command that has a return value but does not have
> a "Returns:" doc section.
>
> The stubs include just the type name, which will be rendered with a
> cross-reference link in the HTML output.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
Might want to briefly explain placement of the auto-generated return
value documentation.
The cover letter claims you implemented the placement I suggested:
1. If we have arguments, return goes right after them.
2. Else if we have errors, return goes right before them.
3. Else if we have features, return goes right before them.
4. Else return goes right after the intro (might require a few more TODO
hacks to terminate the intro).
This patch adds auto-generated return value documentation where we have
none.
The next patch replaces handwritten by auto-generated return value
documentation where these are at least as good. Moves the return value
docs in some cases.
Let's check placement. Skip to the end for a summary of findings.
First the additions (this patch):
* x-debug-query-block-graph
Title, intro, features, return
1. doesn't apply, 2. doesn't apply, 3. applies: return should go right
before features. It's afterwards. Unexpected.
* query-tpm
Title, intro, return, example
4. applies. Good.
* query-dirty-rate
Title, intro, arguments, return, examples
1. applies. Good.
* query-vcpu-dirty-limit
Title, intro, return, example
4. applies. Good.
* query-vm-generation-id
Title, intro, return
4. applies. Good.
* query-memory-size-summary
Title, intro, example, return
4. applies. Why is return after example here, and before example
elsewhere?
Turns out elsewhere we have Since: between intro and .. qmp-example::
terminating the intro. Slighly unusual, Since: more often the last in
the comment block).
Except for query-memory-size-summary, which does have Since: at the
very and, and uses the TODO hack instead to terminate the intro.
So, the placement algorithm works as intended here. We just need to
terminate the intro here as well.
* query-memory-devices
Title, intro, return, example
4. applies. Good.
* query-acpi-ospm-status
Title, intro, return, example
4. applies. Good.
* query-stats-schemas
Title, intro, arguments, return, note
1. applies. Good.
Check placement of moved returns (next patch):
* x-debug-block-dirty-bitmap-sha256
Title, intro, arguments, features, errors, return
1. applies: return should go right after arguments. Its at the end.
Unexpected.
* query-xen-replication-status
Title, intro, example, return
Return after example instead of before. This is just like
query-memory-size-summary: placement algorithm works as intended,
intro needs a terminator.
* query-colo-status
Title, intro, example, return
Likewise.
* query-machines
Title, intro, arguments, return, features, example
1. applies. Okay.
* query-balloon
Title, intro, errors, return, example
2. applies: return should go right before errors. It's afterwards.
Unexpected.
* query-hv-balloon-status-report
Title, intro, errors, return, example
Likewise.
* query-yank
Title, intro, example, return
Another one just like query-memory-size-summary: placement algorithm
works as intended, intro needs a terminator.
* query-sev-capabilities
Title, intro, errors, return, example
Like query-ballon.
* x-query-virtio-queue-element
Title, intro, arguments, return, features, example
1. applies. Good.
Summary of findings:
1. If we have arguments, return goes right after them.
Works as intended, except for x-debug-block-dirty-bitmap-sha256.
Odd.
2. Else if we have errors, return goes right before them.
You seem to place it afterwards instead.
3. Else if we have features, return goes right before them.
You seem to place it afterwards instead.
4. Else return goes right after the intro (might require a few more TODO
hacks to terminate the intro).
Yes, we need several of them.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-06-27 12:31 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26 19:53 [PATCH v5 0/4] qapi: add auto-generated return docs John Snow
2025-06-26 19:53 ` [PATCH v5 1/4] docs/qapi-domain: add return-nodesc John Snow
2025-06-26 19:53 ` [PATCH v5 2/4] docs, qapi: generate undocumented return sections John Snow
2025-06-27 12:30 ` Markus Armbruster
2025-06-26 19:53 ` [PATCH v5 3/4] qapi: remove trivial "Returns:" sections John Snow
2025-06-26 19:53 ` [PATCH v5 4/4] qapi: rephrase return docs to avoid type name John Snow
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).