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.

Reply via email to