diff --git a/.ruff.toml b/.ruff.toml index 257183059..c0142789f 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -263,6 +263,10 @@ select = [ # flake8-2020 ('YTT') "YTT", ] +logger-objects = [ + "sphinx.ext.apidoc._shared.LOGGER", + "sphinx.ext.intersphinx._shared.LOGGER", +] [lint.per-file-ignores] "doc/*" = [ @@ -362,6 +366,10 @@ max-line-length = 95 [lint.flake8-quotes] inline-quotes = "single" +[lint.flake8-type-checking] +exempt-modules = [] +strict = true + [lint.isort] forced-separate = [ "tests", diff --git a/sphinx/application.py b/sphinx/application.py index a020b4c09..2b80e1ab8 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -13,11 +13,11 @@ from collections import deque from io import StringIO from typing import TYPE_CHECKING, overload -from docutils.parsers.rst import Directive, roles +from docutils.parsers.rst import roles import sphinx from sphinx import locale, package_dir -from sphinx.config import ENUM, Config, _ConfigRebuild +from sphinx.config import Config from sphinx.environment import BuildEnvironment from sphinx.errors import ApplicationError, ConfigError, VersionRequirementError from sphinx.events import EventManager @@ -43,11 +43,13 @@ if TYPE_CHECKING: from docutils import nodes from docutils.nodes import Element, Node from docutils.parsers import Parser + from docutils.parsers.rst import Directive from docutils.transforms import Transform from pygments.lexer import Lexer from sphinx import addnodes from sphinx.builders import Builder + from sphinx.config import ENUM, _ConfigRebuild from sphinx.domains import Domain, Index from sphinx.environment.collectors import EnvironmentCollector from sphinx.ext.autodoc import Documenter, _AutodocProcessDocstringListener diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index cec7cc66b..ddde2d7e3 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -16,7 +16,6 @@ from docutils.utils import DependencyList from sphinx.environment import ( CONFIG_CHANGED_REASON, CONFIG_OK, - BuildEnvironment, _CurrentDocument, ) from sphinx.environment.adapters.asset import ImageAdapter @@ -33,7 +32,7 @@ from sphinx.util.build_phase import BuildPhase from sphinx.util.console import bold from sphinx.util.display import progress_message, status_iterator from sphinx.util.docutils import sphinx_domains -from sphinx.util.i18n import CatalogInfo, CatalogRepository, docname_to_domain +from sphinx.util.i18n import CatalogRepository, docname_to_domain from sphinx.util.osutil import SEP, canon_path, ensuredir, relative_uri, relpath from sphinx.util.parallel import ( ParallelTasks, @@ -55,7 +54,11 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.config import Config + from sphinx.environment import ( + BuildEnvironment, + ) from sphinx.events import EventManager + from sphinx.util.i18n import CatalogInfo from sphinx.util.tags import Tags diff --git a/sphinx/builders/epub3.py b/sphinx/builders/epub3.py index 3b28c0136..6c3a89afe 100644 --- a/sphinx/builders/epub3.py +++ b/sphinx/builders/epub3.py @@ -14,7 +14,7 @@ from typing import TYPE_CHECKING, NamedTuple from sphinx import package_dir from sphinx.builders import _epub_base -from sphinx.config import ENUM, Config +from sphinx.config import ENUM from sphinx.locale import __ from sphinx.util import logging from sphinx.util.fileutil import copy_asset_file @@ -25,6 +25,7 @@ if TYPE_CHECKING: from typing import Any from sphinx.application import Sphinx + from sphinx.config import Config from sphinx.util.typing import ExtensionMetadata logger = logging.getLogger(__name__) diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py index 7a824a5fd..f002f6bb0 100644 --- a/sphinx/builders/gettext.py +++ b/sphinx/builders/gettext.py @@ -20,7 +20,7 @@ from sphinx.locale import __ from sphinx.util import logging from sphinx.util.console import bold from sphinx.util.display import status_iterator -from sphinx.util.i18n import CatalogInfo, docname_to_domain +from sphinx.util.i18n import docname_to_domain from sphinx.util.index_entries import split_index_msg from sphinx.util.nodes import extract_messages, traverse_translatable_index from sphinx.util.osutil import canon_path, ensuredir, relpath @@ -36,6 +36,7 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.config import Config + from sphinx.util.i18n import CatalogInfo from sphinx.util.typing import ExtensionMetadata DEFAULT_TEMPLATE_PATH = Path(package_dir, 'templates', 'gettext') diff --git a/sphinx/builders/html/__init__.py b/sphinx/builders/html/__init__.py index 66161bcc7..6f28ef3a5 100644 --- a/sphinx/builders/html/__init__.py +++ b/sphinx/builders/html/__init__.py @@ -30,7 +30,7 @@ from sphinx.builders.html._assets import ( _JavaScript, ) from sphinx.builders.html._build_info import BuildInfo -from sphinx.config import ENUM, Config +from sphinx.config import ENUM from sphinx.deprecation import _deprecation_warning from sphinx.domains import Index, IndexEntry from sphinx.environment.adapters.asset import ImageAdapter @@ -71,6 +71,7 @@ if TYPE_CHECKING: from docutils.readers import Reader from sphinx.application import Sphinx + from sphinx.config import Config from sphinx.environment import BuildEnvironment from sphinx.util.typing import ExtensionMetadata diff --git a/sphinx/builders/latex/__init__.py b/sphinx/builders/latex/__init__.py index 17e0f34e0..d98a7de88 100644 --- a/sphinx/builders/latex/__init__.py +++ b/sphinx/builders/latex/__init__.py @@ -19,7 +19,7 @@ from sphinx.builders.latex.constants import ( ) from sphinx.builders.latex.theming import Theme, ThemeFactory from sphinx.builders.latex.util import ExtBabel -from sphinx.config import ENUM, Config +from sphinx.config import ENUM from sphinx.environment.adapters.asset import ImageAdapter from sphinx.errors import NoUri, SphinxError from sphinx.locale import _, __ @@ -44,6 +44,7 @@ if TYPE_CHECKING: from docutils.nodes import Node from sphinx.application import Sphinx + from sphinx.config import Config from sphinx.util.typing import ExtensionMetadata XINDY_LANG_OPTIONS = { diff --git a/sphinx/directives/__init__.py b/sphinx/directives/__init__.py index 0eb3a3e8b..e31347105 100644 --- a/sphinx/directives/__init__.py +++ b/sphinx/directives/__init__.py @@ -10,7 +10,7 @@ from docutils.parsers.rst import directives, roles from sphinx import addnodes from sphinx.util import docutils -from sphinx.util.docfields import DocFieldTransformer, Field, TypedField +from sphinx.util.docfields import DocFieldTransformer from sphinx.util.docutils import SphinxDirective if TYPE_CHECKING: @@ -20,6 +20,7 @@ if TYPE_CHECKING: from sphinx.addnodes import desc_signature from sphinx.application import Sphinx + from sphinx.util.docfields import Field, TypedField from sphinx.util.typing import ExtensionMetadata, OptionSpec diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py index f5ae5bc5e..b09db875d 100644 --- a/sphinx/directives/patches.py +++ b/sphinx/directives/patches.py @@ -5,7 +5,7 @@ from pathlib import Path from typing import TYPE_CHECKING, cast from docutils import nodes -from docutils.nodes import Node, make_id +from docutils.nodes import make_id from docutils.parsers.rst import directives from docutils.parsers.rst.directives import images, tables from docutils.parsers.rst.directives.misc import Meta @@ -21,6 +21,8 @@ from sphinx.util.osutil import SEP, relpath if TYPE_CHECKING: from typing import ClassVar + from docutils.nodes import Node + from sphinx.application import Sphinx from sphinx.util.typing import ExtensionMetadata, OptionSpec diff --git a/sphinx/domains/c/_ast.py b/sphinx/domains/c/_ast.py index fb86d16ff..f28465833 100644 --- a/sphinx/domains/c/_ast.py +++ b/sphinx/domains/c/_ast.py @@ -9,7 +9,6 @@ from docutils import nodes from sphinx import addnodes from sphinx.domains.c._ids import _id_prefix, _max_id from sphinx.util.cfamily import ( - ASTAttributeList, ASTBaseBase, ASTBaseParenExprList, UnsupportedMultiCharacterCharLiteral, @@ -23,7 +22,10 @@ if TYPE_CHECKING: from sphinx.domains.c._symbol import Symbol from sphinx.environment import BuildEnvironment - from sphinx.util.cfamily import StringifyTransform + from sphinx.util.cfamily import ( + ASTAttributeList, + StringifyTransform, + ) DeclarationType: TypeAlias = Union[ 'ASTStruct', diff --git a/sphinx/domains/c/_parser.py b/sphinx/domains/c/_parser.py index dd4be1918..81d4e6235 100644 --- a/sphinx/domains/c/_parser.py +++ b/sphinx/domains/c/_parser.py @@ -12,7 +12,6 @@ from sphinx.domains.c._ast import ( ASTCastExpr, ASTCharLiteral, ASTDeclaration, - ASTDeclarator, ASTDeclaratorNameBitField, ASTDeclaratorNameParam, ASTDeclaratorParen, @@ -21,13 +20,11 @@ from sphinx.domains.c._ast import ( ASTDeclSpecsSimple, ASTEnum, ASTEnumerator, - ASTExpression, ASTFallbackExpr, ASTFunctionParameter, ASTIdentifier, ASTIdExpression, ASTInitializer, - ASTLiteral, ASTMacro, ASTMacroParameter, ASTNestedName, @@ -41,12 +38,10 @@ from sphinx.domains.c._ast import ( ASTPostfixExpr, ASTPostfixInc, ASTPostfixMemberOfPointer, - ASTPostfixOp, ASTSizeofExpr, ASTSizeofType, ASTStringLiteral, ASTStruct, - ASTTrailingTypeSpec, ASTTrailingTypeSpecFundamental, ASTTrailingTypeSpecName, ASTType, @@ -82,7 +77,14 @@ if TYPE_CHECKING: from collections.abc import Callable, Sequence from typing import Any - from sphinx.domains.c._ast import DeclarationType + from sphinx.domains.c._ast import ( + ASTDeclarator, + ASTExpression, + ASTLiteral, + ASTPostfixOp, + ASTTrailingTypeSpec, + DeclarationType, + ) class DefinitionParser(BaseParser): diff --git a/sphinx/domains/c/_symbol.py b/sphinx/domains/c/_symbol.py index b77d12b31..cb43910e7 100644 --- a/sphinx/domains/c/_symbol.py +++ b/sphinx/domains/c/_symbol.py @@ -4,7 +4,6 @@ from typing import TYPE_CHECKING from sphinx.domains.c._ast import ( ASTDeclaration, - ASTIdentifier, ASTNestedName, ) from sphinx.locale import __ @@ -14,6 +13,9 @@ if TYPE_CHECKING: from collections.abc import Callable, Iterable, Iterator, Sequence from typing import Any, Self + from sphinx.domains.c._ast import ( + ASTIdentifier, + ) from sphinx.environment import BuildEnvironment logger = logging.getLogger(__name__) diff --git a/sphinx/domains/cpp/_ast.py b/sphinx/domains/cpp/_ast.py index 563a96040..f5c4f58fb 100644 --- a/sphinx/domains/cpp/_ast.py +++ b/sphinx/domains/cpp/_ast.py @@ -20,7 +20,6 @@ from sphinx.domains.cpp._ids import ( _max_id, ) from sphinx.util.cfamily import ( - ASTAttributeList, ASTBaseBase, ASTBaseParenExprList, NoOldIdError, @@ -36,7 +35,10 @@ if TYPE_CHECKING: from sphinx.addnodes import desc_signature from sphinx.domains.cpp._symbol import Symbol from sphinx.environment import BuildEnvironment - from sphinx.util.cfamily import StringifyTransform + from sphinx.util.cfamily import ( + ASTAttributeList, + StringifyTransform, + ) class ASTBase(ASTBaseBase): diff --git a/sphinx/domains/cpp/_parser.py b/sphinx/domains/cpp/_parser.py index cbc418606..d2befed6d 100644 --- a/sphinx/domains/cpp/_parser.py +++ b/sphinx/domains/cpp/_parser.py @@ -18,7 +18,6 @@ from sphinx.domains.cpp._ast import ( ASTConcept, ASTConditionalExpr, ASTDeclaration, - ASTDeclarator, ASTDeclaratorMemPtr, ASTDeclaratorNameBitField, ASTDeclaratorNameParamQual, @@ -33,14 +32,12 @@ from sphinx.domains.cpp._ast import ( ASTEnumerator, ASTExplicitCast, ASTExplicitSpec, - ASTExpression, ASTFallbackExpr, ASTFoldExpr, ASTFunctionParameter, ASTIdentifier, ASTIdExpression, ASTInitializer, - ASTLiteral, ASTNamespace, ASTNestedName, ASTNestedNameElement, @@ -48,7 +45,6 @@ from sphinx.domains.cpp._ast import ( ASTNoexceptExpr, ASTNoexceptSpec, ASTNumberLiteral, - ASTOperator, ASTOperatorBuildIn, ASTOperatorLiteral, ASTOperatorType, @@ -64,7 +60,6 @@ from sphinx.domains.cpp._ast import ( ASTPostfixInc, ASTPostfixMember, ASTPostfixMemberOfPointer, - ASTPostfixOp, ASTRequiresClause, ASTSizeofExpr, ASTSizeofParamPack, @@ -76,14 +71,12 @@ from sphinx.domains.cpp._ast import ( ASTTemplateIntroduction, ASTTemplateIntroductionParameter, ASTTemplateKeyParamPackIdDefault, - ASTTemplateParam, ASTTemplateParamConstrainedTypeWithInit, ASTTemplateParamNonType, ASTTemplateParams, ASTTemplateParamTemplateType, ASTTemplateParamType, ASTThisLiteral, - ASTTrailingTypeSpec, ASTTrailingTypeSpecDecltype, ASTTrailingTypeSpecDecltypeAuto, ASTTrailingTypeSpecFundamental, @@ -130,6 +123,16 @@ if TYPE_CHECKING: from collections.abc import Callable, Sequence from typing import Any + from sphinx.domains.cpp._ast import ( + ASTDeclarator, + ASTExpression, + ASTLiteral, + ASTOperator, + ASTPostfixOp, + ASTTemplateParam, + ASTTrailingTypeSpec, + ) + logger = logging.getLogger(__name__) diff --git a/sphinx/domains/cpp/_symbol.py b/sphinx/domains/cpp/_symbol.py index 77f7ef830..1852802fe 100644 --- a/sphinx/domains/cpp/_symbol.py +++ b/sphinx/domains/cpp/_symbol.py @@ -4,14 +4,8 @@ from typing import TYPE_CHECKING from sphinx.domains.cpp._ast import ( ASTDeclaration, - ASTIdentifier, ASTNestedName, ASTNestedNameElement, - ASTOperator, - ASTTemplateArgs, - ASTTemplateDeclarationPrefix, - ASTTemplateIntroduction, - ASTTemplateParams, ) from sphinx.locale import __ from sphinx.util import logging @@ -20,6 +14,14 @@ if TYPE_CHECKING: from collections.abc import Callable, Iterable, Iterator, Sequence from typing import Any, NoReturn + from sphinx.domains.cpp._ast import ( + ASTIdentifier, + ASTOperator, + ASTTemplateArgs, + ASTTemplateDeclarationPrefix, + ASTTemplateIntroduction, + ASTTemplateParams, + ) from sphinx.environment import BuildEnvironment logger = logging.getLogger(__name__) diff --git a/sphinx/domains/math.py b/sphinx/domains/math.py index 7502facb1..822897a11 100644 --- a/sphinx/domains/math.py +++ b/sphinx/domains/math.py @@ -5,7 +5,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from docutils import nodes -from docutils.nodes import Element, Node, make_id, system_message +from docutils.nodes import make_id from sphinx.domains import Domain from sphinx.locale import __ @@ -17,6 +17,8 @@ if TYPE_CHECKING: from collections.abc import Iterable, Set from typing import Any + from docutils.nodes import Element, Node, system_message + from sphinx.addnodes import pending_xref from sphinx.application import Sphinx from sphinx.builders import Builder diff --git a/sphinx/domains/python/_annotations.py b/sphinx/domains/python/_annotations.py index fc20959f9..1a128de60 100644 --- a/sphinx/domains/python/_annotations.py +++ b/sphinx/domains/python/_annotations.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING from docutils import nodes from sphinx import addnodes -from sphinx.addnodes import desc_signature, pending_xref, pending_xref_condition +from sphinx.addnodes import pending_xref, pending_xref_condition from sphinx.pycode.parser import Token, TokenProcessor from sphinx.util.inspect import signature_from_str @@ -21,6 +21,7 @@ if TYPE_CHECKING: from docutils.nodes import Element, Node + from sphinx.addnodes import desc_signature from sphinx.environment import BuildEnvironment diff --git a/sphinx/domains/python/_object.py b/sphinx/domains/python/_object.py index 20eb2a1b9..5206d69e0 100644 --- a/sphinx/domains/python/_object.py +++ b/sphinx/domains/python/_object.py @@ -8,7 +8,7 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx import addnodes -from sphinx.addnodes import desc_signature, pending_xref, pending_xref_condition +from sphinx.addnodes import pending_xref, pending_xref_condition from sphinx.directives import ObjectDescription from sphinx.domains.python._annotations import ( _parse_annotation, @@ -30,6 +30,7 @@ if TYPE_CHECKING: from docutils.nodes import Node from docutils.parsers.rst.states import Inliner + from sphinx.addnodes import desc_signature from sphinx.environment import BuildEnvironment from sphinx.util.typing import OptionSpec, TextlikeNode diff --git a/sphinx/domains/std/__init__.py b/sphinx/domains/std/__init__.py index d72e0adbb..f7395dad7 100644 --- a/sphinx/domains/std/__init__.py +++ b/sphinx/domains/std/__init__.py @@ -7,11 +7,11 @@ from copy import copy from typing import TYPE_CHECKING, cast from docutils import nodes -from docutils.parsers.rst import Directive, directives +from docutils.parsers.rst import directives from docutils.statemachine import StringList from sphinx import addnodes -from sphinx.addnodes import desc_signature, pending_xref +from sphinx.addnodes import pending_xref from sphinx.directives import ObjectDescription from sphinx.domains import Domain, ObjType from sphinx.locale import _, __ @@ -26,7 +26,9 @@ if TYPE_CHECKING: from typing import Any, ClassVar, Final from docutils.nodes import Element, Node, system_message + from docutils.parsers.rst import Directive + from sphinx.addnodes import desc_signature from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.environment import BuildEnvironment diff --git a/sphinx/environment/adapters/toctree.py b/sphinx/environment/adapters/toctree.py index 30e1143f3..fc74d4c25 100644 --- a/sphinx/environment/adapters/toctree.py +++ b/sphinx/environment/adapters/toctree.py @@ -5,7 +5,7 @@ from __future__ import annotations from typing import TYPE_CHECKING, TypeVar from docutils import nodes -from docutils.nodes import Element, Node +from docutils.nodes import Element from sphinx import addnodes from sphinx.locale import __ @@ -17,6 +17,8 @@ if TYPE_CHECKING: from collections.abc import Iterable, Set from typing import Any + from docutils.nodes import Node + from sphinx.builders import Builder from sphinx.environment import BuildEnvironment from sphinx.util.tags import Tags diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index e0ba0dea9..2ec2aae73 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -17,7 +17,7 @@ from typing import TYPE_CHECKING, Any, NewType, TypeVar from docutils.statemachine import StringList import sphinx -from sphinx.config import ENUM, Config +from sphinx.config import ENUM from sphinx.errors import PycodeError from sphinx.ext.autodoc.importer import get_class_members, import_module, import_object from sphinx.ext.autodoc.mock import ismock, mock, undecorate @@ -40,6 +40,7 @@ if TYPE_CHECKING: from typing import ClassVar, Literal, TypeAlias from sphinx.application import Sphinx + from sphinx.config import Config from sphinx.environment import BuildEnvironment, _CurrentDocument from sphinx.events import EventManager from sphinx.ext.autodoc.directive import DocumenterBridge diff --git a/sphinx/ext/autodoc/directive.py b/sphinx/ext/autodoc/directive.py index 985dafe1a..0893dbaf7 100644 --- a/sphinx/ext/autodoc/directive.py +++ b/sphinx/ext/autodoc/directive.py @@ -5,9 +5,9 @@ from typing import TYPE_CHECKING from docutils import nodes from docutils.statemachine import StringList -from docutils.utils import Reporter, assemble_option_dict +from docutils.utils import assemble_option_dict -from sphinx.ext.autodoc import Documenter, Options +from sphinx.ext.autodoc import Options from sphinx.util import logging from sphinx.util.docutils import SphinxDirective, switch_source_input from sphinx.util.parsing import nested_parse_to_nodes @@ -17,9 +17,11 @@ if TYPE_CHECKING: from docutils.nodes import Node from docutils.parsers.rst.states import RSTState + from docutils.utils import Reporter from sphinx.config import Config from sphinx.environment import BuildEnvironment + from sphinx.ext.autodoc import Documenter logger = logging.getLogger(__name__) diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index f76897f09..495ec3189 100644 --- a/sphinx/ext/autosummary/__init__.py +++ b/sphinx/ext/autosummary/__init__.py @@ -71,7 +71,7 @@ from sphinx import addnodes from sphinx.config import Config from sphinx.environment import BuildEnvironment from sphinx.errors import PycodeError -from sphinx.ext.autodoc import INSTANCEATTR, Documenter, Options +from sphinx.ext.autodoc import INSTANCEATTR, Options from sphinx.ext.autodoc.directive import DocumenterBridge from sphinx.ext.autodoc.importer import import_module from sphinx.ext.autodoc.mock import mock @@ -98,6 +98,7 @@ if TYPE_CHECKING: from docutils.nodes import Node, system_message from sphinx.application import Sphinx + from sphinx.ext.autodoc import Documenter from sphinx.extension import Extension from sphinx.util.typing import ExtensionMetadata, OptionSpec from sphinx.writers.html5 import HTML5Translator diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index 68dc707d2..68b463d9b 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -42,7 +42,6 @@ from docutils import nodes from docutils.parsers.rst import directives import sphinx -from sphinx import addnodes from sphinx.ext.graphviz import ( figure_wrapper, graphviz, @@ -58,6 +57,7 @@ if TYPE_CHECKING: from docutils.nodes import Node + from sphinx import addnodes from sphinx.application import Sphinx from sphinx.config import Config from sphinx.util.typing import ExtensionMetadata, OptionSpec diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index f59c37f8e..b621c34e7 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -10,7 +10,7 @@ import traceback from typing import TYPE_CHECKING, cast from docutils import nodes -from docutils.nodes import Element, Node +from docutils.nodes import Element import sphinx from sphinx import addnodes @@ -26,6 +26,8 @@ if TYPE_CHECKING: from collections.abc import Iterator, Set from typing import Any + from docutils.nodes import Node + from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.builders.html import StandaloneHTMLBuilder diff --git a/sphinx/io.py b/sphinx/io.py index 9403f194f..9df94f3a5 100644 --- a/sphinx/io.py +++ b/sphinx/io.py @@ -5,7 +5,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from docutils.core import Publisher -from docutils.io import FileInput, Input, NullOutput +from docutils.io import FileInput, NullOutput from docutils.readers import standalone from docutils.transforms.references import DanglingReferences from docutils.writers import UnfilteredWriter @@ -27,6 +27,7 @@ if TYPE_CHECKING: from docutils import nodes from docutils.frontend import Values + from docutils.io import Input from docutils.parsers import Parser from docutils.transforms import Transform diff --git a/sphinx/parsers.py b/sphinx/parsers.py index cc10ce184..814f0b988 100644 --- a/sphinx/parsers.py +++ b/sphinx/parsers.py @@ -6,7 +6,6 @@ from typing import TYPE_CHECKING import docutils.parsers import docutils.parsers.rst -from docutils import nodes from docutils.parsers.rst import states from docutils.statemachine import StringList from docutils.transforms.universal import SmartQuotes @@ -14,6 +13,7 @@ from docutils.transforms.universal import SmartQuotes from sphinx.util.rst import append_epilog, prepend_prolog if TYPE_CHECKING: + from docutils import nodes from docutils.transforms import Transform from sphinx.application import Sphinx diff --git a/sphinx/pycode/parser.py b/sphinx/pycode/parser.py index 823f1ded9..3ff98bf79 100644 --- a/sphinx/pycode/parser.py +++ b/sphinx/pycode/parser.py @@ -10,7 +10,6 @@ import itertools import operator import re import tokenize -from inspect import Signature from token import DEDENT, INDENT, NAME, NEWLINE, NUMBER, OP, STRING from tokenize import COMMENT, NL from typing import TYPE_CHECKING @@ -18,6 +17,7 @@ from typing import TYPE_CHECKING from sphinx.pycode.ast import unparse as ast_unparse if TYPE_CHECKING: + from inspect import Signature from typing import Any comment_re = re.compile('^\\s*#: ?(.*)\r?\n?$') diff --git a/sphinx/registry.py b/sphinx/registry.py index fb18e83c7..0cd94a7cd 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -8,7 +8,7 @@ from importlib.metadata import entry_points from types import MethodType from typing import TYPE_CHECKING -from sphinx.domains import Domain, Index, ObjType +from sphinx.domains import ObjType from sphinx.domains.std import GenericObject, Target from sphinx.errors import ExtensionError, SphinxError, VersionRequirementError from sphinx.extension import Extension @@ -35,6 +35,7 @@ if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.builders import Builder from sphinx.config import Config + from sphinx.domains import Domain, Index from sphinx.environment import BuildEnvironment from sphinx.ext.autodoc import Documenter from sphinx.util.typing import ( diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py index 9040c68e3..9fa43338a 100644 --- a/sphinx/search/__init__.py +++ b/sphinx/search/__init__.py @@ -14,7 +14,7 @@ from pathlib import Path from typing import TYPE_CHECKING from docutils import nodes -from docutils.nodes import Element, Node +from docutils.nodes import Element from sphinx import addnodes, package_dir from sphinx.util._pathlib import _StrPath @@ -24,6 +24,8 @@ if TYPE_CHECKING: from collections.abc import Callable, Iterable from typing import IO, Any + from docutils.nodes import Node + from sphinx.environment import BuildEnvironment _NON_MINIFIED_JS_PATH = Path(package_dir, 'search', 'non-minified-js') diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py index 5a983975b..108ac63b3 100644 --- a/sphinx/util/docutils.py +++ b/sphinx/util/docutils.py @@ -13,7 +13,7 @@ import docutils from docutils import nodes from docutils.io import FileOutput from docutils.parsers.rst import Directive, directives, roles -from docutils.statemachine import State, StateMachine, StringList +from docutils.statemachine import StateMachine from docutils.utils import Reporter, unescape from sphinx.errors import SphinxError @@ -34,6 +34,7 @@ if TYPE_CHECKING: from docutils.frontend import Values from docutils.nodes import Element, Node, system_message from docutils.parsers.rst.states import Inliner + from docutils.statemachine import State, StringList from sphinx.builders import Builder from sphinx.config import Config diff --git a/sphinx/util/parsing.py b/sphinx/util/parsing.py index 33893f880..4c4a64776 100644 --- a/sphinx/util/parsing.py +++ b/sphinx/util/parsing.py @@ -5,12 +5,13 @@ from __future__ import annotations import contextlib from typing import TYPE_CHECKING -from docutils.nodes import Element, Node +from docutils.nodes import Element from docutils.statemachine import StringList, string2lines if TYPE_CHECKING: from collections.abc import Iterator + from docutils.nodes import Node from docutils.parsers.rst.states import RSTState diff --git a/sphinx/util/rst.py b/sphinx/util/rst.py index 412edc31b..c848a9b36 100644 --- a/sphinx/util/rst.py +++ b/sphinx/util/rst.py @@ -12,7 +12,7 @@ from docutils.parsers.rst import roles from docutils.parsers.rst.languages import en as english # type: ignore[attr-defined] from docutils.parsers.rst.states import Body from docutils.utils import Reporter -from jinja2 import Environment, pass_environment +from jinja2 import pass_environment from sphinx.locale import __ from sphinx.util import docutils, logging @@ -21,6 +21,7 @@ if TYPE_CHECKING: from collections.abc import Iterator from docutils.statemachine import StringList + from jinja2 import Environment logger = logging.getLogger(__name__) diff --git a/tests/roots/test-ext-autodoc/target/autodoc_type_aliases.py b/tests/roots/test-ext-autodoc/target/autodoc_type_aliases.py index 3a1500207..846c48a43 100644 --- a/tests/roots/test-ext-autodoc/target/autodoc_type_aliases.py +++ b/tests/roots/test-ext-autodoc/target/autodoc_type_aliases.py @@ -1,7 +1,10 @@ from __future__ import annotations import io # NoQA: TC003 -from typing import Optional, overload +from typing import TYPE_CHECKING, overload + +if TYPE_CHECKING: + from typing import Optional myint = int diff --git a/tests/roots/test-ext-autodoc/target/overload.py b/tests/roots/test-ext-autodoc/target/overload.py index e8826993f..aeaf40759 100644 --- a/tests/roots/test-ext-autodoc/target/overload.py +++ b/tests/roots/test-ext-autodoc/target/overload.py @@ -1,6 +1,9 @@ from __future__ import annotations -from typing import Any, overload +from typing import TYPE_CHECKING, overload + +if TYPE_CHECKING: + from typing import Any @overload diff --git a/tests/roots/test-ext-autodoc/target/preserve_defaults.py b/tests/roots/test-ext-autodoc/target/preserve_defaults.py index 8985edae6..42a148a87 100644 --- a/tests/roots/test-ext-autodoc/target/preserve_defaults.py +++ b/tests/roots/test-ext-autodoc/target/preserve_defaults.py @@ -1,7 +1,7 @@ from __future__ import annotations from datetime import datetime -from typing import Any +from typing import Any # NoQA: TC003 CONSTANT = 'foo' SENTINEL = object() diff --git a/tests/roots/test-ext-autodoc/target/typehints.py b/tests/roots/test-ext-autodoc/target/typehints.py index 589325cbf..b2448bf4b 100644 --- a/tests/roots/test-ext-autodoc/target/typehints.py +++ b/tests/roots/test-ext-autodoc/target/typehints.py @@ -1,7 +1,10 @@ from __future__ import annotations import pathlib -from typing import Any, Tuple, TypeVar, Union # NoQA: UP035 +from typing import TYPE_CHECKING, Tuple, TypeVar, Union # NoQA: UP035 + +if TYPE_CHECKING: + from typing import Any CONST1: int #: docstring diff --git a/tests/roots/test-ext-autodoc/target/wrappedfunction.py b/tests/roots/test-ext-autodoc/target/wrappedfunction.py index 95b0ece0e..d868c5756 100644 --- a/tests/roots/test-ext-autodoc/target/wrappedfunction.py +++ b/tests/roots/test-ext-autodoc/target/wrappedfunction.py @@ -2,7 +2,7 @@ from __future__ import annotations from contextlib import contextmanager from functools import lru_cache -from typing import Generator # NoQA: UP035 +from typing import Generator # NoQA: TC003,UP035 @lru_cache(maxsize=None) # NoQA: UP033 diff --git a/tests/test_builders/test_build_linkcheck.py b/tests/test_builders/test_build_linkcheck.py index f1cc1c88a..d50200679 100644 --- a/tests/test_builders/test_build_linkcheck.py +++ b/tests/test_builders/test_build_linkcheck.py @@ -21,7 +21,6 @@ from urllib3.poolmanager import PoolManager import sphinx.util.http_date from sphinx.builders.linkcheck import ( CheckRequest, - CheckResult, Hyperlink, HyperlinkAvailabilityCheckWorker, RateLimit, @@ -41,6 +40,9 @@ if TYPE_CHECKING: from urllib3 import HTTPConnectionPool + from sphinx.builders.linkcheck import ( + CheckResult, + ) from sphinx.testing.util import SphinxTestApp