[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 05/13] qapi/parser: improve detection of '@symbol:' preface
From: |
John Snow |
Subject: |
[PATCH v3 05/13] qapi/parser: improve detection of '@symbol:' preface |
Date: |
Wed, 29 Sep 2021 15:44:20 -0400 |
Leading and trailing whitespace are now discarded, addressing the FIXME
comment. A new error is raised to detect this accidental case.
Parsing for args sections is left alone here; the 'name' variable is
moved into the only block where it is used.
Signed-off-by: John Snow <jsnow@redhat.com>
---
Tangentially related to delinting in that removing 'FIXME' comments is a
goal for pylint. My goal is to allow 'TODO' to be checked in, but
'FIXME' should be fixed prior to inclusion.
Arbitrary, but that's life for you.
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/qapi/parser.py | 13 ++++++++-----
tests/qapi-schema/doc-whitespace-leading-symbol.err | 1 +
.../qapi-schema/doc-whitespace-leading-symbol.json | 6 ++++++
tests/qapi-schema/doc-whitespace-leading-symbol.out | 0
.../qapi-schema/doc-whitespace-trailing-symbol.err | 1 +
.../qapi-schema/doc-whitespace-trailing-symbol.json | 6 ++++++
.../qapi-schema/doc-whitespace-trailing-symbol.out | 0
tests/qapi-schema/meson.build | 2 ++
8 files changed, 24 insertions(+), 5 deletions(-)
create mode 100644 tests/qapi-schema/doc-whitespace-leading-symbol.err
create mode 100644 tests/qapi-schema/doc-whitespace-leading-symbol.json
create mode 100644 tests/qapi-schema/doc-whitespace-leading-symbol.out
create mode 100644 tests/qapi-schema/doc-whitespace-trailing-symbol.err
create mode 100644 tests/qapi-schema/doc-whitespace-trailing-symbol.json
create mode 100644 tests/qapi-schema/doc-whitespace-trailing-symbol.out
diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py
index bfd2dbfd9a2..2f93a752f66 100644
--- a/scripts/qapi/parser.py
+++ b/scripts/qapi/parser.py
@@ -549,18 +549,21 @@ def _append_body_line(self, line):
Else, append the line to the current section.
"""
- name = line.split(' ', 1)[0]
- # FIXME not nice: things like '# @foo:' and '# @foo: ' aren't
- # recognized, and get silently treated as ordinary text
- if not self.symbol and not self.body.text and line.startswith('@'):
- if not line.endswith(':'):
+ stripped = line.strip()
+
+ if not self.symbol and not self.body.text and stripped.startswith('@'):
+ if not stripped.endswith(':'):
raise QAPIParseError(self._parser, "line should end with ':'")
+ if not stripped == line:
+ raise QAPIParseError(
+ self._parser, "extra whitespace around symbol declaration")
self.symbol = line[1:-1]
# FIXME invalid names other than the empty string aren't flagged
if not self.symbol:
raise QAPIParseError(self._parser, "invalid name")
elif self.symbol:
# This is a definition documentation block
+ name = line.split(' ', 1)[0]
if name.startswith('@') and name.endswith(':'):
self._append_line = self._append_args_line
self._append_args_line(line)
diff --git a/tests/qapi-schema/doc-whitespace-leading-symbol.err
b/tests/qapi-schema/doc-whitespace-leading-symbol.err
new file mode 100644
index 00000000000..785468b90e2
--- /dev/null
+++ b/tests/qapi-schema/doc-whitespace-leading-symbol.err
@@ -0,0 +1 @@
+doc-whitespace-leading-symbol.json:4:1: extra whitespace around symbol
declaration
diff --git a/tests/qapi-schema/doc-whitespace-leading-symbol.json
b/tests/qapi-schema/doc-whitespace-leading-symbol.json
new file mode 100644
index 00000000000..128c781bec9
--- /dev/null
+++ b/tests/qapi-schema/doc-whitespace-leading-symbol.json
@@ -0,0 +1,6 @@
+# Documentation for expression has leading whitespace
+
+##
+# @leading-whitespace:
+##
+{ 'command': 'leading-whitespace', 'data': {'a': 'int'} }
diff --git a/tests/qapi-schema/doc-whitespace-leading-symbol.out
b/tests/qapi-schema/doc-whitespace-leading-symbol.out
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/qapi-schema/doc-whitespace-trailing-symbol.err
b/tests/qapi-schema/doc-whitespace-trailing-symbol.err
new file mode 100644
index 00000000000..fe583b38008
--- /dev/null
+++ b/tests/qapi-schema/doc-whitespace-trailing-symbol.err
@@ -0,0 +1 @@
+doc-whitespace-trailing-symbol.json:4:1: extra whitespace around symbol
declaration
diff --git a/tests/qapi-schema/doc-whitespace-trailing-symbol.json
b/tests/qapi-schema/doc-whitespace-trailing-symbol.json
new file mode 100644
index 00000000000..da706c3d176
--- /dev/null
+++ b/tests/qapi-schema/doc-whitespace-trailing-symbol.json
@@ -0,0 +1,6 @@
+# Documentation for expression has extra whitespace
+
+##
+# @trailing-whitespace:
+##
+{ 'command': 'trailing-whitespace', 'data': {'a': 'int'} }
diff --git a/tests/qapi-schema/doc-whitespace-trailing-symbol.out
b/tests/qapi-schema/doc-whitespace-trailing-symbol.out
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/qapi-schema/meson.build b/tests/qapi-schema/meson.build
index 6187efbd58f..64ffbd1b3d4 100644
--- a/tests/qapi-schema/meson.build
+++ b/tests/qapi-schema/meson.build
@@ -82,6 +82,8 @@ schemas = [
'doc-missing.json',
'doc-no-symbol.json',
'doc-undoc-feature.json',
+ 'doc-whitespace-leading-symbol.json',
+ 'doc-whitespace-trailing-symbol.json',
'double-type.json',
'duplicate-key.json',
'empty.json',
--
2.31.1
- [PATCH v3 00/13] qapi: static typing conversion, pt5b, John Snow, 2021/09/29
- [PATCH v3 01/13] qapi/pylintrc: ignore 'consider-using-f-string' warning, John Snow, 2021/09/29
- [PATCH v3 02/13] qapi/gen: use dict.items() to iterate over _modules, John Snow, 2021/09/29
- [PATCH v3 03/13] qapi/parser: fix unused check_args_section arguments, John Snow, 2021/09/29
- [PATCH v3 04/13] qapi: Add spaces after symbol declaration for consistency, John Snow, 2021/09/29
- [PATCH v3 06/13] qapi/parser: remove FIXME comment from _append_body_line, John Snow, 2021/09/29
- [PATCH v3 05/13] qapi/parser: improve detection of '@symbol:' preface,
John Snow <=
- [PATCH v3 07/13] qapi/parser: Simplify _end_section(), John Snow, 2021/09/29
- [PATCH v3 08/13] qapi/parser: Introduce NullSection, John Snow, 2021/09/29
- [PATCH v3 12/13] qapi/parser: Silence too-few-public-methods warning, John Snow, 2021/09/29
- [PATCH v3 10/13] qapi/parser: add type hint annotations (QAPIDoc), John Snow, 2021/09/29
- [PATCH v3 11/13] qapi/parser: enable mypy checks, John Snow, 2021/09/29
- [PATCH v3 09/13] qapi/parser: add import cycle workaround, John Snow, 2021/09/29