qapi/parser: remove FIXME comment from _append_body_line

True, we do not check the validity of this symbol -- but we don't check
the validity of definition names during parse, either -- that happens
later, during the expr check. I don't want to introduce a dependency on
expr.py:check_name_str here and introduce a cycle.

Instead, rest assured that a documentation block is required for each
definition. This requirement uses the names of each section to ensure
that we fulfilled this requirement.

e.g., let's say that block-core.json has a comment block for
"Snapshot!Info" by accident. We'll see this error message:

In file included from ../../qapi/block.json:8:
../../qapi/block-core.json: In struct 'SnapshotInfo':
../../qapi/block-core.json:38: documentation comment is for 'Snapshot!Info'

That's a pretty decent error message.

Now, let's say that we actually mangle it twice, identically:

../../qapi/block-core.json: In struct 'Snapshot!Info':
../../qapi/block-core.json:38: struct has an invalid name

That's also pretty decent. If we forget to fix it in both places, we'll
just be back to the first error.

Therefore, let's just drop this FIXME and adjust the error message to
not imply a more thorough check than is actually performed.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20210930205716.1148693-6-jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
John Snow 2021-09-30 16:57:08 -04:00 committed by Markus Armbruster
parent a9e2eb06ed
commit cd87c14cde
2 changed files with 5 additions and 3 deletions

View File

@ -556,9 +556,11 @@ class QAPIDoc:
if not line.endswith(':'): if not line.endswith(':'):
raise QAPIParseError(self._parser, "line should end with ':'") raise QAPIParseError(self._parser, "line should end with ':'")
self.symbol = line[1:-1] self.symbol = line[1:-1]
# FIXME invalid names other than the empty string aren't flagged # Invalid names are not checked here, but the name provided MUST
# match the following definition, which *is* validated in expr.py.
if not self.symbol: if not self.symbol:
raise QAPIParseError(self._parser, "invalid name") raise QAPIParseError(
self._parser, "name required after '@'")
elif self.symbol: elif self.symbol:
# This is a definition documentation block # This is a definition documentation block
if name.startswith('@') and name.endswith(':'): if name.startswith('@') and name.endswith(':'):

View File

@ -1 +1 @@
doc-empty-symbol.json:4:1: invalid name doc-empty-symbol.json:4:1: name required after '@'