summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--scripts/qapi/parser.py20
-rw-r--r--tests/qapi-schema/doc-good.out2
2 files changed, 12 insertions, 10 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
diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
index 2ba72ae558..277371acc8 100644
--- a/tests/qapi-schema/doc-good.out
+++ b/tests/qapi-schema/doc-good.out
@@ -159,7 +159,7 @@ doc symbol=cmd
 
     arg=arg1
 description starts on a new line,
-    indented
+indented
     arg=arg2
 the second argument
     arg=arg3