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,18 +555,31 @@ class QAPIDoc(object):
|
||||
self.args[member.name] = QAPIDoc.ArgSection(member.name)
|
||||
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):
|
||||
if self.has_section('Returns') and 'command' not in expr:
|
||||
raise QAPISemError(self.info,
|
||||
"'Returns:' is only valid for commands")
|
||||
|
||||
def check(self):
|
||||
bogus = [name for name, section in self.args.items()
|
||||
if not section.member]
|
||||
if bogus:
|
||||
raise QAPISemError(
|
||||
self.info,
|
||||
"documented member%s '%s' %s not exist"
|
||||
% ("s" if len(bogus) > 1 else "",
|
||||
"', '".join(bogus),
|
||||
"do" if len(bogus) > 1 else "does"))
|
||||
|
||||
def check_args_section(args, info, what):
|
||||
bogus = [name for name, section in args.items()
|
||||
if not section.member]
|
||||
if bogus:
|
||||
raise QAPISemError(
|
||||
self.info,
|
||||
"documented member%s '%s' %s not exist"
|
||||
% ("s" if len(bogus) > 1 else "",
|
||||
"', '".join(bogus),
|
||||
"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 = {}
|
||||
for f in self.features:
|
||||
f.check_clash(self.info, seen)
|
||||
if self.doc:
|
||||
self.doc.connect_feature(f)
|
||||
|
||||
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
|
||||
# BUG: nonexistent @a is not rejected
|
||||
|
||||
##
|
||||
# @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
|
||||
# BUG: missing documentation for @undoc not caught
|
||||
|
||||
##
|
||||
# @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
Block a user