mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 03:13:44 +08:00
qapi: Enforce type naming rules
Type names should be CamelCase. Enforce this. The only offenders are in tests/. Fix them. Add test type-case to cover the new error. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210323094025.3569441-15-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> [Regexp simplified, new test made more robust]
This commit is contained in:
parent
d4f4cae8de
commit
3e6c8a6331
@ -61,7 +61,8 @@ def check_name_lower(name, info, source,
|
|||||||
|
|
||||||
def check_name_camel(name, info, source):
|
def check_name_camel(name, info, source):
|
||||||
stem = check_name_str(name, info, source)
|
stem = check_name_str(name, info, source)
|
||||||
# TODO reject '[_-]' in stem, require CamelCase
|
if not re.match(r'[A-Z][A-Za-z0-9]*[a-z][A-Za-z0-9]*$', stem):
|
||||||
|
raise QAPISemError(info, "name of %s must use CamelCase" % source)
|
||||||
|
|
||||||
|
|
||||||
def check_defn_name_str(name, info, meta):
|
def check_defn_name_str(name, info, meta):
|
||||||
|
@ -11,9 +11,9 @@
|
|||||||
'data': { 'nothing': 'Empty' } }
|
'data': { 'nothing': 'Empty' } }
|
||||||
|
|
||||||
{ 'struct': 'Base',
|
{ 'struct': 'Base',
|
||||||
'data': { 'type': 'T' } }
|
'data': { 'type': 'FrobType' } }
|
||||||
|
|
||||||
{ 'struct': 'Empty',
|
{ 'struct': 'Empty',
|
||||||
'data': { } }
|
'data': { } }
|
||||||
|
|
||||||
{ 'enum': 'T', 'data': ['nothing'] }
|
{ 'enum': 'FrobType', 'data': ['nothing'] }
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
double-type.json: In struct 'bar':
|
double-type.json: In struct 'Bar':
|
||||||
double-type.json:2: struct has unknown key 'command'
|
double-type.json:2: struct has unknown key 'command'
|
||||||
Valid keys are 'base', 'data', 'features', 'if', 'struct'.
|
Valid keys are 'base', 'data', 'features', 'if', 'struct'.
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
# we reject an expression with ambiguous metatype
|
# we reject an expression with ambiguous metatype
|
||||||
{ 'command': 'foo', 'struct': 'bar', 'data': { } }
|
{ 'command': 'foo', 'struct': 'Bar', 'data': { } }
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
features-deprecated-type.json: In struct 'S':
|
features-deprecated-type.json: In struct 'Foo':
|
||||||
features-deprecated-type.json:2: feature 'deprecated' is not supported for types
|
features-deprecated-type.json:2: feature 'deprecated' is not supported for types
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# Feature 'deprecated' is not supported for types
|
# Feature 'deprecated' is not supported for types
|
||||||
{ 'struct': 'S', 'data': {},
|
{ 'struct': 'Foo', 'data': {},
|
||||||
'features': [ 'deprecated' ] }
|
'features': [ 'deprecated' ] }
|
||||||
|
@ -180,6 +180,7 @@ schemas = [
|
|||||||
'trailing-comma-list.json',
|
'trailing-comma-list.json',
|
||||||
'trailing-comma-object.json',
|
'trailing-comma-object.json',
|
||||||
'type-bypass-bad-gen.json',
|
'type-bypass-bad-gen.json',
|
||||||
|
'type-case.json',
|
||||||
'unclosed-list.json',
|
'unclosed-list.json',
|
||||||
'unclosed-object.json',
|
'unclosed-object.json',
|
||||||
'unclosed-string.json',
|
'unclosed-string.json',
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
redefined-builtin.json: In struct 'size':
|
redefined-builtin.json: In struct 'QType':
|
||||||
redefined-builtin.json:2: built-in type 'size' is already defined
|
redefined-builtin.json:2: enum type 'QType' is already defined
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
# we reject types that duplicate builtin names
|
# we reject types that clash with predefined types
|
||||||
{ 'struct': 'size', 'data': { 'myint': 'size' } }
|
{ 'struct': 'QType', 'data': { 'myint': 'size' } }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
redefined-type.json: In enum 'foo':
|
redefined-type.json: In enum 'Foo':
|
||||||
redefined-type.json:3: 'foo' is already defined
|
redefined-type.json:3: 'Foo' is already defined
|
||||||
redefined-type.json: In struct 'foo':
|
redefined-type.json: In struct 'Foo':
|
||||||
redefined-type.json:2: previous definition
|
redefined-type.json:2: previous definition
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# we reject types defined more than once
|
# we reject types defined more than once
|
||||||
{ 'struct': 'foo', 'data': { 'one': 'str' } }
|
{ 'struct': 'Foo', 'data': { 'one': 'str' } }
|
||||||
{ 'enum': 'foo', 'data': [ 'two' ] }
|
{ 'enum': 'Foo', 'data': [ 'two' ] }
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
struct-data-invalid.json: In struct 'foo':
|
struct-data-invalid.json: In struct 'Foo':
|
||||||
struct-data-invalid.json:1: 'data' should be an object or type name
|
struct-data-invalid.json:1: 'data' should be an object or type name
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ 'struct': 'foo',
|
{ 'struct': 'Foo',
|
||||||
'data': false }
|
'data': false }
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
struct-member-invalid-dict.json: In struct 'foo':
|
struct-member-invalid-dict.json: In struct 'Foo':
|
||||||
struct-member-invalid-dict.json:3: 'data' member '*a' misses key 'type'
|
struct-member-invalid-dict.json:3: 'data' member '*a' misses key 'type'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# struct 'data' member with dict value is (longhand) member
|
# struct 'data' member with dict value is (longhand) member
|
||||||
# definition, not inline complex type
|
# definition, not inline complex type
|
||||||
{ 'struct': 'foo',
|
{ 'struct': 'Foo',
|
||||||
'data': { '*a': { 'case': 'foo' } } }
|
'data': { '*a': { 'case': 'foo' } } }
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
struct-member-invalid.json: In struct 'foo':
|
struct-member-invalid.json: In struct 'Foo':
|
||||||
struct-member-invalid.json:1: 'data' member 'a' should be a type name
|
struct-member-invalid.json:1: 'data' member 'a' should be a type name
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ 'struct': 'foo',
|
{ 'struct': 'Foo',
|
||||||
'data': { 'a': false } }
|
'data': { 'a': false } }
|
||||||
|
2
tests/qapi-schema/type-case.err
Normal file
2
tests/qapi-schema/type-case.err
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
type-case.json: In struct 'not-a-camel':
|
||||||
|
type-case.json:2: name of struct must use CamelCase
|
2
tests/qapi-schema/type-case.json
Normal file
2
tests/qapi-schema/type-case.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Type names should use CamelCase
|
||||||
|
{ 'struct': 'not-a-camel', 'data': {} }
|
0
tests/qapi-schema/type-case.out
Normal file
0
tests/qapi-schema/type-case.out
Normal file
@ -1,3 +1,3 @@
|
|||||||
unknown-expr-key.json: In struct 'bar':
|
unknown-expr-key.json: In struct 'Bar':
|
||||||
unknown-expr-key.json:2: struct has unknown keys 'bogus', 'phony'
|
unknown-expr-key.json:2: struct has unknown keys 'bogus', 'phony'
|
||||||
Valid keys are 'base', 'data', 'features', 'if', 'struct'.
|
Valid keys are 'base', 'data', 'features', 'if', 'struct'.
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
# we reject an expression with unknown top-level keys
|
# we reject an expression with unknown top-level keys
|
||||||
{ 'struct': 'bar', 'data': { 'string': 'str'}, 'bogus': { }, 'phony': { } }
|
{ 'struct': 'Bar', 'data': { 'string': 'str'}, 'bogus': { }, 'phony': { } }
|
||||||
|
Loading…
Reference in New Issue
Block a user