On Fri, Mar 7, 2025 at 7:13 AM Markus Armbruster <arm...@redhat.com> wrote:
> John Snow <js...@redhat.com> writes: > > > This method adds the options/preamble to each definition block. Notably, > > :since: and :ifcond: are added, as are any "special features" such as > > :deprecated: and :unstable:. > > > > Signed-off-by: John Snow <js...@redhat.com> > > --- > > docs/sphinx/qapidoc.py | 41 ++++++++++++++++++++++++++++++++++++++--- > > 1 file changed, 38 insertions(+), 3 deletions(-) > > > > diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py > > index cf5dbb0133d..d8bf0073dfa 100644 > > --- a/docs/sphinx/qapidoc.py > > +++ b/docs/sphinx/qapidoc.py > > @@ -37,7 +37,12 @@ > > from docutils.parsers.rst import Directive, directives > > from docutils.statemachine import StringList > > from qapi.error import QAPIError > > -from qapi.schema import QAPISchema, QAPISchemaVisitor > > +from qapi.parser import QAPIDoc > > +from qapi.schema import ( > > + QAPISchema, > > + QAPISchemaDefinition, > > + QAPISchemaVisitor, > > +) > > from qapi.source import QAPISourceInfo > > > > from qapidoc_legacy import QAPISchemaGenRSTVisitor # type: ignore > > @@ -56,8 +61,6 @@ > > Sequence, > > ) > > > > - from qapi.parser import QAPIDoc > > - > > Some kind of accident? > > > from sphinx.application import Sphinx > > from sphinx.util.typing import ExtensionMetadata > > > > @@ -125,6 +128,38 @@ def ensure_blank_line(self) -> None: > > # +2: correct for zero/one index, then increment by one. > > self.add_line_raw("", fname, line + 2) > > > > + # Transmogrification helpers > > + > > + def preamble(self, ent: QAPISchemaDefinition) -> None: > > + """ > > + Generate option lines for qapi entity directives. > > + """ > > + if ent.doc and ent.doc.since: > > + assert ent.doc.since.kind == QAPIDoc.Kind.SINCE > > + # Generated from the entity's docblock; info location is > exact. > > + self.add_line(f":since: {ent.doc.since.text}", > ent.doc.since.info) > > Break the line afte the comma? > Is this an 80col vs 79col thing? I'll tighten it up. > > > + > > + if ent.ifcond.is_present(): > > + doc = ent.ifcond.docgen() > > + assert ent.info > > + # Generated from entity definition; info location is > approximate. > > + self.add_line(f":ifcond: {doc}", ent.info) > > + > > + # Hoist special features such as :deprecated: and :unstable: > > + # into the options block for the entity. If, in the future, new > > + # special features are added, qapi-domain will chirp about > > + # unrecognized options and fail until they are handled in > > + # qapi-domain. > > + for feat in ent.features: > > + if feat.is_special(): > > + # FIXME: handle ifcond if present. How to display that > > + # information is TBD. > > Is the FIXME worth mentioning in the commit message? > Yes, and yes to all subsequent asks. > > > + # Generated from entity def; info location is > approximate. > > + assert feat.info > > + self.add_line(f":{feat.name}:", feat.info) > > + > > + self.ensure_blank_line() > > + > > # Transmogrification core methods > > > > def visit_module(self, path: str) -> None: > >