aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2023-04-28 12:54:23 +0200
committerMarkus Armbruster <armbru@redhat.com>2023-05-09 09:12:48 +0200
commit9b2c6746d30a44d222e9124faee59eb05703b6ae (patch)
treed657574a2351ae92041407e8c87b5f7fc2c04a55 /scripts
parenta87a9b4d4fc4dcfa2925b1b90474f0ec69d59edf (diff)
qapi: Fix argument description indentation stripping
When an argument's description starts on the line after the "#arg: " line, indentation is stripped only from the description's first line, as demonstrated by the previous commit. Moreover, subsequent lines with less indentation are not rejected. Make the first line's indentation the expected indentation for the remainder of the description. This fixes indentation stripping, and also requires at least that much indentation. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20230428105429.1687850-12-armbru@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/qapi/parser.py20
1 files changed, 11 insertions, 9 deletions
diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py
index 7b49d3ab05..ddc14ceaba 100644
--- a/scripts/qapi/parser.py
+++ b/scripts/qapi/parser.py
@@ -483,7 +483,9 @@ class QAPIDoc:
# Blank lines are always OK.
if line:
indent = must_match(r'\s*', line).end()
- if indent < self._indent:
+ if self._indent < 0:
+ self._indent = indent
+ elif indent < self._indent:
raise QAPIParseError(
self._parser,
"unexpected de-indent (expected at least %d spaces)" %
@@ -631,9 +633,9 @@ class QAPIDoc:
indent = must_match(r'@\S*:\s*', line).end()
line = line[indent:]
if not line:
- # Line was just the "@arg:" header; following lines
- # are not indented
- indent = 0
+ # Line was just the "@arg:" header
+ # The next non-blank line determines expected indent
+ indent = -1
else:
line = ' ' * indent + line
self._start_args_section(name[1:-1], indent)
@@ -666,9 +668,9 @@ class QAPIDoc:
indent = must_match(r'@\S*:\s*', line).end()
line = line[indent:]
if not line:
- # Line was just the "@arg:" header; following lines
- # are not indented
- indent = 0
+ # Line was just the "@arg:" header
+ # The next non-blank line determines expected indent
+ indent = -1
else:
line = ' ' * indent + line
self._start_features_section(name[1:-1], indent)
@@ -712,8 +714,8 @@ class QAPIDoc:
indent = must_match(r'\S*:\s*', line).end()
line = line[indent:]
if not line:
- # Line was just the "Section:" header; following lines
- # are not indented
+ # Line was just the "Section:" header
+ # The next non-blank line determines expected indent
indent = 0
else:
line = ' ' * indent + line