浏览代码

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>
Markus Armbruster 6 年之前
父节点
当前提交
14c3279502
共有 3 个文件被更改,包括 7 次插入3 次删除
  1. 5 1
      scripts/qapi/common.py
  2. 1 1
      tests/qapi-schema/bad-type-int.err
  3. 1 1
      tests/qapi-schema/funny-word.err

+ 5 - 1
scripts/qapi/common.py

@@ -559,7 +559,11 @@ def accept(self, skip_comment=True):
                 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()

+ 1 - 1
tests/qapi-schema/bad-type-int.err

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

+ 1 - 1
tests/qapi-schema/funny-word.err

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