Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Markus Armbruster committed May 9, 2023
1 parent a87a9b4 commit 9b2c674
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
20 changes: 11 additions & 9 deletions scripts/qapi/parser.py
Expand Up @@ -483,7 +483,9 @@ def append(self, line: str) -> None:
# 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)" %
Expand Down Expand Up @@ -631,9 +633,9 @@ def _append_args_line(self, line: str) -> None:
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)
Expand Down Expand Up @@ -666,9 +668,9 @@ def _append_features_line(self, line: str) -> None:
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)
Expand Down Expand Up @@ -712,8 +714,8 @@ def _append_various_line(self, line: str) -> None:
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
Expand Down
2 changes: 1 addition & 1 deletion tests/qapi-schema/doc-good.out
Expand Up @@ -159,7 +159,7 @@ doc symbol=cmd

arg=arg1
description starts on a new line,
indented
indented
arg=arg2
the second argument
arg=arg3
Expand Down

0 comments on commit 9b2c674

Please sign in to comment.