qapi: add QAPISchemaIfCond.is_present()

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20210804083105.97531-4-marcandre.lureau@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Marc-André Lureau 2021-08-04 12:30:58 +04:00 committed by Markus Armbruster
parent f17539c80d
commit 33aa3267ba
4 changed files with 12 additions and 9 deletions

View File

@ -139,7 +139,7 @@ class QAPISchemaGenRSTVisitor(QAPISchemaVisitor):
term.append(nodes.literal('', member.type.doc_type())) term.append(nodes.literal('', member.type.doc_type()))
if member.optional: if member.optional:
term.append(nodes.Text(' (optional)')) term.append(nodes.Text(' (optional)'))
if member.ifcond.ifcond: if member.ifcond.is_present():
term.extend(self._nodes_for_ifcond(member.ifcond)) term.extend(self._nodes_for_ifcond(member.ifcond))
return term return term
@ -154,7 +154,7 @@ class QAPISchemaGenRSTVisitor(QAPISchemaVisitor):
nodes.literal('', variants.tag_member.name), nodes.literal('', variants.tag_member.name),
nodes.Text(' is '), nodes.Text(' is '),
nodes.literal('', '"%s"' % variant.name)] nodes.literal('', '"%s"' % variant.name)]
if variant.ifcond.ifcond: if variant.ifcond.is_present():
term.extend(self._nodes_for_ifcond(variant.ifcond)) term.extend(self._nodes_for_ifcond(variant.ifcond))
return term return term
@ -209,7 +209,7 @@ class QAPISchemaGenRSTVisitor(QAPISchemaVisitor):
dlnode = nodes.definition_list() dlnode = nodes.definition_list()
for section in doc.args.values(): for section in doc.args.values():
termtext = [nodes.literal('', section.member.name)] termtext = [nodes.literal('', section.member.name)]
if section.member.ifcond.ifcond: if section.member.ifcond.is_present():
termtext.extend(self._nodes_for_ifcond(section.member.ifcond)) termtext.extend(self._nodes_for_ifcond(section.member.ifcond))
# TODO drop fallbacks when undocumented members are outlawed # TODO drop fallbacks when undocumented members are outlawed
if section.text: if section.text:
@ -277,7 +277,7 @@ class QAPISchemaGenRSTVisitor(QAPISchemaVisitor):
def _nodes_for_if_section(self, ifcond): def _nodes_for_if_section(self, ifcond):
"""Return list of doctree nodes for the "If" section""" """Return list of doctree nodes for the "If" section"""
nodelist = [] nodelist = []
if ifcond.ifcond: if ifcond.is_present():
snode = self._make_section('If') snode = self._make_section('If')
snode += nodes.paragraph( snode += nodes.paragraph(
'', '', *self._nodes_for_ifcond(ifcond, with_if=False) '', '', *self._nodes_for_ifcond(ifcond, with_if=False)

View File

@ -123,10 +123,10 @@ def _tree_to_qlit(obj: JSONValue,
ret = '' ret = ''
if obj.comment: if obj.comment:
ret += indent(level) + f"/* {obj.comment} */\n" ret += indent(level) + f"/* {obj.comment} */\n"
if obj.ifcond.ifcond: if obj.ifcond.is_present():
ret += gen_if(obj.ifcond.ifcond) ret += gen_if(obj.ifcond.ifcond)
ret += _tree_to_qlit(obj.value, level) ret += _tree_to_qlit(obj.value, level)
if obj.ifcond.ifcond: if obj.ifcond.is_present():
ret += '\n' + gen_endif(obj.ifcond.ifcond) ret += '\n' + gen_endif(obj.ifcond.ifcond)
return ret return ret

View File

@ -29,6 +29,9 @@ class QAPISchemaIfCond:
def __init__(self, ifcond=None): def __init__(self, ifcond=None):
self.ifcond = ifcond or [] self.ifcond = ifcond or []
def is_present(self):
return bool(self.ifcond)
class QAPISchemaEntity: class QAPISchemaEntity:
meta: Optional[str] = None meta: Optional[str] = None
@ -598,7 +601,7 @@ class QAPISchemaVariants:
self.info, self.info,
"discriminator member '%s' of %s must not be optional" "discriminator member '%s' of %s must not be optional"
% (self._tag_name, base)) % (self._tag_name, base))
if self.tag_member.ifcond.ifcond: if self.tag_member.ifcond.is_present():
raise QAPISemError( raise QAPISemError(
self.info, self.info,
"discriminator member '%s' of %s must not be conditional" "discriminator member '%s' of %s must not be conditional"
@ -606,7 +609,7 @@ class QAPISchemaVariants:
else: # simple union else: # simple union
assert isinstance(self.tag_member.type, QAPISchemaEnumType) assert isinstance(self.tag_member.type, QAPISchemaEnumType)
assert not self.tag_member.optional assert not self.tag_member.optional
assert self.tag_member.ifcond.ifcond == [] assert not self.tag_member.ifcond.is_present()
if self._tag_name: # flat union if self._tag_name: # flat union
# branches that are not explicitly covered get an empty type # branches that are not explicitly covered get an empty type
cases = {v.name for v in self.variants} cases = {v.name for v in self.variants}

View File

@ -94,7 +94,7 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
@staticmethod @staticmethod
def _print_if(ifcond, indent=4): def _print_if(ifcond, indent=4):
if ifcond.ifcond: if ifcond.is_present():
print('%sif %s' % (' ' * indent, ifcond.ifcond)) print('%sif %s' % (' ' * indent, ifcond.ifcond))
@classmethod @classmethod