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>
This commit is contained in:
Markus Armbruster 2023-04-28 12:54:23 +02:00
parent a87a9b4d4f
commit 9b2c6746d3
2 changed files with 12 additions and 10 deletions

View file

@ -483,7 +483,9 @@ class QAPIDoc:
# Blank lines are always OK. # Blank lines are always OK.
if line: if line:
indent = must_match(r'\s*', line).end() indent = must_match(r'\s*', line).end()
if indent < self._indent: if self._indent < 0:
self._indent = indent
elif indent < self._indent:
raise QAPIParseError( raise QAPIParseError(
self._parser, self._parser,
"unexpected de-indent (expected at least %d spaces)" % "unexpected de-indent (expected at least %d spaces)" %
@ -631,9 +633,9 @@ class QAPIDoc:
indent = must_match(r'@\S*:\s*', line).end() indent = must_match(r'@\S*:\s*', line).end()
line = line[indent:] line = line[indent:]
if not line: if not line:
# Line was just the "@arg:" header; following lines # Line was just the "@arg:" header
# are not indented # The next non-blank line determines expected indent
indent = 0 indent = -1
else: else:
line = ' ' * indent + line line = ' ' * indent + line
self._start_args_section(name[1:-1], indent) self._start_args_section(name[1:-1], indent)
@ -666,9 +668,9 @@ class QAPIDoc:
indent = must_match(r'@\S*:\s*', line).end() indent = must_match(r'@\S*:\s*', line).end()
line = line[indent:] line = line[indent:]
if not line: if not line:
# Line was just the "@arg:" header; following lines # Line was just the "@arg:" header
# are not indented # The next non-blank line determines expected indent
indent = 0 indent = -1
else: else:
line = ' ' * indent + line line = ' ' * indent + line
self._start_features_section(name[1:-1], indent) self._start_features_section(name[1:-1], indent)
@ -712,8 +714,8 @@ class QAPIDoc:
indent = must_match(r'\S*:\s*', line).end() indent = must_match(r'\S*:\s*', line).end()
line = line[indent:] line = line[indent:]
if not line: if not line:
# Line was just the "Section:" header; following lines # Line was just the "Section:" header
# are not indented # The next non-blank line determines expected indent
indent = 0 indent = 0
else: else:
line = ' ' * indent + line line = ' ' * indent + line

View file

@ -159,7 +159,7 @@ doc symbol=cmd
arg=arg1 arg=arg1
description starts on a new line, description starts on a new line,
indented indented
arg=arg2 arg=arg2
the second argument the second argument
arg=arg3 arg=arg3