mirror of https://github.com/xemu-project/xemu.git
qapi: Rename pragma *-whitelist to *-exceptions
Rename pragma returns-whitelist to command-returns-exceptions, and name-case-whitelist to member-name-case-exceptions. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210323094025.3569441-20-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
ef8b3829f6
commit
b86df37478
|
@ -147,9 +147,10 @@ prevent incomplete include files.
|
||||||
=== Pragma directives ===
|
=== Pragma directives ===
|
||||||
|
|
||||||
Syntax:
|
Syntax:
|
||||||
PRAGMA = { 'pragma': { '*doc-required': BOOL,
|
PRAGMA = { 'pragma': {
|
||||||
'*returns-whitelist': [ STRING, ... ],
|
'*doc-required': BOOL,
|
||||||
'*name-case-whitelist': [ STRING, ... ] } }
|
'*command-returns-exceptions': [ STRING, ... ],
|
||||||
|
'*member-name-exceptions': [ STRING, ... ] } }
|
||||||
|
|
||||||
The pragma directive lets you control optional generator behavior.
|
The pragma directive lets you control optional generator behavior.
|
||||||
|
|
||||||
|
@ -159,11 +160,11 @@ pragma to different values in parts of the schema doesn't work.
|
||||||
Pragma 'doc-required' takes a boolean value. If true, documentation
|
Pragma 'doc-required' takes a boolean value. If true, documentation
|
||||||
is required. Default is false.
|
is required. Default is false.
|
||||||
|
|
||||||
Pragma 'returns-whitelist' takes a list of command names that may
|
Pragma 'command-returns-exceptions' takes a list of commands that may
|
||||||
violate the rules on permitted return types. Default is none.
|
violate the rules on permitted return types. Default is none.
|
||||||
|
|
||||||
Pragma 'name-case-whitelist' takes a list of names that may violate
|
Pragma 'member-name-exceptions' takes a list of types whose member
|
||||||
rules on use of upper- vs. lower-case letters. Default is none.
|
names may contain uppercase letters. Default is none.
|
||||||
|
|
||||||
|
|
||||||
=== Enumeration types ===
|
=== Enumeration types ===
|
||||||
|
@ -490,9 +491,9 @@ are the arguments. A union type requires 'boxed': true.
|
||||||
Member 'returns' defines the command's return type. It defaults to an
|
Member 'returns' defines the command's return type. It defaults to an
|
||||||
empty struct type. It must normally be a complex type or an array of
|
empty struct type. It must normally be a complex type or an array of
|
||||||
a complex type. To return anything else, the command must be listed
|
a complex type. To return anything else, the command must be listed
|
||||||
in pragma 'returns-whitelist'. If you do this, extending the command
|
in pragma 'commands-returns-exceptions'. If you do this, extending
|
||||||
to return additional information will be harder. Use of
|
the command to return additional information will be harder. Use of
|
||||||
'returns-whitelist' for new commands is strongly discouraged.
|
the pragma for new commands is strongly discouraged.
|
||||||
|
|
||||||
A command's error responses are not specified in the QAPI schema.
|
A command's error responses are not specified in the QAPI schema.
|
||||||
Error conditions should be documented in comments.
|
Error conditions should be documented in comments.
|
||||||
|
@ -755,7 +756,7 @@ Any name (command, event, type, member, or enum value) beginning with
|
||||||
"x-" is marked experimental, and may be withdrawn or changed
|
"x-" is marked experimental, and may be withdrawn or changed
|
||||||
incompatibly in a future release.
|
incompatibly in a future release.
|
||||||
|
|
||||||
Pragma 'name-case-whitelist' lets you violate the rules on use of
|
Pragma 'member-name-exceptions' lets you violate the rules on use of
|
||||||
upper and lower case. Use for new code is strongly discouraged.
|
upper and lower case. Use for new code is strongly discouraged.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
# add to them!
|
# add to them!
|
||||||
{ 'pragma': {
|
{ 'pragma': {
|
||||||
# Commands allowed to return a non-dictionary:
|
# Commands allowed to return a non-dictionary:
|
||||||
'returns-whitelist': [
|
'command-returns-exceptions': [
|
||||||
'human-monitor-command',
|
'human-monitor-command',
|
||||||
'qom-get',
|
'qom-get',
|
||||||
'query-tpm-models',
|
'query-tpm-models',
|
||||||
'query-tpm-types',
|
'query-tpm-types',
|
||||||
'ringbuf-read' ],
|
'ringbuf-read' ],
|
||||||
'name-case-whitelist': [
|
'member-name-exceptions': [
|
||||||
'ACPISlotType', # DIMM, visible through query-acpi-ospm-status
|
'ACPISlotType', # DIMM, visible through query-acpi-ospm-status
|
||||||
'BlockdevVmdkSubformat', # all members, to match VMDK spec spellings
|
'BlockdevVmdkSubformat', # all members, to match VMDK spec spellings
|
||||||
'BlockdevVmdkAdapterType', # legacyESX, to match VMDK spec spellings
|
'BlockdevVmdkAdapterType', # legacyESX, to match VMDK spec spellings
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
# add to them!
|
# add to them!
|
||||||
{ 'pragma': {
|
{ 'pragma': {
|
||||||
# Commands allowed to return a non-dictionary:
|
# Commands allowed to return a non-dictionary:
|
||||||
'returns-whitelist': [
|
'command-returns-exceptions': [
|
||||||
'guest-file-open',
|
'guest-file-open',
|
||||||
'guest-fsfreeze-freeze',
|
'guest-fsfreeze-freeze',
|
||||||
'guest-fsfreeze-freeze-list',
|
'guest-fsfreeze-freeze-list',
|
||||||
|
|
|
@ -181,7 +181,7 @@ def check_type(value, info, source,
|
||||||
raise QAPISemError(info,
|
raise QAPISemError(info,
|
||||||
"%s should be an object or type name" % source)
|
"%s should be an object or type name" % source)
|
||||||
|
|
||||||
permit_upper = allow_dict in info.pragma.name_case_whitelist
|
permit_upper = allow_dict in info.pragma.member_name_exceptions
|
||||||
|
|
||||||
# value is a dictionary, check that each member is okay
|
# value is a dictionary, check that each member is okay
|
||||||
for (key, arg) in value.items():
|
for (key, arg) in value.items():
|
||||||
|
@ -224,7 +224,7 @@ def check_enum(expr, info):
|
||||||
if prefix is not None and not isinstance(prefix, str):
|
if prefix is not None and not isinstance(prefix, str):
|
||||||
raise QAPISemError(info, "'prefix' must be a string")
|
raise QAPISemError(info, "'prefix' must be a string")
|
||||||
|
|
||||||
permit_upper = name in info.pragma.name_case_whitelist
|
permit_upper = name in info.pragma.member_name_exceptions
|
||||||
|
|
||||||
members[:] = [m if isinstance(m, dict) else {'name': m}
|
members[:] = [m if isinstance(m, dict) else {'name': m}
|
||||||
for m in members]
|
for m in members]
|
||||||
|
|
|
@ -132,12 +132,12 @@ class QAPISchemaParser:
|
||||||
raise QAPISemError(info,
|
raise QAPISemError(info,
|
||||||
"pragma 'doc-required' must be boolean")
|
"pragma 'doc-required' must be boolean")
|
||||||
info.pragma.doc_required = value
|
info.pragma.doc_required = value
|
||||||
elif name == 'returns-whitelist':
|
elif name == 'command-returns-exceptions':
|
||||||
self._check_pragma_list_of_str(name, value, info)
|
self._check_pragma_list_of_str(name, value, info)
|
||||||
info.pragma.returns_whitelist = value
|
info.pragma.command_returns_exceptions = value
|
||||||
elif name == 'name-case-whitelist':
|
elif name == 'member-name-exceptions':
|
||||||
self._check_pragma_list_of_str(name, value, info)
|
self._check_pragma_list_of_str(name, value, info)
|
||||||
info.pragma.name_case_whitelist = value
|
info.pragma.member_name_exceptions = value
|
||||||
else:
|
else:
|
||||||
raise QAPISemError(info, "unknown pragma '%s'" % name)
|
raise QAPISemError(info, "unknown pragma '%s'" % name)
|
||||||
|
|
||||||
|
|
|
@ -779,7 +779,7 @@ class QAPISchemaCommand(QAPISchemaEntity):
|
||||||
if self._ret_type_name:
|
if self._ret_type_name:
|
||||||
self.ret_type = schema.resolve_type(
|
self.ret_type = schema.resolve_type(
|
||||||
self._ret_type_name, self.info, "command's 'returns'")
|
self._ret_type_name, self.info, "command's 'returns'")
|
||||||
if self.name not in self.info.pragma.returns_whitelist:
|
if self.name not in self.info.pragma.command_returns_exceptions:
|
||||||
typ = self.ret_type
|
typ = self.ret_type
|
||||||
if isinstance(typ, QAPISchemaArrayType):
|
if isinstance(typ, QAPISchemaArrayType):
|
||||||
typ = self.ret_type.element_type
|
typ = self.ret_type.element_type
|
||||||
|
|
|
@ -21,10 +21,10 @@ class QAPISchemaPragma:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
# Are documentation comments required?
|
# Are documentation comments required?
|
||||||
self.doc_required = False
|
self.doc_required = False
|
||||||
# Whitelist of commands allowed to return a non-dictionary
|
# Commands allowed to return a non-dictionary
|
||||||
self.returns_whitelist: List[str] = []
|
self.command_returns_exceptions: List[str] = []
|
||||||
# Whitelist of entities allowed to violate case conventions
|
# Types whose member names may violate case conventions
|
||||||
self.name_case_whitelist: List[str] = []
|
self.member_name_exceptions: List[str] = []
|
||||||
|
|
||||||
|
|
||||||
class QAPISourceInfo:
|
class QAPISourceInfo:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Member names should be 'lower-case' unless the enum is whitelisted
|
# Member names should be 'lower-case' unless the enum is whitelisted
|
||||||
{ 'pragma': { 'name-case-whitelist': [ 'UuidInfo' ] } }
|
{ 'pragma': { 'member-name-exceptions': [ 'UuidInfo' ] } }
|
||||||
{ 'enum': 'UuidInfo', 'data': [ 'Value' ] } # UuidInfo is whitelisted
|
{ 'enum': 'UuidInfo', 'data': [ 'Value' ] } # UuidInfo is whitelisted
|
||||||
{ 'enum': 'NoWayThisWillGetWhitelisted', 'data': [ 'Value' ] }
|
{ 'enum': 'NoWayThisWillGetWhitelisted', 'data': [ 'Value' ] }
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
pragma-value-not-list-of-str.json:3: pragma returns-whitelist must be a list of strings
|
pragma-value-not-list-of-str.json:3: pragma command-returns-exceptions must be a list of strings
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
# pragma value must be list of strings
|
# pragma value must be list of strings
|
||||||
|
|
||||||
{ 'pragma': { 'returns-whitelist': [ 'good', [ 'bad' ] ] } }
|
{ 'pragma': { 'command-returns-exceptions': [ 'good', [ 'bad' ] ] } }
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
pragma-value-not-list.json:3: pragma name-case-whitelist must be a list of strings
|
pragma-value-not-list.json:2: pragma member-name-exceptions must be a list of strings
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
# pragma value must be list
|
# pragma value must be list
|
||||||
|
{ 'pragma': { 'member-name-exceptions': false } }
|
||||||
{ 'pragma': { 'name-case-whitelist': false } }
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# Whitelists to permit QAPI rule violations
|
# Whitelists to permit QAPI rule violations
|
||||||
{ 'pragma': {
|
{ 'pragma': {
|
||||||
# Commands allowed to return a non-dictionary:
|
# Commands allowed to return a non-dictionary:
|
||||||
'returns-whitelist': [
|
'command-returns-exceptions': [
|
||||||
'guest-get-time',
|
'guest-get-time',
|
||||||
'guest-sync' ] } }
|
'guest-sync' ] } }
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# we enforce that 'returns' be a dict or array of dict unless whitelisted
|
# we enforce that 'returns' be a dict or array of dict unless whitelisted
|
||||||
|
|
||||||
{ 'pragma': { 'returns-whitelist': [
|
{ 'pragma': { 'command-returns-exceptions': [
|
||||||
'human-monitor-command', 'query-tpm-models', 'guest-get-time' ] } }
|
'human-monitor-command', 'query-tpm-models', 'guest-get-time' ] } }
|
||||||
|
|
||||||
{ 'command': 'human-monitor-command',
|
{ 'command': 'human-monitor-command',
|
||||||
|
|
Loading…
Reference in New Issue