qapi: Improve reporting of lexical errors

Show text up to next structural character, whitespace, or quote
character instead of just the first character.

Forgotten quotes now get reported like "Stray 'command'" instead of
"Stray 'c'".

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20190914153506.2151-9-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Markus Armbruster 2019-09-14 17:34:55 +02:00
parent 9f5e6b088a
commit 14c3279502
3 changed files with 7 additions and 3 deletions

View File

@ -559,7 +559,11 @@ class QAPISchemaParser(object):
self.line += 1
self.line_pos = self.cursor
elif not self.tok.isspace():
raise QAPIParseError(self, "Stray '%s'" % self.tok)
# Show up to next structural, whitespace or quote
# character
match = re.match('[^[\\]{}:,\\s\'"]+',
self.src[self.cursor-1:])
raise QAPIParseError(self, "Stray '%s'" % match.group(0))
def get_members(self):
expr = OrderedDict()

View File

@ -1 +1 @@
tests/qapi-schema/bad-type-int.json:3:13: Stray '1'
tests/qapi-schema/bad-type-int.json:3:13: Stray '123'

View File

@ -1 +1 @@
tests/qapi-schema/funny-word.json:1:3: Stray 'c'
tests/qapi-schema/funny-word.json:1:3: Stray 'command'