Hi On Mon, Mar 13, 2017 at 10:25 AM Markus Armbruster <arm...@redhat.com> wrote:
> We silently fix missing #optional tags for QAPIDoc by appending a line > "#optional" to the section's .content. However, this interferes with > .__repr__ stripping trailing blank lines from .content. > > Use new ArgSection instance variable .optional instead, and leave > .content alone. > > To permit testing .optional in texi_body(), clean up texi_enum()'s > hack to add empty documentation for undocumented enum values: add an > ArgSection instead of ''. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > scripts/qapi.py | 5 +++-- > scripts/qapi2texi.py | 4 ++-- > 2 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/scripts/qapi.py b/scripts/qapi.py > index eec7bfb..e6d023f 100644 > --- a/scripts/qapi.py > +++ b/scripts/qapi.py > @@ -107,6 +107,7 @@ class QAPIDoc(object): > self.name = name > # the list of lines for this section > self.content = [] > + self.optional = False > > def append(self, line): > self.content.append(line) > @@ -978,15 +979,15 @@ def check_definition_doc(doc, expr, info): > desc = doc.args.get(arg) > if not desc: > continue > + desc.optional = opt > desc_opt = "#optional" in str(desc) > if desc_opt and not opt: > raise QAPISemError(info, "Description has #optional, " > "but the declaration doesn't") > if not desc_opt and opt: > - # silently fix the doc > # TODO either fix the schema and make this an error, > # or drop #optional entirely > - desc.append("#optional") > + pass > > doc_args = set(doc.args.keys()) > args = set([name.strip('*') for name in args]) > diff --git a/scripts/qapi2texi.py b/scripts/qapi2texi.py > index 0f3e573..0aaf45c 100755 > --- a/scripts/qapi2texi.py > +++ b/scripts/qapi2texi.py > @@ -136,7 +136,7 @@ def texi_body(doc): > for arg, section in doc.args.iteritems(): > desc = str(section) > opt = '' > - if "#optional" in desc: > + if section.optional: > desc = re.sub(r'^ *#optional *\n?|\n? *#optional > *$|#optional', > '', desc) > opt = ' (optional)' > @@ -185,7 +185,7 @@ def texi_enum(expr, doc): > """Format an enum to texi""" > for i in expr['data']: > if i not in doc.args: > - doc.args[i] = '' > + doc.args[i] = qapi.QAPIDoc.ArgSection(i) body = texi_body(doc) > return TYPE_FMT(type="Enum", > name=doc.symbol, > -- > 2.7.4 > > > -- Marc-André Lureau