mirror of https://github.com/xemu-project/xemu.git
qapi: Check feature documentation against the schema
Commit f3ed93d545
"qapi: Allow documentation for features" neglected
to check documentation against the schema. Fix that: check them the
same way we check arguments.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20191024110237.30963-20-armbru@redhat.com>
This commit is contained in:
parent
e4def78755
commit
e151941d1b
|
@ -555,13 +555,23 @@ class QAPIDoc(object):
|
||||||
self.args[member.name] = QAPIDoc.ArgSection(member.name)
|
self.args[member.name] = QAPIDoc.ArgSection(member.name)
|
||||||
self.args[member.name].connect(member)
|
self.args[member.name].connect(member)
|
||||||
|
|
||||||
|
def connect_feature(self, feature):
|
||||||
|
if feature.name not in self.features:
|
||||||
|
raise QAPISemError(feature.info,
|
||||||
|
"feature '%s' lacks documentation"
|
||||||
|
% feature.name)
|
||||||
|
self.features[feature.name] = QAPIDoc.ArgSection(feature.name)
|
||||||
|
self.features[feature.name].connect(feature)
|
||||||
|
|
||||||
def check_expr(self, expr):
|
def check_expr(self, expr):
|
||||||
if self.has_section('Returns') and 'command' not in expr:
|
if self.has_section('Returns') and 'command' not in expr:
|
||||||
raise QAPISemError(self.info,
|
raise QAPISemError(self.info,
|
||||||
"'Returns:' is only valid for commands")
|
"'Returns:' is only valid for commands")
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
bogus = [name for name, section in self.args.items()
|
|
||||||
|
def check_args_section(args, info, what):
|
||||||
|
bogus = [name for name, section in args.items()
|
||||||
if not section.member]
|
if not section.member]
|
||||||
if bogus:
|
if bogus:
|
||||||
raise QAPISemError(
|
raise QAPISemError(
|
||||||
|
@ -570,3 +580,6 @@ class QAPIDoc(object):
|
||||||
% ("s" if len(bogus) > 1 else "",
|
% ("s" if len(bogus) > 1 else "",
|
||||||
"', '".join(bogus),
|
"', '".join(bogus),
|
||||||
"do" if len(bogus) > 1 else "does"))
|
"do" if len(bogus) > 1 else "does"))
|
||||||
|
|
||||||
|
check_args_section(self.args, self.info, 'members')
|
||||||
|
check_args_section(self.features, self.info, 'features')
|
||||||
|
|
|
@ -56,6 +56,8 @@ class QAPISchemaEntity(object):
|
||||||
seen = {}
|
seen = {}
|
||||||
for f in self.features:
|
for f in self.features:
|
||||||
f.check_clash(self.info, seen)
|
f.check_clash(self.info, seen)
|
||||||
|
if self.doc:
|
||||||
|
self.doc.connect_feature(f)
|
||||||
|
|
||||||
self._checked = True
|
self._checked = True
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
doc-bad-feature.json:3: documented member 'a' does not exist
|
|
@ -1,5 +1,4 @@
|
||||||
# Features listed in the doc comment must exist in the actual schema
|
# Features listed in the doc comment must exist in the actual schema
|
||||||
# BUG: nonexistent @a is not rejected
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# @foo:
|
# @foo:
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
module None
|
|
||||||
object q_empty
|
|
||||||
enum QType
|
|
||||||
prefix QTYPE
|
|
||||||
member none
|
|
||||||
member qnull
|
|
||||||
member qnum
|
|
||||||
member qstring
|
|
||||||
member qdict
|
|
||||||
member qlist
|
|
||||||
member qbool
|
|
||||||
module doc-bad-feature.json
|
|
||||||
command foo None -> None
|
|
||||||
gen=True success_response=True boxed=False oob=False preconfig=False
|
|
||||||
doc symbol=foo
|
|
||||||
body=
|
|
||||||
|
|
||||||
feature=a
|
|
||||||
a
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
doc-undoc-feature.json: In command 'foo':
|
||||||
|
doc-undoc-feature.json:9: feature 'undoc' lacks documentation
|
|
@ -1,5 +1,4 @@
|
||||||
# Doc comment must cover all features
|
# Doc comment must cover all features
|
||||||
# BUG: missing documentation for @undoc not caught
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# @foo:
|
# @foo:
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
module None
|
|
||||||
object q_empty
|
|
||||||
enum QType
|
|
||||||
prefix QTYPE
|
|
||||||
member none
|
|
||||||
member qnull
|
|
||||||
member qnum
|
|
||||||
member qstring
|
|
||||||
member qdict
|
|
||||||
member qlist
|
|
||||||
member qbool
|
|
||||||
module doc-undoc-feature.json
|
|
||||||
command foo None -> None
|
|
||||||
gen=True success_response=True boxed=False oob=False preconfig=False
|
|
||||||
feature undoc
|
|
||||||
feature doc
|
|
||||||
doc symbol=foo
|
|
||||||
body=
|
|
||||||
|
|
||||||
feature=doc
|
|
||||||
documented feature
|
|
Loading…
Reference in New Issue