On Sun, Mar 9, 2025 at 12:38 AM Markus Armbruster <arm...@redhat.com> wrote:
> John Snow <js...@redhat.com> writes: > > > On Fri, Mar 7, 2025 at 7:00 AM Markus Armbruster <arm...@redhat.com> > wrote: > > > >> John Snow <js...@redhat.com> writes: > >> > >> > Now that the legacy code is factored out, fix up the typing on the > >> > remaining code in qapidoc.py. Add a type ignore to qapi_legacy.py to > >> > prevent the errors there from bleeding out into qapidoc.py. > >> > > >> > Signed-off-by: John Snow <js...@redhat.com> > >> > --- > >> > docs/sphinx/qapidoc.py | 40 > ++++++++++++++++++++++------------- > >> > docs/sphinx/qapidoc_legacy.py | 1 + > >> > 2 files changed, 26 insertions(+), 15 deletions(-) > >> > > >> > diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py > >> > index f4abf42e7bf..5246832b68c 100644 > >> > --- a/docs/sphinx/qapidoc.py > >> > +++ b/docs/sphinx/qapidoc.py > >> > @@ -24,17 +24,18 @@ > >> > https://www.sphinx-doc.org/en/master/development/index.html > >> > """ > >> > > >> > +from __future__ import annotations > >> > + > >> > import os > >> > import sys > >> > -from typing import List > >> > +from typing import TYPE_CHECKING > >> > > >> > from docutils import nodes > >> > from docutils.parsers.rst import Directive, directives > >> > from qapi.error import QAPIError > >> > -from qapi.gen import QAPISchemaVisitor > >> > -from qapi.schema import QAPISchema > >> > +from qapi.schema import QAPISchema, QAPISchemaVisitor > >> > > >> > -from qapidoc_legacy import QAPISchemaGenRSTVisitor > >> > +from qapidoc_legacy import QAPISchemaGenRSTVisitor # type: ignore > >> > from sphinx import addnodes > >> > from sphinx.directives.code import CodeBlock > >> > from sphinx.errors import ExtensionError > >> > @@ -42,6 +43,15 @@ > >> > from sphinx.util.nodes import nested_parse_with_titles > >> > > >> > > >> > +if TYPE_CHECKING: > >> > + from typing import Any, List, Sequence > >> > + > >> > + from docutils.statemachine import StringList > >> > + > >> > + from sphinx.application import Sphinx > >> > + from sphinx.util.typing import ExtensionMetadata > >> > >> Can you briefly explain why this needs to be conditional? > >> > > > > No requisite, but if they aren't used outside of type hints, they don't > > actually need to be imported at runtime (when we use from __future__ > import > > annotations). Improves startup speed slightly and potentially makes the > > plugin less porcelain at runtime. > > Should we do that for all typing-only imports everywhere? > Maybe! It's probably not too important, I just noticed Sphinx internals doing it a lot and started following along because it seemed like a good idea.