mirror of https://github.com/xemu-project/xemu.git
qapi: New documentation section tag "Errors"
We use section "Returns" for documenting both success and error response of commands. I intend to generate better command success response documentation. Easier when "Returns" documents just he success response. Create new section tag "Errors". The next two commits will move error response documentation from "Returns" sections to "Errors" sections. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20240227113921.236097-4-armbru@redhat.com>
This commit is contained in:
parent
51e97c14fb
commit
3a025d3d1f
|
@ -996,7 +996,8 @@ line "Features:", like this::
|
||||||
|
|
||||||
A tagged section begins with a paragraph that starts with one of the
|
A tagged section begins with a paragraph that starts with one of the
|
||||||
following words: "Note:"/"Notes:", "Since:", "Example:"/"Examples:",
|
following words: "Note:"/"Notes:", "Since:", "Example:"/"Examples:",
|
||||||
"Returns:", "TODO:". It ends with the start of a new section.
|
"Returns:", "Errors:", "TODO:". It ends with the start of a new
|
||||||
|
section.
|
||||||
|
|
||||||
The second and subsequent lines of tagged sections must be indented
|
The second and subsequent lines of tagged sections must be indented
|
||||||
like this::
|
like this::
|
||||||
|
@ -1007,6 +1008,9 @@ like this::
|
||||||
# Duis aute irure dolor in reprehenderit in voluptate velit esse
|
# Duis aute irure dolor in reprehenderit in voluptate velit esse
|
||||||
# cillum dolore eu fugiat nulla pariatur.
|
# cillum dolore eu fugiat nulla pariatur.
|
||||||
|
|
||||||
|
"Returns" and "Errors" sections are only valid for commands. They
|
||||||
|
document the success and the error response, respectively.
|
||||||
|
|
||||||
A "Since: x.y.z" tagged section lists the release that introduced the
|
A "Since: x.y.z" tagged section lists the release that introduced the
|
||||||
definition.
|
definition.
|
||||||
|
|
||||||
|
|
|
@ -543,7 +543,7 @@ class QAPISchemaParser:
|
||||||
line = self.get_doc_indented(doc)
|
line = self.get_doc_indented(doc)
|
||||||
no_more_args = True
|
no_more_args = True
|
||||||
elif match := re.match(
|
elif match := re.match(
|
||||||
r'(Returns|Since|Notes?|Examples?|TODO): *',
|
r'(Returns|Errors|Since|Notes?|Examples?|TODO): *',
|
||||||
line):
|
line):
|
||||||
# tagged section
|
# tagged section
|
||||||
doc.new_tagged_section(self.info, match.group(1))
|
doc.new_tagged_section(self.info, match.group(1))
|
||||||
|
@ -639,8 +639,9 @@ class QAPIDoc:
|
||||||
# dicts mapping parameter/feature names to their description
|
# dicts mapping parameter/feature names to their description
|
||||||
self.args: Dict[str, QAPIDoc.ArgSection] = {}
|
self.args: Dict[str, QAPIDoc.ArgSection] = {}
|
||||||
self.features: Dict[str, QAPIDoc.ArgSection] = {}
|
self.features: Dict[str, QAPIDoc.ArgSection] = {}
|
||||||
# a command's "Returns" section
|
# a command's "Returns" and "Errors" section
|
||||||
self.returns: Optional[QAPIDoc.Section] = None
|
self.returns: Optional[QAPIDoc.Section] = None
|
||||||
|
self.errors: Optional[QAPIDoc.Section] = None
|
||||||
# "Since" section
|
# "Since" section
|
||||||
self.since: Optional[QAPIDoc.Section] = None
|
self.since: Optional[QAPIDoc.Section] = None
|
||||||
# sections other than .body, .args, .features
|
# sections other than .body, .args, .features
|
||||||
|
@ -670,6 +671,11 @@ class QAPIDoc:
|
||||||
raise QAPISemError(
|
raise QAPISemError(
|
||||||
info, "duplicated '%s' section" % tag)
|
info, "duplicated '%s' section" % tag)
|
||||||
self.returns = section
|
self.returns = section
|
||||||
|
elif tag == 'Errors':
|
||||||
|
if self.errors:
|
||||||
|
raise QAPISemError(
|
||||||
|
info, "duplicated '%s' section" % tag)
|
||||||
|
self.errors = section
|
||||||
elif tag == 'Since':
|
elif tag == 'Since':
|
||||||
if self.since:
|
if self.since:
|
||||||
raise QAPISemError(
|
raise QAPISemError(
|
||||||
|
@ -715,10 +721,15 @@ class QAPIDoc:
|
||||||
self.features[feature.name].connect(feature)
|
self.features[feature.name].connect(feature)
|
||||||
|
|
||||||
def check_expr(self, expr: QAPIExpression) -> None:
|
def check_expr(self, expr: QAPIExpression) -> None:
|
||||||
if self.returns and 'command' not in expr:
|
if 'command' not in expr:
|
||||||
|
if self.returns:
|
||||||
raise QAPISemError(
|
raise QAPISemError(
|
||||||
self.returns.info,
|
self.returns.info,
|
||||||
"'Returns' section is only valid for commands")
|
"'Returns' section is only valid for commands")
|
||||||
|
if self.errors:
|
||||||
|
raise QAPISemError(
|
||||||
|
self.returns.info,
|
||||||
|
"'Errors' section is only valid for commands")
|
||||||
|
|
||||||
def check(self) -> None:
|
def check(self) -> None:
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,8 @@
|
||||||
#
|
#
|
||||||
# Returns: @Object
|
# Returns: @Object
|
||||||
#
|
#
|
||||||
|
# Errors: some
|
||||||
|
#
|
||||||
# TODO: frobnicate
|
# TODO: frobnicate
|
||||||
#
|
#
|
||||||
# Notes:
|
# Notes:
|
||||||
|
|
|
@ -173,6 +173,8 @@ another feature
|
||||||
@arg3 is undocumented
|
@arg3 is undocumented
|
||||||
section=Returns
|
section=Returns
|
||||||
@Object
|
@Object
|
||||||
|
section=Errors
|
||||||
|
some
|
||||||
section=TODO
|
section=TODO
|
||||||
frobnicate
|
frobnicate
|
||||||
section=Notes
|
section=Notes
|
||||||
|
|
|
@ -206,6 +206,12 @@ Returns
|
||||||
"Object"
|
"Object"
|
||||||
|
|
||||||
|
|
||||||
|
Errors
|
||||||
|
~~~~~~
|
||||||
|
|
||||||
|
some
|
||||||
|
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue