diff --git a/doc/development/tutorials/examples/autodoc_intenum.py b/doc/development/tutorials/examples/autodoc_intenum.py index 45205b6b4..75fa20452 100644 --- a/doc/development/tutorials/examples/autodoc_intenum.py +++ b/doc/development/tutorials/examples/autodoc_intenum.py @@ -3,12 +3,13 @@ from __future__ import annotations from enum import IntEnum from typing import TYPE_CHECKING, Any -from sphinx.application import Sphinx from sphinx.ext.autodoc import ClassDocumenter, bool_option if TYPE_CHECKING: from docutils.statemachine import StringList + from sphinx.application import Sphinx + class IntEnumDocumenter(ClassDocumenter): objtype = 'intenum' diff --git a/pyproject.toml b/pyproject.toml index af2828bb3..73fe700cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -278,8 +278,6 @@ ignore = [ "SLF001", # private member accessed # flake8-print "T201", # print found - # flake8-type-checking - "TCH001", # move application import into a type-checking block # flake8-todo "TD001", # invalid TODO tag "TD002", # missing author in TODO diff --git a/sphinx/application.py b/sphinx/application.py index 60dba6c66..d14335d62 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -23,18 +23,13 @@ from pygments.lexer import Lexer # NoQA: TCH002 import sphinx from sphinx import locale, package_dir from sphinx.config import Config -from sphinx.domains import Domain, Index from sphinx.environment import BuildEnvironment -from sphinx.environment.collectors import EnvironmentCollector from sphinx.errors import ApplicationError, ConfigError, VersionRequirementError from sphinx.events import EventManager -from sphinx.extension import Extension from sphinx.highlighting import lexer_classes from sphinx.locale import __ from sphinx.project import Project from sphinx.registry import SphinxComponentRegistry -from sphinx.roles import XRefRole -from sphinx.theming import Theme from sphinx.util import docutils, logging from sphinx.util.build_phase import BuildPhase from sphinx.util.console import bold # type: ignore[attr-defined] @@ -43,7 +38,6 @@ from sphinx.util.i18n import CatalogRepository from sphinx.util.logging import prefixed_warnings from sphinx.util.osutil import ensuredir, relpath from sphinx.util.tags import Tags -from sphinx.util.typing import RoleFunction, TitleGetter if TYPE_CHECKING: from docutils import nodes @@ -51,6 +45,12 @@ if TYPE_CHECKING: from docutils.parsers import Parser from sphinx.builders import Builder + from sphinx.domains import Domain, Index + from sphinx.environment.collectors import EnvironmentCollector + from sphinx.extension import Extension + from sphinx.roles import XRefRole + from sphinx.theming import Theme + from sphinx.util.typing import RoleFunction, TitleGetter builtin_extensions: tuple[str, ...] = ( diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index c16c3f102..813c76c21 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -11,11 +11,9 @@ from typing import TYPE_CHECKING, Any from docutils import nodes from docutils.utils import DependencyList -from sphinx.config import Config from sphinx.environment import CONFIG_CHANGED_REASON, CONFIG_OK, BuildEnvironment from sphinx.environment.adapters.asset import ImageAdapter from sphinx.errors import SphinxError -from sphinx.events import EventManager from sphinx.locale import __ from sphinx.util import UnicodeDecodeErrorHandler, get_filetype, import_object, logging, rst from sphinx.util.build_phase import BuildPhase @@ -25,8 +23,6 @@ from sphinx.util.docutils import sphinx_domains from sphinx.util.i18n import CatalogInfo, CatalogRepository, docname_to_domain from sphinx.util.osutil import SEP, ensuredir, relative_uri, relpath from sphinx.util.parallel import ParallelTasks, SerialTasks, make_chunks, parallel_available -from sphinx.util.tags import Tags -from sphinx.util.typing import NoneType # side effect: registers roles and directives from sphinx import directives # noqa: F401 isort:skip @@ -38,6 +34,10 @@ if TYPE_CHECKING: from docutils.nodes import Node from sphinx.application import Sphinx + from sphinx.config import Config + from sphinx.events import EventManager + from sphinx.util.tags import Tags + from sphinx.util.typing import NoneType logger = logging.getLogger(__name__) diff --git a/sphinx/builders/changes.py b/sphinx/builders/changes.py index 217ada860..3e24e7dc6 100644 --- a/sphinx/builders/changes.py +++ b/sphinx/builders/changes.py @@ -4,10 +4,9 @@ from __future__ import annotations import html from os import path -from typing import Any, cast +from typing import TYPE_CHECKING, Any, cast from sphinx import package_dir -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.domains.changeset import ChangeSetDomain from sphinx.locale import _, __ @@ -17,6 +16,9 @@ from sphinx.util.console import bold # type: ignore[attr-defined] from sphinx.util.fileutil import copy_asset_file from sphinx.util.osutil import ensuredir, os_path +if TYPE_CHECKING: + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/dirhtml.py b/sphinx/builders/dirhtml.py index d1c10dcef..9683ee6f0 100644 --- a/sphinx/builders/dirhtml.py +++ b/sphinx/builders/dirhtml.py @@ -3,13 +3,15 @@ from __future__ import annotations from os import path -from typing import Any +from typing import TYPE_CHECKING, Any -from sphinx.application import Sphinx from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.util import logging from sphinx.util.osutil import SEP, os_path +if TYPE_CHECKING: + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/dummy.py b/sphinx/builders/dummy.py index 0da346886..f025311e5 100644 --- a/sphinx/builders/dummy.py +++ b/sphinx/builders/dummy.py @@ -4,13 +4,14 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.locale import __ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + class DummyBuilder(Builder): name = 'dummy' diff --git a/sphinx/builders/epub3.py b/sphinx/builders/epub3.py index d93d79d66..e9e66b38b 100644 --- a/sphinx/builders/epub3.py +++ b/sphinx/builders/epub3.py @@ -10,10 +10,9 @@ import os import re import time from os import path -from typing import Any, NamedTuple +from typing import TYPE_CHECKING, Any, NamedTuple from sphinx import package_dir -from sphinx.application import Sphinx from sphinx.builders import _epub_base from sphinx.config import ENUM, Config from sphinx.locale import __ @@ -21,6 +20,9 @@ from sphinx.util import logging from sphinx.util.fileutil import copy_asset_file from sphinx.util.osutil import make_filename +if TYPE_CHECKING: + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py index 6a5f05932..0b2bede6f 100644 --- a/sphinx/builders/gettext.py +++ b/sphinx/builders/gettext.py @@ -12,7 +12,6 @@ from uuid import uuid4 from docutils import nodes from sphinx import addnodes, package_dir -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.errors import ThemeError from sphinx.locale import __ @@ -32,6 +31,8 @@ if TYPE_CHECKING: from docutils.nodes import Element + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/html/__init__.py b/sphinx/builders/html/__init__.py index 90c4260b5..aa809a013 100644 --- a/sphinx/builders/html/__init__.py +++ b/sphinx/builders/html/__init__.py @@ -23,13 +23,11 @@ from docutils.utils import relative_path from sphinx import __display_version__, package_dir from sphinx import version_info as sphinx_version -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.builders.html._assets import _CascadingStyleSheet, _file_checksum, _JavaScript from sphinx.config import ENUM, Config from sphinx.deprecation import _deprecation_warning from sphinx.domains import Domain, Index, IndexEntry -from sphinx.environment import BuildEnvironment from sphinx.environment.adapters.asset import ImageAdapter from sphinx.environment.adapters.indexentries import IndexEntries from sphinx.environment.adapters.toctree import document_toc, global_toctree_for_doc @@ -46,7 +44,6 @@ from sphinx.util.i18n import format_date from sphinx.util.inventory import InventoryFile from sphinx.util.matching import DOTFILES, Matcher, patmatch from sphinx.util.osutil import SEP, copyfile, ensuredir, os_path, relative_uri -from sphinx.util.tags import Tags from sphinx.writers.html import HTMLWriter from sphinx.writers.html5 import HTML5Translator @@ -55,6 +52,10 @@ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + from sphinx.util.tags import Tags + #: the filename for the inventory of objects INVENTORY_FILENAME = 'objects.inv' diff --git a/sphinx/builders/html/transforms.py b/sphinx/builders/html/transforms.py index f7edecde4..18a8d380b 100644 --- a/sphinx/builders/html/transforms.py +++ b/sphinx/builders/html/transforms.py @@ -3,14 +3,16 @@ from __future__ import annotations import re -from typing import Any +from typing import TYPE_CHECKING, Any from docutils import nodes -from sphinx.application import Sphinx from sphinx.transforms.post_transforms import SphinxPostTransform from sphinx.util.nodes import NodeMatcher +if TYPE_CHECKING: + from sphinx.application import Sphinx + class KeyboardTransform(SphinxPostTransform): """Transform :kbd: role to more detailed form. diff --git a/sphinx/builders/latex/__init__.py b/sphinx/builders/latex/__init__.py index c4dcb4c1d..3ece571c0 100644 --- a/sphinx/builders/latex/__init__.py +++ b/sphinx/builders/latex/__init__.py @@ -11,7 +11,6 @@ from docutils.frontend import OptionParser import sphinx.builders.latex.nodes # noqa: F401,E501 # Workaround: import this before writer to avoid ImportError from sphinx import addnodes, highlighting, package_dir -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.builders.latex.constants import ADDITIONAL_SETTINGS, DEFAULT_SETTINGS, SHORTHANDOFF from sphinx.builders.latex.theming import Theme, ThemeFactory @@ -39,6 +38,8 @@ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + XINDY_LANG_OPTIONS = { # language codes from docutils.writers.latex2e.Babel # ! xindy language names may differ from those in use by LaTeX/babel diff --git a/sphinx/builders/latex/theming.py b/sphinx/builders/latex/theming.py index 64046b5ab..21b49e8ab 100644 --- a/sphinx/builders/latex/theming.py +++ b/sphinx/builders/latex/theming.py @@ -4,13 +4,16 @@ from __future__ import annotations import configparser from os import path +from typing import TYPE_CHECKING -from sphinx.application import Sphinx -from sphinx.config import Config from sphinx.errors import ThemeError from sphinx.locale import __ from sphinx.util import logging +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.config import Config + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/latex/transforms.py b/sphinx/builders/latex/transforms.py index 070132618..ca1e4f3a8 100644 --- a/sphinx/builders/latex/transforms.py +++ b/sphinx/builders/latex/transforms.py @@ -8,7 +8,6 @@ from docutils import nodes from docutils.transforms.references import Substitutions from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.builders.latex.nodes import ( captioned_literal_block, footnotemark, @@ -25,6 +24,8 @@ from sphinx.util.nodes import NodeMatcher if TYPE_CHECKING: from docutils.nodes import Element, Node + from sphinx.application import Sphinx + URI_SCHEMES = ('mailto:', 'http:', 'https:', 'ftp:') diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py index fb8ce5ed1..2d35d2047 100644 --- a/sphinx/builders/manpage.py +++ b/sphinx/builders/manpage.py @@ -4,15 +4,13 @@ from __future__ import annotations import warnings from os import path -from typing import Any +from typing import TYPE_CHECKING, Any from docutils.frontend import OptionParser from docutils.io import FileOutput from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.builders import Builder -from sphinx.config import Config from sphinx.locale import __ from sphinx.util import logging from sphinx.util.console import darkgreen # type: ignore[attr-defined] @@ -21,6 +19,10 @@ from sphinx.util.nodes import inline_all_toctrees from sphinx.util.osutil import ensuredir, make_filename_from_project from sphinx.writers.manpage import ManualPageTranslator, ManualPageWriter +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.config import Config + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/singlehtml.py b/sphinx/builders/singlehtml.py index 1925af7ef..9ad26ebd5 100644 --- a/sphinx/builders/singlehtml.py +++ b/sphinx/builders/singlehtml.py @@ -7,7 +7,6 @@ from typing import TYPE_CHECKING, Any from docutils import nodes -from sphinx.application import Sphinx from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.environment.adapters.toctree import global_toctree_for_doc from sphinx.locale import __ @@ -19,6 +18,8 @@ from sphinx.util.nodes import inline_all_toctrees if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/texinfo.py b/sphinx/builders/texinfo.py index 22332e1db..441b598ba 100644 --- a/sphinx/builders/texinfo.py +++ b/sphinx/builders/texinfo.py @@ -12,9 +12,7 @@ from docutils.frontend import OptionParser from docutils.io import FileOutput from sphinx import addnodes, package_dir -from sphinx.application import Sphinx from sphinx.builders import Builder -from sphinx.config import Config from sphinx.environment.adapters.asset import ImageAdapter from sphinx.errors import NoUri from sphinx.locale import _, __ @@ -32,6 +30,9 @@ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + from sphinx.config import Config + logger = logging.getLogger(__name__) template_dir = os.path.join(package_dir, 'templates', 'texinfo') diff --git a/sphinx/builders/text.py b/sphinx/builders/text.py index c81eaacbd..43a8d1f71 100644 --- a/sphinx/builders/text.py +++ b/sphinx/builders/text.py @@ -7,7 +7,6 @@ from typing import TYPE_CHECKING, Any from docutils.io import StringOutput -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.locale import __ from sphinx.util import logging @@ -19,6 +18,8 @@ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/builders/xml.py b/sphinx/builders/xml.py index f834a6c08..5b8853147 100644 --- a/sphinx/builders/xml.py +++ b/sphinx/builders/xml.py @@ -9,7 +9,6 @@ from docutils import nodes from docutils.io import StringOutput from docutils.writers.docutils_xml import XMLTranslator -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.locale import __ from sphinx.util import logging @@ -21,6 +20,8 @@ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/config.py b/sphinx/config.py index 40fa16052..598ec6443 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -12,7 +12,6 @@ from sphinx.errors import ConfigError, ExtensionError from sphinx.locale import _, __ from sphinx.util import logging from sphinx.util.osutil import fs_encoding -from sphinx.util.tags import Tags from sphinx.util.typing import NoneType try: @@ -26,6 +25,7 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.environment import BuildEnvironment + from sphinx.util.tags import Tags logger = logging.getLogger(__name__) diff --git a/sphinx/directives/__init__.py b/sphinx/directives/__init__.py index 3988facc7..d4cf28eba 100644 --- a/sphinx/directives/__init__.py +++ b/sphinx/directives/__init__.py @@ -9,12 +9,12 @@ from docutils import nodes from docutils.parsers.rst import directives, roles from sphinx import addnodes -from sphinx.addnodes import desc_signature +from sphinx.addnodes import desc_signature # NoQA: TCH001 from sphinx.util import docutils from sphinx.util.docfields import DocFieldTransformer, Field, TypedField from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import nested_parse_with_titles -from sphinx.util.typing import OptionSpec +from sphinx.util.typing import OptionSpec # NoQA: TCH001 if TYPE_CHECKING: from docutils.nodes import Node diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index 389bafad5..8de166137 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -10,17 +10,17 @@ from docutils.parsers.rst import directives from docutils.statemachine import StringList from sphinx import addnodes -from sphinx.config import Config from sphinx.directives import optional_int from sphinx.locale import __ from sphinx.util import logging, parselinenos from sphinx.util.docutils import SphinxDirective -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from docutils.nodes import Element, Node from sphinx.application import Sphinx + from sphinx.config import Config + from sphinx.util.typing import OptionSpec logger = logging.getLogger(__name__) diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index bbe2149e3..19f7c0a8d 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -17,12 +17,12 @@ from sphinx.util import docname_join, logging, url_re from sphinx.util.docutils import SphinxDirective from sphinx.util.matching import Matcher, patfilter from sphinx.util.nodes import explicit_title_re -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from docutils.nodes import Element, Node from sphinx.application import Sphinx + from sphinx.util.typing import OptionSpec glob_re = re.compile(r'.*[*?\[].*') diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py index 3fd5524b3..965b385b7 100644 --- a/sphinx/directives/patches.py +++ b/sphinx/directives/patches.py @@ -18,10 +18,10 @@ from sphinx.util import logging from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import set_source_info from sphinx.util.osutil import SEP, os_path, relpath -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from sphinx.application import Sphinx + from sphinx.util.typing import OptionSpec logger = logging.getLogger(__name__) diff --git a/sphinx/domains/__init__.py b/sphinx/domains/__init__.py index 87630e271..7c1122038 100644 --- a/sphinx/domains/__init__.py +++ b/sphinx/domains/__init__.py @@ -12,11 +12,8 @@ from typing import TYPE_CHECKING, Any, Callable, NamedTuple, Optional, cast from docutils.nodes import Element, Node, system_message -from sphinx.addnodes import pending_xref from sphinx.errors import SphinxError from sphinx.locale import _ -from sphinx.roles import XRefRole -from sphinx.util.typing import RoleFunction if TYPE_CHECKING: from collections.abc import Iterable, Sequence @@ -25,8 +22,11 @@ if TYPE_CHECKING: from docutils.parsers.rst import Directive from docutils.parsers.rst.states import Inliner + from sphinx.addnodes import pending_xref from sphinx.builders import Builder from sphinx.environment import BuildEnvironment + from sphinx.roles import XRefRole + from sphinx.util.typing import RoleFunction class ObjType: diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py index 247fe35c2..ea5a1a5db 100644 --- a/sphinx/domains/c.py +++ b/sphinx/domains/c.py @@ -9,12 +9,8 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx import addnodes -from sphinx.addnodes import pending_xref -from sphinx.application import Sphinx -from sphinx.builders import Builder from sphinx.directives import ObjectDescription from sphinx.domains import Domain, ObjType -from sphinx.environment import BuildEnvironment from sphinx.locale import _, __ from sphinx.roles import SphinxRole, XRefRole from sphinx.transforms import SphinxTransform @@ -44,13 +40,18 @@ from sphinx.util.cfamily import ( from sphinx.util.docfields import Field, GroupedField, TypedField from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import make_refnode -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from collections.abc import Generator, Iterator from docutils.nodes import Element, Node, TextElement, system_message + from sphinx.addnodes import pending_xref + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec + logger = logging.getLogger(__name__) T = TypeVar('T') diff --git a/sphinx/domains/changeset.py b/sphinx/domains/changeset.py index 136edd932..7cfe3829e 100644 --- a/sphinx/domains/changeset.py +++ b/sphinx/domains/changeset.py @@ -10,13 +10,13 @@ from sphinx import addnodes from sphinx.domains import Domain from sphinx.locale import _ from sphinx.util.docutils import SphinxDirective -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from docutils.nodes import Node from sphinx.application import Sphinx from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec versionlabels = { diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 5fb13c17d..918b580d1 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -9,12 +9,8 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx import addnodes -from sphinx.addnodes import desc_signature, pending_xref -from sphinx.application import Sphinx -from sphinx.builders import Builder from sphinx.directives import ObjectDescription from sphinx.domains import Domain, ObjType -from sphinx.environment import BuildEnvironment from sphinx.errors import NoUri from sphinx.locale import _, __ from sphinx.roles import SphinxRole, XRefRole @@ -45,13 +41,18 @@ from sphinx.util.cfamily import ( from sphinx.util.docfields import Field, GroupedField from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import make_refnode -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from collections.abc import Generator, Iterator from docutils.nodes import Element, Node, TextElement, system_message + from sphinx.addnodes import desc_signature, pending_xref + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec + logger = logging.getLogger(__name__) T = TypeVar('T') diff --git a/sphinx/domains/index.py b/sphinx/domains/index.py index 2c6b30639..c084516a6 100644 --- a/sphinx/domains/index.py +++ b/sphinx/domains/index.py @@ -9,12 +9,10 @@ from docutils.parsers.rst import directives from sphinx import addnodes from sphinx.domains import Domain -from sphinx.environment import BuildEnvironment from sphinx.util import logging from sphinx.util.docutils import ReferenceRole, SphinxDirective from sphinx.util.index_entries import split_index_msg from sphinx.util.nodes import process_index_entry -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from collections.abc import Iterable @@ -22,6 +20,8 @@ if TYPE_CHECKING: from docutils.nodes import Node, system_message from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec logger = logging.getLogger(__name__) diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py index 2f7cafa12..0b32e1cef 100644 --- a/sphinx/domains/javascript.py +++ b/sphinx/domains/javascript.py @@ -8,26 +8,27 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx import addnodes -from sphinx.addnodes import desc_signature, pending_xref -from sphinx.application import Sphinx -from sphinx.builders import Builder from sphinx.directives import ObjectDescription from sphinx.domains import Domain, ObjType from sphinx.domains.python import _pseudo_parse_arglist -from sphinx.environment import BuildEnvironment from sphinx.locale import _, __ from sphinx.roles import XRefRole from sphinx.util import logging from sphinx.util.docfields import Field, GroupedField, TypedField from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import make_id, make_refnode, nested_parse_with_titles -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from collections.abc import Iterator from docutils.nodes import Element, Node + from sphinx.addnodes import desc_signature, pending_xref + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec + logger = logging.getLogger(__name__) diff --git a/sphinx/domains/math.py b/sphinx/domains/math.py index 79cbb6f64..d283d3f80 100644 --- a/sphinx/domains/math.py +++ b/sphinx/domains/math.py @@ -7,9 +7,7 @@ from typing import TYPE_CHECKING, Any from docutils import nodes from docutils.nodes import Element, Node, make_id, system_message -from sphinx.addnodes import pending_xref from sphinx.domains import Domain -from sphinx.environment import BuildEnvironment from sphinx.locale import __ from sphinx.roles import XRefRole from sphinx.util import logging @@ -18,8 +16,10 @@ from sphinx.util.nodes import make_refnode if TYPE_CHECKING: from collections.abc import Iterable + from sphinx.addnodes import pending_xref from sphinx.application import Sphinx from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment logger = logging.getLogger(__name__) diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index b154b5774..618e05d81 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -16,11 +16,8 @@ from docutils.parsers.rst import directives from sphinx import addnodes from sphinx.addnodes import desc_signature, pending_xref, pending_xref_condition -from sphinx.application import Sphinx -from sphinx.builders import Builder from sphinx.directives import ObjectDescription from sphinx.domains import Domain, Index, IndexEntry, ObjType -from sphinx.environment import BuildEnvironment from sphinx.locale import _, __ from sphinx.pycode.parser import Token, TokenProcessor from sphinx.roles import XRefRole @@ -34,7 +31,6 @@ from sphinx.util.nodes import ( make_refnode, nested_parse_with_titles, ) -from sphinx.util.typing import OptionSpec, TextlikeNode if TYPE_CHECKING: from collections.abc import Iterable, Iterator @@ -42,6 +38,11 @@ if TYPE_CHECKING: from docutils.nodes import Element, Node from docutils.parsers.rst.states import Inliner + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec, TextlikeNode + logger = logging.getLogger(__name__) diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py index 5e9212856..0072f7acb 100644 --- a/sphinx/domains/rst.py +++ b/sphinx/domains/rst.py @@ -8,23 +8,24 @@ from typing import TYPE_CHECKING, Any, cast from docutils.parsers.rst import directives from sphinx import addnodes -from sphinx.addnodes import desc_signature, pending_xref -from sphinx.application import Sphinx -from sphinx.builders import Builder from sphinx.directives import ObjectDescription from sphinx.domains import Domain, ObjType -from sphinx.environment import BuildEnvironment from sphinx.locale import _, __ from sphinx.roles import XRefRole from sphinx.util import logging from sphinx.util.nodes import make_id, make_refnode -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from collections.abc import Iterator from docutils.nodes import Element + from sphinx.addnodes import desc_signature, pending_xref + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec + logger = logging.getLogger(__name__) dir_sig_re = re.compile(r'\.\. (.+?)::(.*)$') diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py index 4a80300ac..b3082a734 100644 --- a/sphinx/domains/std.py +++ b/sphinx/domains/std.py @@ -20,7 +20,6 @@ from sphinx.roles import EmphasizedLiteral, XRefRole from sphinx.util import docname_join, logging, ws_re from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import clean_astext, make_id, make_refnode -from sphinx.util.typing import OptionSpec, RoleFunction if TYPE_CHECKING: from collections.abc import Iterable, Iterator @@ -28,6 +27,7 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec, RoleFunction logger = logging.getLogger(__name__) diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index cf7148219..cf698ea6d 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -12,13 +12,9 @@ from os import path from typing import TYPE_CHECKING, Any, Callable from sphinx import addnodes -from sphinx.config import Config -from sphinx.domains import Domain from sphinx.environment.adapters.toctree import _resolve_toctree from sphinx.errors import BuildEnvironmentError, DocumentError, ExtensionError, SphinxError -from sphinx.events import EventManager from sphinx.locale import __ -from sphinx.project import Project from sphinx.transforms import SphinxTransformer from sphinx.util import DownloadFiles, FilenameUniqDict, logging from sphinx.util.docutils import LoggingReporter @@ -35,6 +31,10 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.builders import Builder + from sphinx.config import Config + from sphinx.domains import Domain + from sphinx.events import EventManager + from sphinx.project import Project logger = logging.getLogger(__name__) diff --git a/sphinx/environment/adapters/indexentries.py b/sphinx/environment/adapters/indexentries.py index 1cbf4a2d2..6fdbea6fa 100644 --- a/sphinx/environment/adapters/indexentries.py +++ b/sphinx/environment/adapters/indexentries.py @@ -5,15 +5,17 @@ from __future__ import annotations import re import unicodedata from itertools import groupby -from typing import Any, Literal +from typing import TYPE_CHECKING, Any, Literal -from sphinx.builders import Builder -from sphinx.environment import BuildEnvironment from sphinx.errors import NoUri from sphinx.locale import _, __ from sphinx.util import logging from sphinx.util.index_entries import _split_into +if TYPE_CHECKING: + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + logger = logging.getLogger(__name__) diff --git a/sphinx/environment/collectors/__init__.py b/sphinx/environment/collectors/__init__.py index 4d2b36f90..c7e069a36 100644 --- a/sphinx/environment/collectors/__init__.py +++ b/sphinx/environment/collectors/__init__.py @@ -4,12 +4,11 @@ from __future__ import annotations from typing import TYPE_CHECKING -from sphinx.environment import BuildEnvironment - if TYPE_CHECKING: from docutils import nodes from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment class EnvironmentCollector: diff --git a/sphinx/environment/collectors/asset.py b/sphinx/environment/collectors/asset.py index 7da0e8721..c2066f412 100644 --- a/sphinx/environment/collectors/asset.py +++ b/sphinx/environment/collectors/asset.py @@ -11,8 +11,6 @@ from docutils import nodes from docutils.utils import relative_path from sphinx import addnodes -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment from sphinx.environment.collectors import EnvironmentCollector from sphinx.locale import __ from sphinx.util import logging @@ -22,6 +20,9 @@ from sphinx.util.images import guess_mimetype if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + logger = logging.getLogger(__name__) diff --git a/sphinx/environment/collectors/dependencies.py b/sphinx/environment/collectors/dependencies.py index b1633d446..df1f0c1a3 100644 --- a/sphinx/environment/collectors/dependencies.py +++ b/sphinx/environment/collectors/dependencies.py @@ -8,14 +8,15 @@ from typing import TYPE_CHECKING, Any from docutils.utils import relative_path -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment from sphinx.environment.collectors import EnvironmentCollector from sphinx.util.osutil import fs_encoding if TYPE_CHECKING: from docutils import nodes + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + class DependenciesCollector(EnvironmentCollector): """dependencies collector for sphinx.environment.""" diff --git a/sphinx/environment/collectors/metadata.py b/sphinx/environment/collectors/metadata.py index 15a69ce1c..5f737a944 100644 --- a/sphinx/environment/collectors/metadata.py +++ b/sphinx/environment/collectors/metadata.py @@ -2,14 +2,16 @@ from __future__ import annotations -from typing import Any, cast +from typing import TYPE_CHECKING, Any, cast from docutils import nodes -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment from sphinx.environment.collectors import EnvironmentCollector +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + class MetadataCollector(EnvironmentCollector): """metadata collector for sphinx.environment.""" diff --git a/sphinx/environment/collectors/title.py b/sphinx/environment/collectors/title.py index 45dfbd095..014d77aea 100644 --- a/sphinx/environment/collectors/title.py +++ b/sphinx/environment/collectors/title.py @@ -2,15 +2,17 @@ from __future__ import annotations -from typing import Any +from typing import TYPE_CHECKING, Any from docutils import nodes -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment from sphinx.environment.collectors import EnvironmentCollector from sphinx.transforms import SphinxContentsFilter +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + class TitleCollector(EnvironmentCollector): """title collector for sphinx.environment.""" diff --git a/sphinx/environment/collectors/toctree.py b/sphinx/environment/collectors/toctree.py index 34a361370..772591e97 100644 --- a/sphinx/environment/collectors/toctree.py +++ b/sphinx/environment/collectors/toctree.py @@ -7,8 +7,6 @@ from typing import TYPE_CHECKING, Any, TypeVar, cast from docutils import nodes from sphinx import addnodes -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment from sphinx.environment.adapters.toctree import note_toctree from sphinx.environment.collectors import EnvironmentCollector from sphinx.locale import __ @@ -20,6 +18,9 @@ if TYPE_CHECKING: from docutils.nodes import Element, Node + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + N = TypeVar('N') logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index d616f9e0f..d523a2bdb 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -16,10 +16,8 @@ from typing import TYPE_CHECKING, Any, Callable, TypeVar from docutils.statemachine import StringList import sphinx -from sphinx.application import Sphinx from sphinx.config import ENUM, Config from sphinx.deprecation import RemovedInSphinx80Warning -from sphinx.environment import BuildEnvironment from sphinx.ext.autodoc.importer import get_class_members, import_module, import_object from sphinx.ext.autodoc.mock import ismock, mock, undecorate from sphinx.locale import _, __ @@ -39,6 +37,8 @@ if TYPE_CHECKING: from collections.abc import Iterator, Sequence from types import ModuleType + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment from sphinx.ext.autodoc.directive import DocumenterBridge logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autodoc/directive.py b/sphinx/ext/autodoc/directive.py index f9099105c..64cbc9b52 100644 --- a/sphinx/ext/autodoc/directive.py +++ b/sphinx/ext/autodoc/directive.py @@ -6,8 +6,6 @@ from docutils import nodes from docutils.statemachine import StringList from docutils.utils import Reporter, assemble_option_dict -from sphinx.config import Config -from sphinx.environment import BuildEnvironment from sphinx.ext.autodoc import Documenter, Options from sphinx.util import logging from sphinx.util.docutils import SphinxDirective, switch_source_input @@ -17,6 +15,9 @@ if TYPE_CHECKING: from docutils.nodes import Element, Node from docutils.parsers.rst.states import RSTState + from sphinx.config import Config + from sphinx.environment import BuildEnvironment + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autodoc/preserve_defaults.py b/sphinx/ext/autodoc/preserve_defaults.py index 754c71efb..e40ae0195 100644 --- a/sphinx/ext/autodoc/preserve_defaults.py +++ b/sphinx/ext/autodoc/preserve_defaults.py @@ -8,14 +8,16 @@ from __future__ import annotations import ast import inspect -from typing import Any +from typing import TYPE_CHECKING, Any import sphinx -from sphinx.application import Sphinx from sphinx.locale import __ from sphinx.pycode.ast import unparse as ast_unparse from sphinx.util import logging +if TYPE_CHECKING: + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autodoc/type_comment.py b/sphinx/ext/autodoc/type_comment.py index b29a04d51..e2c9ae249 100644 --- a/sphinx/ext/autodoc/type_comment.py +++ b/sphinx/ext/autodoc/type_comment.py @@ -7,7 +7,6 @@ from inspect import Parameter, Signature, getsource from typing import TYPE_CHECKING, Any, cast import sphinx -from sphinx.application import Sphinx from sphinx.locale import __ from sphinx.pycode.ast import unparse as ast_unparse from sphinx.util import inspect, logging @@ -15,6 +14,8 @@ from sphinx.util import inspect, logging if TYPE_CHECKING: from collections.abc import Sequence + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autodoc/typehints.py b/sphinx/ext/autodoc/typehints.py index 238d7b6aa..79906fb32 100644 --- a/sphinx/ext/autodoc/typehints.py +++ b/sphinx/ext/autodoc/typehints.py @@ -10,13 +10,14 @@ from docutils import nodes import sphinx from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.util import inspect from sphinx.util.typing import stringify_annotation if TYPE_CHECKING: from docutils.nodes import Element + from sphinx.application import Sphinx + def record_typehints(app: Sphinx, objtype: str, name: str, obj: Any, options: dict, args: str, retann: str) -> None: diff --git a/sphinx/ext/autosectionlabel.py b/sphinx/ext/autosectionlabel.py index 4a3a0688a..d423fcc05 100644 --- a/sphinx/ext/autosectionlabel.py +++ b/sphinx/ext/autosectionlabel.py @@ -7,7 +7,6 @@ from typing import TYPE_CHECKING, Any, cast from docutils import nodes import sphinx -from sphinx.application import Sphinx from sphinx.domains.std import StandardDomain from sphinx.locale import __ from sphinx.util import logging @@ -16,6 +15,8 @@ from sphinx.util.nodes import clean_astext if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index 1a4b3f5c2..edb8f0d5f 100644 --- a/sphinx/ext/autosummary/__init__.py +++ b/sphinx/ext/autosummary/__init__.py @@ -65,14 +65,12 @@ from docutils.statemachine import StringList import sphinx from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.config import Config from sphinx.environment import BuildEnvironment from sphinx.ext.autodoc import INSTANCEATTR, Documenter from sphinx.ext.autodoc.directive import DocumenterBridge, Options from sphinx.ext.autodoc.importer import import_module from sphinx.ext.autodoc.mock import mock -from sphinx.extension import Extension from sphinx.locale import __ from sphinx.project import Project from sphinx.pycode import ModuleAnalyzer, PycodeError @@ -87,14 +85,17 @@ from sphinx.util.docutils import ( ) from sphinx.util.inspect import getmro, signature_from_str from sphinx.util.matching import Matcher -from sphinx.util.typing import OptionSpec -from sphinx.writers.html import HTML5Translator if TYPE_CHECKING: from collections.abc import Sequence from docutils.nodes import Node, system_message + from sphinx.application import Sphinx + from sphinx.extension import Extension + from sphinx.util.typing import OptionSpec + from sphinx.writers.html import HTML5Translator + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index abffcef49..7ce7f7e68 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -31,10 +31,8 @@ from jinja2.sandbox import SandboxedEnvironment import sphinx.locale from sphinx import __display_version__, package_dir -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.config import Config -from sphinx.ext.autodoc import Documenter from sphinx.ext.autodoc.importer import import_module from sphinx.ext.autosummary import ( ImportExceptionGroup, @@ -54,6 +52,9 @@ if TYPE_CHECKING: from collections.abc import Sequence, Set from gettext import NullTranslations + from sphinx.application import Sphinx + from sphinx.ext.autodoc import Documenter + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py index f32d173a1..14a56e35e 100644 --- a/sphinx/ext/coverage.py +++ b/sphinx/ext/coverage.py @@ -16,7 +16,6 @@ from os import path from typing import IO, TYPE_CHECKING, Any, TextIO import sphinx -from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.locale import __ from sphinx.util import logging @@ -26,6 +25,8 @@ from sphinx.util.inspect import safe_getattr if TYPE_CHECKING: from collections.abc import Iterator + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/doctest.py b/sphinx/ext/doctest.py index 89b63c17a..db62f06b5 100644 --- a/sphinx/ext/doctest.py +++ b/sphinx/ext/doctest.py @@ -25,7 +25,6 @@ from sphinx.util import logging from sphinx.util.console import bold # type: ignore[attr-defined] from sphinx.util.docutils import SphinxDirective from sphinx.util.osutil import relpath -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from collections.abc import Iterable, Sequence @@ -33,6 +32,7 @@ if TYPE_CHECKING: from docutils.nodes import Element, Node, TextElement from sphinx.application import Sphinx + from sphinx.util.typing import OptionSpec logger = logging.getLogger(__name__) diff --git a/sphinx/ext/extlinks.py b/sphinx/ext/extlinks.py index 13cb23f4e..173df4dde 100644 --- a/sphinx/ext/extlinks.py +++ b/sphinx/ext/extlinks.py @@ -25,12 +25,10 @@ from typing import TYPE_CHECKING, Any from docutils import nodes, utils import sphinx -from sphinx.application import Sphinx from sphinx.locale import __ from sphinx.transforms.post_transforms import SphinxPostTransform from sphinx.util import logging, rst from sphinx.util.nodes import split_explicit_title -from sphinx.util.typing import RoleFunction if TYPE_CHECKING: from collections.abc import Sequence @@ -38,6 +36,9 @@ if TYPE_CHECKING: from docutils.nodes import Node, system_message from docutils.parsers.rst.states import Inliner + from sphinx.application import Sphinx + from sphinx.util.typing import RoleFunction + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/githubpages.py b/sphinx/ext/githubpages.py index 27e567fa4..a30986467 100644 --- a/sphinx/ext/githubpages.py +++ b/sphinx/ext/githubpages.py @@ -4,11 +4,13 @@ from __future__ import annotations import os import urllib.parse -from typing import Any +from typing import TYPE_CHECKING, Any import sphinx -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment + +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment def _get_domain_from_url(url: str) -> str: diff --git a/sphinx/ext/graphviz.py b/sphinx/ext/graphviz.py index 42abea8f8..00c9e0b41 100644 --- a/sphinx/ext/graphviz.py +++ b/sphinx/ext/graphviz.py @@ -18,7 +18,6 @@ from docutils import nodes from docutils.parsers.rst import Directive, directives import sphinx -from sphinx.application import Sphinx from sphinx.errors import SphinxError from sphinx.locale import _, __ from sphinx.util import logging @@ -26,17 +25,18 @@ from sphinx.util.docutils import SphinxDirective, SphinxTranslator from sphinx.util.i18n import search_image_for_language from sphinx.util.nodes import set_source_info from sphinx.util.osutil import ensuredir -from sphinx.util.typing import OptionSpec -from sphinx.writers.html import HTML5Translator -from sphinx.writers.latex import LaTeXTranslator -from sphinx.writers.manpage import ManualPageTranslator -from sphinx.writers.texinfo import TexinfoTranslator -from sphinx.writers.text import TextTranslator if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx from sphinx.config import Config + from sphinx.util.typing import OptionSpec + from sphinx.writers.html import HTML5Translator + from sphinx.writers.latex import LaTeXTranslator + from sphinx.writers.manpage import ManualPageTranslator + from sphinx.writers.texinfo import TexinfoTranslator + from sphinx.writers.text import TextTranslator logger = logging.getLogger(__name__) diff --git a/sphinx/ext/ifconfig.py b/sphinx/ext/ifconfig.py index b657bbf6b..1d2b19791 100644 --- a/sphinx/ext/ifconfig.py +++ b/sphinx/ext/ifconfig.py @@ -21,14 +21,15 @@ from typing import TYPE_CHECKING, Any from docutils import nodes import sphinx -from sphinx.application import Sphinx from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import nested_parse_with_titles -from sphinx.util.typing import OptionSpec if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + from sphinx.util.typing import OptionSpec + class ifconfig(nodes.Element): pass diff --git a/sphinx/ext/imgconverter.py b/sphinx/ext/imgconverter.py index 511e60404..071a2cf47 100644 --- a/sphinx/ext/imgconverter.py +++ b/sphinx/ext/imgconverter.py @@ -5,15 +5,17 @@ from __future__ import annotations import subprocess import sys from subprocess import CalledProcessError -from typing import Any +from typing import TYPE_CHECKING, Any import sphinx -from sphinx.application import Sphinx from sphinx.errors import ExtensionError from sphinx.locale import __ from sphinx.transforms.post_transforms.images import ImageConverter from sphinx.util import logging +if TYPE_CHECKING: + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/imgmath.py b/sphinx/ext/imgmath.py index dfba6d3aa..5e2a5b109 100644 --- a/sphinx/ext/imgmath.py +++ b/sphinx/ext/imgmath.py @@ -16,9 +16,6 @@ from docutils import nodes import sphinx from sphinx import package_dir -from sphinx.application import Sphinx -from sphinx.builders import Builder -from sphinx.config import Config from sphinx.errors import SphinxError from sphinx.locale import _, __ from sphinx.util import logging @@ -26,13 +23,17 @@ from sphinx.util.math import get_node_equation_number, wrap_displaymath from sphinx.util.osutil import ensuredir from sphinx.util.png import read_png_depth, write_png_depth from sphinx.util.template import LaTeXRenderer -from sphinx.writers.html import HTML5Translator if TYPE_CHECKING: import os from docutils.nodes import Element + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.config import Config + from sphinx.writers.html import HTML5Translator + logger = logging.getLogger(__name__) templates_path = path.join(package_dir, 'templates', 'imgmath') diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index 8a09cc75e..838fe40bc 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -43,8 +43,6 @@ from docutils.parsers.rst import directives import sphinx from sphinx import addnodes -from sphinx.application import Sphinx -from sphinx.environment import BuildEnvironment from sphinx.ext.graphviz import ( figure_wrapper, graphviz, @@ -53,14 +51,17 @@ from sphinx.ext.graphviz import ( render_dot_texinfo, ) from sphinx.util.docutils import SphinxDirective -from sphinx.util.typing import OptionSpec -from sphinx.writers.html import HTML5Translator -from sphinx.writers.latex import LaTeXTranslator -from sphinx.writers.texinfo import TexinfoTranslator if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec + from sphinx.writers.html import HTML5Translator + from sphinx.writers.latex import LaTeXTranslator + from sphinx.writers.texinfo import TexinfoTranslator + module_sig_re = re.compile(r'''^(?:([\w.]*)\.)? # module names (\w+) \s* $ # class/final module name ''', re.VERBOSE) diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py index 59c68246c..ee1040623 100644 --- a/sphinx/ext/linkcode.py +++ b/sphinx/ext/linkcode.py @@ -8,13 +8,14 @@ from docutils import nodes import sphinx from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.errors import SphinxError from sphinx.locale import _ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + class LinkcodeError(SphinxError): category = "linkcode error" diff --git a/sphinx/ext/mathjax.py b/sphinx/ext/mathjax.py index bf2db7356..41d18b92d 100644 --- a/sphinx/ext/mathjax.py +++ b/sphinx/ext/mathjax.py @@ -8,18 +8,20 @@ This requires the MathJax JavaScript library on your webserver/computer. from __future__ import annotations import json -from typing import Any, cast +from typing import TYPE_CHECKING, Any, cast from docutils import nodes import sphinx -from sphinx.application import Sphinx from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.domains.math import MathDomain from sphinx.errors import ExtensionError from sphinx.locale import _ from sphinx.util.math import get_node_equation_number -from sphinx.writers.html import HTML5Translator + +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.writers.html import HTML5Translator # more information for mathjax secure url is here: # https://docs.mathjax.org/en/latest/start.html#secure-access-to-the-cdn diff --git a/sphinx/ext/napoleon/docstring.py b/sphinx/ext/napoleon/docstring.py index 5075e31e6..075f11217 100644 --- a/sphinx/ext/napoleon/docstring.py +++ b/sphinx/ext/napoleon/docstring.py @@ -6,14 +6,16 @@ import collections import inspect import re from functools import partial -from typing import Any, Callable +from typing import TYPE_CHECKING, Any, Callable -from sphinx.application import Sphinx -from sphinx.config import Config as SphinxConfig from sphinx.locale import _, __ from sphinx.util import logging from sphinx.util.typing import get_type_hints, stringify_annotation +if TYPE_CHECKING: + from sphinx.application import Sphinx + from sphinx.config import Config as SphinxConfig + logger = logging.getLogger(__name__) _directive_regex = re.compile(r'\.\. \S+::') diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py index cb89341b5..e540e7ecf 100644 --- a/sphinx/ext/todo.py +++ b/sphinx/ext/todo.py @@ -15,20 +15,21 @@ from docutils.parsers.rst.directives.admonitions import BaseAdmonition import sphinx from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.domains import Domain -from sphinx.environment import BuildEnvironment from sphinx.errors import NoUri from sphinx.locale import _, __ from sphinx.util import logging, texescape from sphinx.util.docutils import SphinxDirective, new_document -from sphinx.util.typing import OptionSpec -from sphinx.writers.html import HTML5Translator -from sphinx.writers.latex import LaTeXTranslator if TYPE_CHECKING: from docutils.nodes import Element, Node + from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import OptionSpec + from sphinx.writers.html import HTML5Translator + from sphinx.writers.latex import LaTeXTranslator + logger = logging.getLogger(__name__) diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index 2377632ea..c5fcda537 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -13,10 +13,7 @@ from docutils.nodes import Element, Node import sphinx from sphinx import addnodes -from sphinx.application import Sphinx -from sphinx.builders import Builder from sphinx.builders.html import StandaloneHTMLBuilder -from sphinx.environment import BuildEnvironment from sphinx.locale import _, __ from sphinx.pycode import ModuleAnalyzer from sphinx.transforms.post_transforms import SphinxPostTransform @@ -27,6 +24,10 @@ from sphinx.util.nodes import make_refnode if TYPE_CHECKING: from collections.abc import Generator, Iterable + from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.environment import BuildEnvironment + logger = logging.getLogger(__name__) diff --git a/sphinx/extension.py b/sphinx/extension.py index 15f2afa09..78ef968f8 100644 --- a/sphinx/extension.py +++ b/sphinx/extension.py @@ -6,13 +6,13 @@ from typing import TYPE_CHECKING, Any from packaging.version import InvalidVersion, Version -from sphinx.config import Config from sphinx.errors import VersionRequirementError from sphinx.locale import __ from sphinx.util import logging if TYPE_CHECKING: from sphinx.application import Sphinx + from sphinx.config import Config logger = logging.getLogger(__name__) diff --git a/sphinx/io.py b/sphinx/io.py index a8dfad638..4874fdf39 100644 --- a/sphinx/io.py +++ b/sphinx/io.py @@ -12,7 +12,6 @@ from docutils.transforms.references import DanglingReferences from docutils.writers import UnfilteredWriter from sphinx import addnodes -from sphinx.environment import BuildEnvironment from sphinx.transforms import AutoIndexUpgrader, DoctreeReadEvent, SphinxTransformer from sphinx.transforms.i18n import ( Locale, @@ -30,6 +29,7 @@ if TYPE_CHECKING: from docutils.transforms import Transform from sphinx.application import Sphinx + from sphinx.environment import BuildEnvironment logger = logging.getLogger(__name__) diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index 7f2da8a79..88040c6fe 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -12,7 +12,6 @@ from jinja2.sandbox import SandboxedEnvironment from jinja2.utils import open_if_exists from sphinx.application import TemplateBridge -from sphinx.theming import Theme from sphinx.util import logging from sphinx.util.osutil import mtimes_of_files @@ -27,6 +26,7 @@ if TYPE_CHECKING: from jinja2.environment import Environment from sphinx.builders import Builder + from sphinx.theming import Theme def _tobool(val: str) -> bool: diff --git a/sphinx/parsers.py b/sphinx/parsers.py index e7c219dd9..1269884ab 100644 --- a/sphinx/parsers.py +++ b/sphinx/parsers.py @@ -11,14 +11,14 @@ from docutils.parsers.rst import states from docutils.statemachine import StringList from docutils.transforms.universal import SmartQuotes -from sphinx.config import Config -from sphinx.environment import BuildEnvironment from sphinx.util.rst import append_epilog, prepend_prolog if TYPE_CHECKING: from docutils.transforms import Transform from sphinx.application import Sphinx + from sphinx.config import Config + from sphinx.environment import BuildEnvironment class Parser(docutils.parsers.Parser): diff --git a/sphinx/registry.py b/sphinx/registry.py index 707fe24ec..501661d3b 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -13,11 +13,8 @@ if sys.version_info >= (3, 10): else: from importlib_metadata import entry_points -from sphinx.builders import Builder -from sphinx.config import Config from sphinx.domains import Domain, Index, ObjType from sphinx.domains.std import GenericObject, Target -from sphinx.environment import BuildEnvironment from sphinx.errors import ExtensionError, SphinxError, VersionRequirementError from sphinx.extension import Extension from sphinx.io import create_publisher @@ -26,7 +23,6 @@ from sphinx.parsers import Parser as SphinxParser from sphinx.roles import XRefRole from sphinx.util import logging from sphinx.util.logging import prefixed_warnings -from sphinx.util.typing import RoleFunction, TitleGetter if TYPE_CHECKING: from collections.abc import Iterator, Sequence @@ -39,7 +35,11 @@ if TYPE_CHECKING: from docutils.transforms import Transform from sphinx.application import Sphinx + from sphinx.builders import Builder + from sphinx.config import Config + from sphinx.environment import BuildEnvironment from sphinx.ext.autodoc import Documenter + from sphinx.util.typing import RoleFunction, TitleGetter logger = logging.getLogger(__name__) diff --git a/sphinx/roles.py b/sphinx/roles.py index f1cd02c17..d734429eb 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -14,7 +14,6 @@ from sphinx import addnodes from sphinx.locale import _, __ from sphinx.util import ws_re from sphinx.util.docutils import ReferenceRole, SphinxRole -from sphinx.util.typing import RoleFunction if TYPE_CHECKING: from collections.abc import Sequence @@ -23,6 +22,7 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.environment import BuildEnvironment + from sphinx.util.typing import RoleFunction generic_docroles = { diff --git a/sphinx/transforms/__init__.py b/sphinx/transforms/__init__.py index cf98a8eb3..d9a908c8d 100644 --- a/sphinx/transforms/__init__.py +++ b/sphinx/transforms/__init__.py @@ -14,7 +14,6 @@ from docutils.utils import normalize_language_tag from docutils.utils.smartquotes import smartchars from sphinx import addnodes -from sphinx.config import Config from sphinx.locale import _, __ from sphinx.util import logging from sphinx.util.docutils import new_document @@ -27,6 +26,7 @@ if TYPE_CHECKING: from docutils.nodes import Node, Text from sphinx.application import Sphinx + from sphinx.config import Config from sphinx.domains.std import StandardDomain from sphinx.environment import BuildEnvironment diff --git a/sphinx/transforms/compact_bullet_list.py b/sphinx/transforms/compact_bullet_list.py index ac8501a5c..149b5e0f7 100644 --- a/sphinx/transforms/compact_bullet_list.py +++ b/sphinx/transforms/compact_bullet_list.py @@ -7,12 +7,13 @@ from typing import TYPE_CHECKING, Any, cast from docutils import nodes from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.transforms import SphinxTransform if TYPE_CHECKING: from docutils.nodes import Node + from sphinx.application import Sphinx + class RefOnlyListChecker(nodes.GenericNodeVisitor): """Raise `nodes.NodeFound` if non-simple list item is encountered. diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py index e215c13e8..d26c27948 100644 --- a/sphinx/transforms/i18n.py +++ b/sphinx/transforms/i18n.py @@ -12,7 +12,6 @@ from docutils import nodes from docutils.io import StringInput from sphinx import addnodes -from sphinx.config import Config from sphinx.domains.std import make_glossary_term, split_term_classifiers from sphinx.errors import ConfigError from sphinx.locale import __ @@ -33,6 +32,7 @@ if TYPE_CHECKING: from collections.abc import Sequence from sphinx.application import Sphinx + from sphinx.config import Config logger = logging.getLogger(__name__) diff --git a/sphinx/transforms/post_transforms/__init__.py b/sphinx/transforms/post_transforms/__init__.py index da0df34de..5390aaf06 100644 --- a/sphinx/transforms/post_transforms/__init__.py +++ b/sphinx/transforms/post_transforms/__init__.py @@ -9,9 +9,6 @@ from docutils import nodes from docutils.nodes import Element, Node from sphinx import addnodes -from sphinx.addnodes import pending_xref -from sphinx.application import Sphinx -from sphinx.domains import Domain from sphinx.errors import NoUri from sphinx.locale import __ from sphinx.transforms import SphinxTransform @@ -22,6 +19,10 @@ from sphinx.util.nodes import find_pending_xref_condition, process_only_nodes if TYPE_CHECKING: from collections.abc import Sequence + from sphinx.addnodes import pending_xref + from sphinx.application import Sphinx + from sphinx.domains import Domain + logger = logging.getLogger(__name__) diff --git a/sphinx/transforms/post_transforms/code.py b/sphinx/transforms/post_transforms/code.py index 5b26a2fdc..cd8abcc67 100644 --- a/sphinx/transforms/post_transforms/code.py +++ b/sphinx/transforms/post_transforms/code.py @@ -9,13 +9,14 @@ from docutils import nodes from pygments.lexers import PythonConsoleLexer, guess_lexer from sphinx import addnodes -from sphinx.application import Sphinx from sphinx.ext import doctest from sphinx.transforms import SphinxTransform if TYPE_CHECKING: from docutils.nodes import Node, TextElement + from sphinx.application import Sphinx + class HighlightSetting(NamedTuple): language: str diff --git a/sphinx/transforms/post_transforms/images.py b/sphinx/transforms/post_transforms/images.py index 7ce6be8e9..e220df0a8 100644 --- a/sphinx/transforms/post_transforms/images.py +++ b/sphinx/transforms/post_transforms/images.py @@ -6,11 +6,10 @@ import os import re from hashlib import sha1 from math import ceil -from typing import Any +from typing import TYPE_CHECKING, Any from docutils import nodes -from sphinx.application import Sphinx from sphinx.locale import __ from sphinx.transforms import SphinxTransform from sphinx.util import logging, requests @@ -18,6 +17,9 @@ from sphinx.util.http_date import epoch_to_rfc1123, rfc1123_to_epoch from sphinx.util.images import get_image_extension, guess_mimetype, parse_data_uri from sphinx.util.osutil import ensuredir +if TYPE_CHECKING: + from sphinx.application import Sphinx + logger = logging.getLogger(__name__) MAX_FILENAME_LEN = 32 diff --git a/sphinx/util/cfamily.py b/sphinx/util/cfamily.py index 7167b60ed..299f0946e 100644 --- a/sphinx/util/cfamily.py +++ b/sphinx/util/cfamily.py @@ -9,12 +9,13 @@ from typing import TYPE_CHECKING, Any, Callable from docutils import nodes from sphinx import addnodes -from sphinx.config import Config from sphinx.util import logging if TYPE_CHECKING: from docutils.nodes import TextElement + from sphinx.config import Config + logger = logging.getLogger(__name__) StringifyTransform = Callable[[Any], str] diff --git a/sphinx/util/docfields.py b/sphinx/util/docfields.py index badb699a7..c48c3be0a 100644 --- a/sphinx/util/docfields.py +++ b/sphinx/util/docfields.py @@ -12,16 +12,16 @@ from docutils import nodes from docutils.nodes import Element, Node from sphinx import addnodes -from sphinx.environment import BuildEnvironment from sphinx.locale import __ from sphinx.util import logging from sphinx.util.nodes import get_node_line -from sphinx.util.typing import TextlikeNode if TYPE_CHECKING: from docutils.parsers.rst.states import Inliner from sphinx.directives import ObjectDescription + from sphinx.environment import BuildEnvironment + from sphinx.util.typing import TextlikeNode logger = logging.getLogger(__name__) diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index b491a96aa..454550f7b 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -22,7 +22,6 @@ from docutils.writers._html_base import HTMLTranslator from sphinx.errors import SphinxError from sphinx.locale import _, __ from sphinx.util import logging -from sphinx.util.typing import RoleFunction logger = logging.getLogger(__name__) report_re = re.compile('^(.+?:(?:\\d+)?): \\((DEBUG|INFO|WARNING|ERROR|SEVERE)/(\\d+)?\\) ') @@ -37,6 +36,7 @@ if TYPE_CHECKING: from sphinx.builders import Builder from sphinx.config import Config from sphinx.environment import BuildEnvironment + from sphinx.util.typing import RoleFunction # deprecated name -> (object to return, canonical path or empty string) _DEPRECATED_OBJECTS = { diff --git a/sphinx/util/fileutil.py b/sphinx/util/fileutil.py index 0d6b77e18..316ec3916 100644 --- a/sphinx/util/fileutil.py +++ b/sphinx/util/fileutil.py @@ -9,10 +9,10 @@ from typing import TYPE_CHECKING, Callable from docutils.utils import relative_path from sphinx.util.osutil import copyfile, ensuredir -from sphinx.util.typing import PathMatcher if TYPE_CHECKING: from sphinx.util.template import BaseRenderer + from sphinx.util.typing import PathMatcher def copy_asset_file(source: str | os.PathLike[str], destination: str | os.PathLike[str], diff --git a/sphinx/util/inventory.py b/sphinx/util/inventory.py index 560fa9293..89f0070b8 100644 --- a/sphinx/util/inventory.py +++ b/sphinx/util/inventory.py @@ -7,7 +7,6 @@ import zlib from typing import IO, TYPE_CHECKING, Callable from sphinx.util import logging -from sphinx.util.typing import Inventory, InventoryItem BUFSIZE = 16 * 1024 logger = logging.getLogger(__name__) @@ -17,6 +16,7 @@ if TYPE_CHECKING: from sphinx.builders import Builder from sphinx.environment import BuildEnvironment + from sphinx.util.typing import Inventory, InventoryItem class InventoryFileReader: diff --git a/sphinx/util/math.py b/sphinx/util/math.py index 6cd1732ba..ef0eb3901 100644 --- a/sphinx/util/math.py +++ b/sphinx/util/math.py @@ -4,17 +4,17 @@ from __future__ import annotations from typing import TYPE_CHECKING -from sphinx.builders.html import HTML5Translator - if TYPE_CHECKING: from docutils import nodes + from sphinx.builders.html import HTML5Translator + def get_node_equation_number(writer: HTML5Translator, node: nodes.math_block) -> str: if writer.builder.config.math_numfig and writer.builder.config.numfig: figtype = 'displaymath' if writer.builder.name == 'singlehtml': - key = f"{writer.docnames[-1]}/{figtype}" + key = f"{writer.docnames[-1]}/{figtype}" # type: ignore[has-type] else: key = figtype diff --git a/sphinx/writers/html5.py b/sphinx/writers/html5.py index f095ae5cd..eb0a1ee6f 100644 --- a/sphinx/writers/html5.py +++ b/sphinx/writers/html5.py @@ -13,7 +13,6 @@ from docutils import nodes from docutils.writers.html5_polyglot import HTMLTranslator as BaseTranslator from sphinx import addnodes -from sphinx.builders import Builder from sphinx.locale import _, __, admonitionlabels from sphinx.util import logging from sphinx.util.docutils import SphinxTranslator @@ -22,6 +21,7 @@ from sphinx.util.images import get_image_size if TYPE_CHECKING: from docutils.nodes import Element, Node, Text + from sphinx.builders import Builder from sphinx.builders.html import StandaloneHTMLBuilder @@ -672,7 +672,8 @@ class HTML5Translator(SphinxTranslator, BaseTranslator): # but it tries the final file name, which does not necessarily exist # yet at the time the HTML file is written. if not ('width' in node and 'height' in node): - size = get_image_size(os.path.join(self.builder.srcdir, olduri)) + path = os.path.join(self.builder.srcdir, olduri) # type: ignore[has-type] + size = get_image_size(path) if size is None: logger.warning( __('Could not obtain image size. :scale: option is ignored.'), diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 05b58dcbc..dfd0b0b34 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -15,7 +15,6 @@ from typing import TYPE_CHECKING, Any, cast from docutils import nodes, writers from sphinx import addnodes, highlighting -from sphinx.domains import IndexEntry from sphinx.domains.std import StandardDomain from sphinx.errors import SphinxError from sphinx.locale import _, __, admonitionlabels @@ -37,6 +36,7 @@ if TYPE_CHECKING: from sphinx.builders.latex import LaTeXBuilder from sphinx.builders.latex.theming import Theme + from sphinx.domains import IndexEntry logger = logging.getLogger(__name__) diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py index 7c6269332..108eb5e57 100644 --- a/sphinx/writers/manpage.py +++ b/sphinx/writers/manpage.py @@ -10,7 +10,6 @@ from docutils.writers.manpage import Translator as BaseTranslator from docutils.writers.manpage import Writer from sphinx import addnodes -from sphinx.builders import Builder from sphinx.locale import _, admonitionlabels from sphinx.util import logging from sphinx.util.docutils import SphinxTranslator @@ -20,6 +19,8 @@ from sphinx.util.nodes import NodeMatcher if TYPE_CHECKING: from docutils.nodes import Element + from sphinx.builders import Builder + logger = logging.getLogger(__name__) diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index ea88e25f4..7032c6583 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -11,7 +11,6 @@ from typing import TYPE_CHECKING, Any, cast from docutils import nodes, writers from sphinx import __display_version__, addnodes -from sphinx.domains import IndexEntry from sphinx.domains.index import IndexDomain from sphinx.errors import ExtensionError from sphinx.locale import _, __, admonitionlabels @@ -24,6 +23,7 @@ if TYPE_CHECKING: from docutils.nodes import Element, Node, Text from sphinx.builders.texinfo import TexinfoBuilder + from sphinx.domains import IndexEntry logger = logging.getLogger(__name__) diff --git a/sphinx/writers/xml.py b/sphinx/writers/xml.py index 1b6868e10..38aa7630c 100644 --- a/sphinx/writers/xml.py +++ b/sphinx/writers/xml.py @@ -2,11 +2,12 @@ from __future__ import annotations -from typing import Any +from typing import TYPE_CHECKING, Any from docutils.writers.docutils_xml import Writer as BaseXMLWriter -from sphinx.builders import Builder +if TYPE_CHECKING: + from sphinx.builders import Builder class XMLWriter(BaseXMLWriter):