summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/development/tutorials/examples/autodoc_intenum.py2
-rw-r--r--sphinx/addnodes.py2
-rw-r--r--sphinx/application.py2
-rw-r--r--sphinx/builders/__init__.py2
-rw-r--r--sphinx/builders/_epub_base.py2
-rw-r--r--sphinx/builders/changes.py2
-rw-r--r--sphinx/builders/dirhtml.py2
-rw-r--r--sphinx/builders/dummy.py2
-rw-r--r--sphinx/builders/epub3.py2
-rw-r--r--sphinx/builders/gettext.py2
-rw-r--r--sphinx/builders/html/__init__.py2
-rw-r--r--sphinx/builders/html/transforms.py2
-rw-r--r--sphinx/builders/latex/__init__.py2
-rw-r--r--sphinx/builders/latex/constants.py2
-rw-r--r--sphinx/builders/latex/theming.py2
-rw-r--r--sphinx/builders/latex/transforms.py2
-rw-r--r--sphinx/builders/latex/util.py2
-rw-r--r--sphinx/builders/linkcheck.py2
-rw-r--r--sphinx/builders/manpage.py2
-rw-r--r--sphinx/builders/singlehtml.py2
-rw-r--r--sphinx/builders/texinfo.py2
-rw-r--r--sphinx/builders/text.py2
-rw-r--r--sphinx/builders/xml.py2
-rw-r--r--sphinx/cmd/build.py2
-rw-r--r--sphinx/cmd/make_mode.py2
-rw-r--r--sphinx/cmd/quickstart.py2
-rw-r--r--sphinx/config.py2
-rw-r--r--sphinx/deprecation.py2
-rw-r--r--sphinx/directives/__init__.py2
-rw-r--r--sphinx/directives/code.py2
-rw-r--r--sphinx/directives/other.py2
-rw-r--r--sphinx/directives/patches.py2
-rw-r--r--sphinx/domains/__init__.py2
-rw-r--r--sphinx/domains/c.py2
-rw-r--r--sphinx/domains/changeset.py2
-rw-r--r--sphinx/domains/citation.py2
-rw-r--r--sphinx/domains/cpp.py2
-rw-r--r--sphinx/domains/index.py2
-rw-r--r--sphinx/domains/javascript.py2
-rw-r--r--sphinx/domains/math.py2
-rw-r--r--sphinx/domains/python.py2
-rw-r--r--sphinx/domains/rst.py2
-rw-r--r--sphinx/domains/std.py2
-rw-r--r--sphinx/environment/__init__.py2
-rw-r--r--sphinx/environment/adapters/indexentries.py2
-rw-r--r--sphinx/environment/adapters/toctree.py2
-rw-r--r--sphinx/environment/collectors/__init__.py2
-rw-r--r--sphinx/environment/collectors/asset.py2
-rw-r--r--sphinx/environment/collectors/dependencies.py2
-rw-r--r--sphinx/environment/collectors/metadata.py2
-rw-r--r--sphinx/environment/collectors/title.py2
-rw-r--r--sphinx/environment/collectors/toctree.py2
-rw-r--r--sphinx/errors.py2
-rw-r--r--sphinx/events.py2
-rw-r--r--sphinx/ext/apidoc.py2
-rw-r--r--sphinx/ext/autodoc/__init__.py2
-rw-r--r--sphinx/ext/autodoc/directive.py2
-rw-r--r--sphinx/ext/autodoc/importer.py2
-rw-r--r--sphinx/ext/autodoc/mock.py2
-rw-r--r--sphinx/ext/autodoc/preserve_defaults.py2
-rw-r--r--sphinx/ext/autodoc/type_comment.py2
-rw-r--r--sphinx/ext/autodoc/typehints.py2
-rw-r--r--sphinx/ext/autosectionlabel.py2
-rw-r--r--sphinx/ext/autosummary/__init__.py2
-rw-r--r--sphinx/ext/autosummary/generate.py2
-rw-r--r--sphinx/ext/coverage.py2
-rw-r--r--sphinx/ext/doctest.py2
-rw-r--r--sphinx/ext/duration.py2
-rw-r--r--sphinx/ext/extlinks.py2
-rw-r--r--sphinx/ext/githubpages.py2
-rw-r--r--sphinx/ext/graphviz.py2
-rw-r--r--sphinx/ext/ifconfig.py2
-rw-r--r--sphinx/ext/imgconverter.py2
-rw-r--r--sphinx/ext/imgmath.py2
-rw-r--r--sphinx/ext/inheritance_diagram.py2
-rw-r--r--sphinx/ext/intersphinx.py2
-rw-r--r--sphinx/ext/linkcode.py2
-rw-r--r--sphinx/ext/mathjax.py2
-rw-r--r--sphinx/ext/napoleon/__init__.py2
-rw-r--r--sphinx/ext/napoleon/docstring.py2
-rw-r--r--sphinx/ext/napoleon/iterators.py2
-rw-r--r--sphinx/ext/todo.py2
-rw-r--r--sphinx/ext/viewcode.py2
-rw-r--r--sphinx/extension.py2
-rw-r--r--sphinx/highlighting.py2
-rw-r--r--sphinx/io.py2
-rw-r--r--sphinx/jinja2glue.py2
-rw-r--r--sphinx/parsers.py2
-rw-r--r--sphinx/project.py2
-rw-r--r--sphinx/pycode/__init__.py2
-rw-r--r--sphinx/pycode/ast.py2
-rw-r--r--sphinx/pycode/parser.py2
-rw-r--r--sphinx/registry.py2
-rw-r--r--sphinx/roles.py2
-rw-r--r--sphinx/search/__init__.py2
-rw-r--r--sphinx/search/da.py2
-rw-r--r--sphinx/search/de.py2
-rw-r--r--sphinx/search/en.py2
-rw-r--r--sphinx/search/es.py2
-rw-r--r--sphinx/search/fi.py2
-rw-r--r--sphinx/search/fr.py2
-rw-r--r--sphinx/search/hu.py2
-rw-r--r--sphinx/search/it.py2
-rw-r--r--sphinx/search/ja.py2
-rw-r--r--sphinx/search/nl.py2
-rw-r--r--sphinx/search/no.py2
-rw-r--r--sphinx/search/pt.py2
-rw-r--r--sphinx/search/ro.py2
-rw-r--r--sphinx/search/ru.py2
-rw-r--r--sphinx/search/sv.py2
-rw-r--r--sphinx/search/tr.py2
-rw-r--r--sphinx/search/zh.py2
-rw-r--r--sphinx/setup_command.py2
-rw-r--r--sphinx/testing/comparer.py2
-rw-r--r--sphinx/testing/fixtures.py2
-rw-r--r--sphinx/testing/path.py2
-rw-r--r--sphinx/testing/util.py2
-rw-r--r--sphinx/theming.py2
-rw-r--r--sphinx/transforms/__init__.py2
-rw-r--r--sphinx/transforms/compact_bullet_list.py2
-rw-r--r--sphinx/transforms/i18n.py2
-rw-r--r--sphinx/transforms/post_transforms/__init__.py2
-rw-r--r--sphinx/transforms/post_transforms/code.py2
-rw-r--r--sphinx/transforms/post_transforms/images.py2
-rw-r--r--sphinx/transforms/references.py2
-rw-r--r--sphinx/util/__init__.py2
-rw-r--r--sphinx/util/cfamily.py2
-rw-r--r--sphinx/util/console.py2
-rw-r--r--sphinx/util/docfields.py2
-rw-r--r--sphinx/util/docstrings.py2
-rw-r--r--sphinx/util/docutils.py2
-rw-r--r--sphinx/util/fileutil.py2
-rw-r--r--sphinx/util/i18n.py2
-rw-r--r--sphinx/util/images.py2
-rw-r--r--sphinx/util/inspect.py2
-rw-r--r--sphinx/util/inventory.py2
-rw-r--r--sphinx/util/jsdump.py2
-rw-r--r--sphinx/util/logging.py2
-rw-r--r--sphinx/util/matching.py2
-rw-r--r--sphinx/util/math.py2
-rw-r--r--sphinx/util/nodes.py5
-rw-r--r--sphinx/util/osutil.py2
-rw-r--r--sphinx/util/parallel.py2
-rw-r--r--sphinx/util/png.py2
-rw-r--r--sphinx/util/requests.py2
-rw-r--r--sphinx/util/rst.py2
-rw-r--r--sphinx/util/tags.py2
-rw-r--r--sphinx/util/template.py2
-rw-r--r--sphinx/util/texescape.py2
-rw-r--r--sphinx/util/typing.py2
-rw-r--r--sphinx/versioning.py2
-rw-r--r--sphinx/writers/_html4.py2
-rw-r--r--sphinx/writers/html.py2
-rw-r--r--sphinx/writers/html5.py2
-rw-r--r--sphinx/writers/latex.py2
-rw-r--r--sphinx/writers/manpage.py2
-rw-r--r--sphinx/writers/texinfo.py2
-rw-r--r--sphinx/writers/text.py2
-rw-r--r--sphinx/writers/xml.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/__init__.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/_functions_to_import.py8
-rw-r--r--tests/roots/test-ext-autodoc/target/annotated.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/classes.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/final.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/generic_class.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/genericalias.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/overload.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/preserve_defaults.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/typehints.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/typevar.py2
-rw-r--r--tests/roots/test-ext-autodoc/target/wrappedfunction.py2
-rw-r--r--tests/roots/test-ext-autosummary-filename-map/autosummary_dummy_module.py2
-rw-r--r--tests/test_build_linkcheck.py5
-rw-r--r--tests/test_ext_autodoc.py2
-rw-r--r--tests/test_ext_autodoc_autoclass.py2
-rw-r--r--tests/test_ext_autodoc_configs.py2
-rw-r--r--tests/test_ext_autodoc_mock.py2
-rw-r--r--tests/test_util_inspect.py2
-rw-r--r--tests/test_util_nodes.py2
180 files changed, 366 insertions, 6 deletions
diff --git a/doc/development/tutorials/examples/autodoc_intenum.py b/doc/development/tutorials/examples/autodoc_intenum.py
index a23f9cebf..67b5c3f70 100644
--- a/doc/development/tutorials/examples/autodoc_intenum.py
+++ b/doc/development/tutorials/examples/autodoc_intenum.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from enum import IntEnum
from typing import Any, Optional
diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py
index 00042fee9..8567d5aa9 100644
--- a/sphinx/addnodes.py
+++ b/sphinx/addnodes.py
@@ -1,5 +1,7 @@
"""Document tree nodes that Sphinx defines on top of those in Docutils."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence
from docutils import nodes
diff --git a/sphinx/application.py b/sphinx/application.py
index 1aa71d828..61c3f35c5 100644
--- a/sphinx/application.py
+++ b/sphinx/application.py
@@ -3,6 +3,8 @@
Gracefully adapted from the TextPress system by Armin.
"""
+from __future__ import annotations
+
import os
import pickle
import sys
diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py
index 1ca5eb317..96947baa5 100644
--- a/sphinx/builders/__init__.py
+++ b/sphinx/builders/__init__.py
@@ -1,5 +1,7 @@
"""Builder superclass for all builders."""
+from __future__ import annotations
+
import codecs
import pickle
import time
diff --git a/sphinx/builders/_epub_base.py b/sphinx/builders/_epub_base.py
index 2fc093522..b951e1946 100644
--- a/sphinx/builders/_epub_base.py
+++ b/sphinx/builders/_epub_base.py
@@ -1,5 +1,7 @@
"""Base class of epub2/epub3 builders."""
+from __future__ import annotations
+
import html
import os
import re
diff --git a/sphinx/builders/changes.py b/sphinx/builders/changes.py
index 618be0b3e..5090e489b 100644
--- a/sphinx/builders/changes.py
+++ b/sphinx/builders/changes.py
@@ -1,5 +1,7 @@
"""Changelog builder."""
+from __future__ import annotations
+
import html
from os import path
from typing import Any, Dict, List, Tuple, cast
diff --git a/sphinx/builders/dirhtml.py b/sphinx/builders/dirhtml.py
index e3191775c..b317f9288 100644
--- a/sphinx/builders/dirhtml.py
+++ b/sphinx/builders/dirhtml.py
@@ -1,5 +1,7 @@
"""Directory HTML builders."""
+from __future__ import annotations
+
from os import path
from typing import Any, Dict, Optional
diff --git a/sphinx/builders/dummy.py b/sphinx/builders/dummy.py
index 5cb9cae10..17d7ce277 100644
--- a/sphinx/builders/dummy.py
+++ b/sphinx/builders/dummy.py
@@ -1,5 +1,7 @@
"""Do syntax checks, but no writing."""
+from __future__ import annotations
+
from typing import Any, Dict, Optional, Set
from docutils.nodes import Node
diff --git a/sphinx/builders/epub3.py b/sphinx/builders/epub3.py
index 6b5d7e475..0242f77ad 100644
--- a/sphinx/builders/epub3.py
+++ b/sphinx/builders/epub3.py
@@ -3,6 +3,8 @@
Originally derived from epub.py.
"""
+from __future__ import annotations
+
import html
from os import path
from typing import Any, Dict, List, NamedTuple, Set, Tuple
diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py
index b7f2c4e7f..f4f69f175 100644
--- a/sphinx/builders/gettext.py
+++ b/sphinx/builders/gettext.py
@@ -1,5 +1,7 @@
"""The MessageCatalogBuilder class."""
+from __future__ import annotations
+
from codecs import open
from collections import OrderedDict, defaultdict
from datetime import datetime, timedelta, tzinfo
diff --git a/sphinx/builders/html/__init__.py b/sphinx/builders/html/__init__.py
index 2fb1b3655..e9dc0357d 100644
--- a/sphinx/builders/html/__init__.py
+++ b/sphinx/builders/html/__init__.py
@@ -1,5 +1,7 @@
"""Several HTML builders."""
+from __future__ import annotations
+
import html
import os
import posixpath
diff --git a/sphinx/builders/html/transforms.py b/sphinx/builders/html/transforms.py
index 5d34558c4..1aeba3cb7 100644
--- a/sphinx/builders/html/transforms.py
+++ b/sphinx/builders/html/transforms.py
@@ -1,5 +1,7 @@
"""Transforms for HTML builder."""
+from __future__ import annotations
+
import re
from typing import Any, Dict, List
diff --git a/sphinx/builders/latex/__init__.py b/sphinx/builders/latex/__init__.py
index b80ce01e5..107f076a1 100644
--- a/sphinx/builders/latex/__init__.py
+++ b/sphinx/builders/latex/__init__.py
@@ -1,5 +1,7 @@
"""LaTeX builder."""
+from __future__ import annotations
+
import os
import warnings
from os import path
diff --git a/sphinx/builders/latex/constants.py b/sphinx/builders/latex/constants.py
index ace608644..3d104ee17 100644
--- a/sphinx/builders/latex/constants.py
+++ b/sphinx/builders/latex/constants.py
@@ -1,5 +1,7 @@
"""consntants for LaTeX builder."""
+from __future__ import annotations
+
from typing import Any, Dict
PDFLATEX_DEFAULT_FONTPKG = r'''
diff --git a/sphinx/builders/latex/theming.py b/sphinx/builders/latex/theming.py
index 5f8300084..116ce4b06 100644
--- a/sphinx/builders/latex/theming.py
+++ b/sphinx/builders/latex/theming.py
@@ -1,5 +1,7 @@
"""Theming support for LaTeX builder."""
+from __future__ import annotations
+
import configparser
from os import path
from typing import Dict, Optional
diff --git a/sphinx/builders/latex/transforms.py b/sphinx/builders/latex/transforms.py
index d994fa141..8913e8640 100644
--- a/sphinx/builders/latex/transforms.py
+++ b/sphinx/builders/latex/transforms.py
@@ -1,5 +1,7 @@
"""Transforms for LaTeX builder."""
+from __future__ import annotations
+
from typing import Any, Dict, List, Optional, Set, Tuple, cast
from docutils import nodes
diff --git a/sphinx/builders/latex/util.py b/sphinx/builders/latex/util.py
index 15811b768..a57104f53 100644
--- a/sphinx/builders/latex/util.py
+++ b/sphinx/builders/latex/util.py
@@ -1,5 +1,7 @@
"""Utilities for LaTeX builder."""
+from __future__ import annotations
+
from typing import Optional
from docutils.writers.latex2e import Babel
diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py
index a036aeefb..67f890734 100644
--- a/sphinx/builders/linkcheck.py
+++ b/sphinx/builders/linkcheck.py
@@ -1,5 +1,7 @@
"""The CheckExternalLinksBuilder class."""
+from __future__ import annotations
+
import json
import re
import socket
diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py
index b10fef48b..24e9f398c 100644
--- a/sphinx/builders/manpage.py
+++ b/sphinx/builders/manpage.py
@@ -1,5 +1,7 @@
"""Manual pages builder."""
+from __future__ import annotations
+
import warnings
from os import path
from typing import Any, Dict, List, Optional, Set, Tuple, Union
diff --git a/sphinx/builders/singlehtml.py b/sphinx/builders/singlehtml.py
index 9930e150e..f8d157fbf 100644
--- a/sphinx/builders/singlehtml.py
+++ b/sphinx/builders/singlehtml.py
@@ -1,5 +1,7 @@
"""Single HTML builders."""
+from __future__ import annotations
+
from os import path
from typing import Any, Dict, List, Optional, Tuple, Union
diff --git a/sphinx/builders/texinfo.py b/sphinx/builders/texinfo.py
index 71fcbed57..fbc12b6e1 100644
--- a/sphinx/builders/texinfo.py
+++ b/sphinx/builders/texinfo.py
@@ -1,5 +1,7 @@
"""Texinfo builder."""
+from __future__ import annotations
+
import os
import warnings
from os import path
diff --git a/sphinx/builders/text.py b/sphinx/builders/text.py
index 4e125a0c0..1e8259da6 100644
--- a/sphinx/builders/text.py
+++ b/sphinx/builders/text.py
@@ -1,5 +1,7 @@
"""Plain-text Sphinx builder."""
+from __future__ import annotations
+
from os import path
from typing import Any, Dict, Iterator, Optional, Set, Tuple
diff --git a/sphinx/builders/xml.py b/sphinx/builders/xml.py
index e86c7684c..0f2f169ae 100644
--- a/sphinx/builders/xml.py
+++ b/sphinx/builders/xml.py
@@ -1,5 +1,7 @@
"""Docutils-native XML and pseudo-XML builders."""
+from __future__ import annotations
+
from os import path
from typing import Any, Dict, Iterator, Optional, Set, Type, Union
diff --git a/sphinx/cmd/build.py b/sphinx/cmd/build.py
index b79a4a780..778c72519 100644
--- a/sphinx/cmd/build.py
+++ b/sphinx/cmd/build.py
@@ -1,5 +1,7 @@
"""Build documentation from a provided source."""
+from __future__ import annotations
+
import argparse
import bdb
import locale
diff --git a/sphinx/cmd/make_mode.py b/sphinx/cmd/make_mode.py
index 5dbcdee49..284b2ba26 100644
--- a/sphinx/cmd/make_mode.py
+++ b/sphinx/cmd/make_mode.py
@@ -7,6 +7,8 @@ This is in its own module so that importing it is fast. It should not
import the main Sphinx modules (like sphinx.applications, sphinx.builders).
"""
+from __future__ import annotations
+
import os
import subprocess
import sys
diff --git a/sphinx/cmd/quickstart.py b/sphinx/cmd/quickstart.py
index 5139fe227..5bb9e655b 100644
--- a/sphinx/cmd/quickstart.py
+++ b/sphinx/cmd/quickstart.py
@@ -1,5 +1,7 @@
"""Quickly setup documentation source to work with Sphinx."""
+from __future__ import annotations
+
import argparse
import locale
import os
diff --git a/sphinx/config.py b/sphinx/config.py
index e2539a6cf..2c0f8e612 100644
--- a/sphinx/config.py
+++ b/sphinx/config.py
@@ -1,5 +1,7 @@
"""Build configuration file handling."""
+from __future__ import annotations
+
import re
import traceback
import types
diff --git a/sphinx/deprecation.py b/sphinx/deprecation.py
index 89fad5657..05a0357dc 100644
--- a/sphinx/deprecation.py
+++ b/sphinx/deprecation.py
@@ -1,5 +1,7 @@
"""Sphinx deprecation classes and utilities."""
+from __future__ import annotations
+
import sys
import warnings
from importlib import import_module
diff --git a/sphinx/directives/__init__.py b/sphinx/directives/__init__.py
index bafa59624..5af171e86 100644
--- a/sphinx/directives/__init__.py
+++ b/sphinx/directives/__init__.py
@@ -1,5 +1,7 @@
"""Handlers for additional ReST directives."""
+from __future__ import annotations
+
import re
from typing import TYPE_CHECKING, Any, Dict, Generic, List, Optional, Tuple, TypeVar, cast
diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py
index a872b9e47..340996183 100644
--- a/sphinx/directives/code.py
+++ b/sphinx/directives/code.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import sys
import textwrap
from difflib import unified_diff
diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py
index 1826baee6..0c2f07dcb 100644
--- a/sphinx/directives/other.py
+++ b/sphinx/directives/other.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import re
from typing import TYPE_CHECKING, Any, Dict, List, cast
diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py
index 833a9ff0b..4a38fd025 100644
--- a/sphinx/directives/patches.py
+++ b/sphinx/directives/patches.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import os
from os import path
from typing import TYPE_CHECKING, Any, Dict, List, cast
diff --git a/sphinx/domains/__init__.py b/sphinx/domains/__init__.py
index f422b8b74..11390e887 100644
--- a/sphinx/domains/__init__.py
+++ b/sphinx/domains/__init__.py
@@ -4,6 +4,8 @@ Domains are groupings of description directives
and roles describing e.g. constructs of one programming language.
"""
+from __future__ import annotations
+
import copy
from abc import ABC, abstractmethod
from typing import (TYPE_CHECKING, Any, Callable, Dict, Iterable, List, NamedTuple, Optional,
diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py
index 559aa8b25..d8c31ca51 100644
--- a/sphinx/domains/c.py
+++ b/sphinx/domains/c.py
@@ -1,5 +1,7 @@
"""The C language domain."""
+from __future__ import annotations
+
import re
from typing import (Any, Callable, Dict, Generator, Iterator, List, Optional, Tuple, TypeVar,
Union, cast)
diff --git a/sphinx/domains/changeset.py b/sphinx/domains/changeset.py
index 4a5a97f2c..f0f527882 100644
--- a/sphinx/domains/changeset.py
+++ b/sphinx/domains/changeset.py
@@ -1,5 +1,7 @@
"""The changeset domain."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, List, NamedTuple, cast
from docutils import nodes
diff --git a/sphinx/domains/citation.py b/sphinx/domains/citation.py
index 39e63b659..81c54d075 100644
--- a/sphinx/domains/citation.py
+++ b/sphinx/domains/citation.py
@@ -1,5 +1,7 @@
"""The citation domain."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Tuple, cast
from docutils import nodes
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py
index b29e4bf39..ebd368122 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -1,5 +1,7 @@
"""The C++ language domain."""
+from __future__ import annotations
+
import re
from typing import (Any, Callable, Dict, Generator, Iterator, List, Optional, Tuple, TypeVar,
Union)
diff --git a/sphinx/domains/index.py b/sphinx/domains/index.py
index 42ad3c760..b3312c287 100644
--- a/sphinx/domains/index.py
+++ b/sphinx/domains/index.py
@@ -1,5 +1,7 @@
"""The index domain."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Tuple
from docutils import nodes
diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py
index 391cebf33..83668a207 100644
--- a/sphinx/domains/javascript.py
+++ b/sphinx/domains/javascript.py
@@ -1,5 +1,7 @@
"""The JavaScript domain."""
+from __future__ import annotations
+
from typing import Any, Dict, Iterator, List, Optional, Tuple, cast
from docutils import nodes
diff --git a/sphinx/domains/math.py b/sphinx/domains/math.py
index 6df7d30cb..54e5b3c01 100644
--- a/sphinx/domains/math.py
+++ b/sphinx/domains/math.py
@@ -1,5 +1,7 @@
"""The math domain."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple
from docutils import nodes
diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py
index 8d1ae56f3..266567628 100644
--- a/sphinx/domains/python.py
+++ b/sphinx/domains/python.py
@@ -1,5 +1,7 @@
"""The Python domain."""
+from __future__ import annotations
+
import ast
import builtins
import inspect
diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py
index 8f49fcaa0..9fc3b0713 100644
--- a/sphinx/domains/rst.py
+++ b/sphinx/domains/rst.py
@@ -1,5 +1,7 @@
"""The reStructuredText domain."""
+from __future__ import annotations
+
import re
from typing import Any, Dict, Iterator, List, Optional, Tuple, cast
diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py
index 898c6f94d..5893becc7 100644
--- a/sphinx/domains/std.py
+++ b/sphinx/domains/std.py
@@ -1,5 +1,7 @@
"""The standard domain."""
+from __future__ import annotations
+
import re
from copy import copy
from typing import (TYPE_CHECKING, Any, Callable, Dict, Final, Iterable, Iterator, List,
diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py
index 05ff4b83f..28ef89499 100644
--- a/sphinx/environment/__init__.py
+++ b/sphinx/environment/__init__.py
@@ -1,5 +1,7 @@
"""Global creation environment."""
+from __future__ import annotations
+
import os
import pickle
from collections import defaultdict
diff --git a/sphinx/environment/adapters/indexentries.py b/sphinx/environment/adapters/indexentries.py
index b651acae0..9909dc948 100644
--- a/sphinx/environment/adapters/indexentries.py
+++ b/sphinx/environment/adapters/indexentries.py
@@ -1,5 +1,7 @@
"""Index entries adapters for sphinx.environment."""
+from __future__ import annotations
+
import re
import unicodedata
from itertools import groupby
diff --git a/sphinx/environment/adapters/toctree.py b/sphinx/environment/adapters/toctree.py
index 0d3315f72..1f739e358 100644
--- a/sphinx/environment/adapters/toctree.py
+++ b/sphinx/environment/adapters/toctree.py
@@ -1,5 +1,7 @@
"""Toctree adapter for sphinx.environment."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple, cast
from docutils import nodes
diff --git a/sphinx/environment/collectors/__init__.py b/sphinx/environment/collectors/__init__.py
index 6f12c1323..8291c5b6f 100644
--- a/sphinx/environment/collectors/__init__.py
+++ b/sphinx/environment/collectors/__init__.py
@@ -1,5 +1,7 @@
"""The data collector components for sphinx.environment."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Dict, List, Optional, Set
from docutils import nodes
diff --git a/sphinx/environment/collectors/asset.py b/sphinx/environment/collectors/asset.py
index c4e241674..8444dd151 100644
--- a/sphinx/environment/collectors/asset.py
+++ b/sphinx/environment/collectors/asset.py
@@ -1,5 +1,7 @@
"""The image collector for sphinx.environment."""
+from __future__ import annotations
+
import os
from glob import glob
from os import path
diff --git a/sphinx/environment/collectors/dependencies.py b/sphinx/environment/collectors/dependencies.py
index 87f7c29f2..205de616d 100644
--- a/sphinx/environment/collectors/dependencies.py
+++ b/sphinx/environment/collectors/dependencies.py
@@ -1,5 +1,7 @@
"""The dependencies collector components for sphinx.environment."""
+from __future__ import annotations
+
import os
from os import path
from typing import Any, Dict, Set
diff --git a/sphinx/environment/collectors/metadata.py b/sphinx/environment/collectors/metadata.py
index fc857d0a5..dad343cc5 100644
--- a/sphinx/environment/collectors/metadata.py
+++ b/sphinx/environment/collectors/metadata.py
@@ -1,5 +1,7 @@
"""The metadata collector components for sphinx.environment."""
+from __future__ import annotations
+
from typing import Any, Dict, List, Set, cast
from docutils import nodes
diff --git a/sphinx/environment/collectors/title.py b/sphinx/environment/collectors/title.py
index 10c5560fd..694d68fa3 100644
--- a/sphinx/environment/collectors/title.py
+++ b/sphinx/environment/collectors/title.py
@@ -1,5 +1,7 @@
"""The title collector components for sphinx.environment."""
+from __future__ import annotations
+
from typing import Any, Dict, Set
from docutils import nodes
diff --git a/sphinx/environment/collectors/toctree.py b/sphinx/environment/collectors/toctree.py
index ec43a1f8e..685024d54 100644
--- a/sphinx/environment/collectors/toctree.py
+++ b/sphinx/environment/collectors/toctree.py
@@ -1,5 +1,7 @@
"""Toctree collector for sphinx.environment."""
+from __future__ import annotations
+
from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, TypeVar, Union, cast
from docutils import nodes
diff --git a/sphinx/errors.py b/sphinx/errors.py
index 8521010ff..db754dd08 100644
--- a/sphinx/errors.py
+++ b/sphinx/errors.py
@@ -1,5 +1,7 @@
"""Contains SphinxError and a few subclasses."""
+from __future__ import annotations
+
from typing import Any, Optional
diff --git a/sphinx/events.py b/sphinx/events.py
index 448af0695..90b75ca9d 100644
--- a/sphinx/events.py
+++ b/sphinx/events.py
@@ -3,6 +3,8 @@
Gracefully adapted from the TextPress system by Armin.
"""
+from __future__ import annotations
+
from collections import defaultdict
from operator import attrgetter
from typing import TYPE_CHECKING, Any, Callable, Dict, List, NamedTuple, Tuple, Type
diff --git a/sphinx/ext/apidoc.py b/sphinx/ext/apidoc.py
index 24cc34422..4735e147f 100644
--- a/sphinx/ext/apidoc.py
+++ b/sphinx/ext/apidoc.py
@@ -9,6 +9,8 @@ Copyright 2008 Société des arts technologiques (SAT),
https://sat.qc.ca/
"""
+from __future__ import annotations
+
import argparse
import glob
import locale
diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py
index 994a91cd7..87983482d 100644
--- a/sphinx/ext/autodoc/__init__.py
+++ b/sphinx/ext/autodoc/__init__.py
@@ -5,6 +5,8 @@ the doctree, thus avoiding duplication between docstrings and documentation
for those who like elaborate docstrings.
"""
+from __future__ import annotations
+
import re
from inspect import Parameter, Signature
from types import ModuleType
diff --git a/sphinx/ext/autodoc/directive.py b/sphinx/ext/autodoc/directive.py
index a3e3f09ff..501912146 100644
--- a/sphinx/ext/autodoc/directive.py
+++ b/sphinx/ext/autodoc/directive.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from typing import Any, Callable, Dict, List, Optional, Set, Type
from docutils import nodes
diff --git a/sphinx/ext/autodoc/importer.py b/sphinx/ext/autodoc/importer.py
index d828321e1..bcd531486 100644
--- a/sphinx/ext/autodoc/importer.py
+++ b/sphinx/ext/autodoc/importer.py
@@ -1,5 +1,7 @@
"""Importer utilities for autodoc"""
+from __future__ import annotations
+
import importlib
import traceback
import warnings
diff --git a/sphinx/ext/autodoc/mock.py b/sphinx/ext/autodoc/mock.py
index 15c11c33a..0747508eb 100644
--- a/sphinx/ext/autodoc/mock.py
+++ b/sphinx/ext/autodoc/mock.py
@@ -1,5 +1,7 @@
"""mock for autodoc"""
+from __future__ import annotations
+
import contextlib
import os
import sys
diff --git a/sphinx/ext/autodoc/preserve_defaults.py b/sphinx/ext/autodoc/preserve_defaults.py
index 0b6d183a4..7c5dfb7f1 100644
--- a/sphinx/ext/autodoc/preserve_defaults.py
+++ b/sphinx/ext/autodoc/preserve_defaults.py
@@ -4,6 +4,8 @@ Preserve the default argument values of function signatures in source code
and keep them not evaluated for readability.
"""
+from __future__ import annotations
+
import ast
import inspect
from typing import Any, Dict, List, Optional
diff --git a/sphinx/ext/autodoc/type_comment.py b/sphinx/ext/autodoc/type_comment.py
index 8d8b1ffe2..edb01e5d9 100644
--- a/sphinx/ext/autodoc/type_comment.py
+++ b/sphinx/ext/autodoc/type_comment.py
@@ -1,5 +1,7 @@
"""Update annotations info of living objects using type_comments."""
+from __future__ import annotations
+
import ast
from inspect import Parameter, Signature, getsource
from typing import Any, Dict, List, Optional, cast
diff --git a/sphinx/ext/autodoc/typehints.py b/sphinx/ext/autodoc/typehints.py
index f3c9a7c60..9e30c308e 100644
--- a/sphinx/ext/autodoc/typehints.py
+++ b/sphinx/ext/autodoc/typehints.py
@@ -1,5 +1,7 @@
"""Generating content for autodoc using typehints"""
+from __future__ import annotations
+
import re
from collections import OrderedDict
from typing import Any, Dict, Iterable, Set, cast
diff --git a/sphinx/ext/autosectionlabel.py b/sphinx/ext/autosectionlabel.py
index 7dc9ddaec..dee219cd2 100644
--- a/sphinx/ext/autosectionlabel.py
+++ b/sphinx/ext/autosectionlabel.py
@@ -1,5 +1,7 @@
"""Allow reference sections by :ref: role using its title."""
+from __future__ import annotations
+
from typing import Any, Dict, cast
from docutils import nodes
diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py
index 268fb65a2..b5ab99d63 100644
--- a/sphinx/ext/autosummary/__init__.py
+++ b/sphinx/ext/autosummary/__init__.py
@@ -46,6 +46,8 @@ resolved to a Python object, and otherwise it becomes simple emphasis.
This can be used as the default role to make links 'smart'.
"""
+from __future__ import annotations
+
import inspect
import os
import posixpath
diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py
index 2950d7663..9a00cf518 100644
--- a/sphinx/ext/autosummary/generate.py
+++ b/sphinx/ext/autosummary/generate.py
@@ -12,6 +12,8 @@ Example Makefile rule::
sphinx-autogen -o source/generated source/*.rst
"""
+from __future__ import annotations
+
import argparse
import inspect
import locale
diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py
index 79e460435..72e6e0b67 100644
--- a/sphinx/ext/coverage.py
+++ b/sphinx/ext/coverage.py
@@ -4,6 +4,8 @@ Mostly written by Josip Dzolonga for the Google Highly Open Participation
contest.
"""
+from __future__ import annotations
+
import glob
import inspect
import pickle
diff --git a/sphinx/ext/doctest.py b/sphinx/ext/doctest.py
index 427038b92..5d60b627e 100644
--- a/sphinx/ext/doctest.py
+++ b/sphinx/ext/doctest.py
@@ -3,6 +3,8 @@
The extension automatically execute code snippets and checks their results.
"""
+from __future__ import annotations
+
import doctest
import re
import sys
diff --git a/sphinx/ext/duration.py b/sphinx/ext/duration.py
index 13b92fc1a..69909c29b 100644
--- a/sphinx/ext/duration.py
+++ b/sphinx/ext/duration.py
@@ -1,5 +1,7 @@
"""Measure durations of Sphinx processing."""
+from __future__ import annotations
+
from datetime import datetime, timedelta
from itertools import islice
from operator import itemgetter
diff --git a/sphinx/ext/extlinks.py b/sphinx/ext/extlinks.py
index e039a18d5..78ffd8dc0 100644
--- a/sphinx/ext/extlinks.py
+++ b/sphinx/ext/extlinks.py
@@ -17,6 +17,8 @@ You can also give an explicit caption, e.g. :exmpl:`Foo <foo>`.
Both, the url string and the caption string must escape ``%`` as ``%%``.
"""
+from __future__ import annotations
+
import re
from typing import Any, Dict, List, Tuple
diff --git a/sphinx/ext/githubpages.py b/sphinx/ext/githubpages.py
index 53e063a11..beef214ed 100644
--- a/sphinx/ext/githubpages.py
+++ b/sphinx/ext/githubpages.py
@@ -1,5 +1,7 @@
"""To publish HTML docs at GitHub Pages, create .nojekyll file."""
+from __future__ import annotations
+
import os
import urllib
from typing import Any, Dict
diff --git a/sphinx/ext/graphviz.py b/sphinx/ext/graphviz.py
index ed7278f5c..344c108b4 100644
--- a/sphinx/ext/graphviz.py
+++ b/sphinx/ext/graphviz.py
@@ -1,6 +1,8 @@
"""Allow graphviz-formatted graphs to be included inline in generated documents.
"""
+from __future__ import annotations
+
import posixpath
import re
import subprocess
diff --git a/sphinx/ext/ifconfig.py b/sphinx/ext/ifconfig.py
index f441eed9a..b9339ee2d 100644
--- a/sphinx/ext/ifconfig.py
+++ b/sphinx/ext/ifconfig.py
@@ -14,6 +14,8 @@ namespace of the project configuration (that is, all variables from
``conf.py`` are available.)
"""
+from __future__ import annotations
+
from typing import Any, Dict, List
from docutils import nodes
diff --git a/sphinx/ext/imgconverter.py b/sphinx/ext/imgconverter.py
index e52fbb61e..710bd2fa0 100644
--- a/sphinx/ext/imgconverter.py
+++ b/sphinx/ext/imgconverter.py
@@ -1,5 +1,7 @@
"""Image converter extension for Sphinx"""
+from __future__ import annotations
+
import subprocess
import sys
from subprocess import CalledProcessError
diff --git a/sphinx/ext/imgmath.py b/sphinx/ext/imgmath.py
index a5946aa01..598353569 100644
--- a/sphinx/ext/imgmath.py
+++ b/sphinx/ext/imgmath.py
@@ -1,5 +1,7 @@
"""Render math in HTML via dvipng or dvisvgm."""
+from __future__ import annotations
+
import base64
import re
import shutil
diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py
index 38fc9255a..f848ac037 100644
--- a/sphinx/ext/inheritance_diagram.py
+++ b/sphinx/ext/inheritance_diagram.py
@@ -28,6 +28,8 @@ The graph is inserted as a PNG+image map into HTML and a PDF in
LaTeX.
"""
+from __future__ import annotations
+
import builtins
import inspect
import re
diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py
index 877f9428c..6d814a9a4 100644
--- a/sphinx/ext/intersphinx.py
+++ b/sphinx/ext/intersphinx.py
@@ -16,6 +16,8 @@ This works as follows:
without Internet access.
"""
+from __future__ import annotations
+
import concurrent.futures
import functools
import posixpath
diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py
index ad7abd31b..9a2294e59 100644
--- a/sphinx/ext/linkcode.py
+++ b/sphinx/ext/linkcode.py
@@ -1,5 +1,7 @@
"""Add external links to module code in Python object descriptions."""
+from __future__ import annotations
+
from typing import Any, Dict, Set
from docutils import nodes
diff --git a/sphinx/ext/mathjax.py b/sphinx/ext/mathjax.py
index 9bdfc09c2..a69ee7f84 100644
--- a/sphinx/ext/mathjax.py
+++ b/sphinx/ext/mathjax.py
@@ -5,6 +5,8 @@ This requires the MathJax JavaScript library on your webserver/computer.
.. _MathJax: https://www.mathjax.org/
"""
+from __future__ import annotations
+
import json
from typing import Any, Dict, cast
diff --git a/sphinx/ext/napoleon/__init__.py b/sphinx/ext/napoleon/__init__.py
index e1097053b..53c731a2d 100644
--- a/sphinx/ext/napoleon/__init__.py
+++ b/sphinx/ext/napoleon/__init__.py
@@ -1,5 +1,7 @@
"""Support for NumPy and Google style docstrings."""
+from __future__ import annotations
+
from typing import Any, Dict, List
import sphinx
diff --git a/sphinx/ext/napoleon/docstring.py b/sphinx/ext/napoleon/docstring.py
index 2d915dae2..1b19104f1 100644
--- a/sphinx/ext/napoleon/docstring.py
+++ b/sphinx/ext/napoleon/docstring.py
@@ -1,5 +1,7 @@
"""Classes for docstring parsing and formatting."""
+from __future__ import annotations
+
import collections
import inspect
import re
diff --git a/sphinx/ext/napoleon/iterators.py b/sphinx/ext/napoleon/iterators.py
index 86f0dabf5..de4f05329 100644
--- a/sphinx/ext/napoleon/iterators.py
+++ b/sphinx/ext/napoleon/iterators.py
@@ -1,5 +1,7 @@
"""A collection of helpful iterators."""
+from __future__ import annotations
+
import collections
import warnings
from typing import Any, Iterable, Optional
diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py
index e35cbdba4..67409ddf9 100644
--- a/sphinx/ext/todo.py
+++ b/sphinx/ext/todo.py
@@ -5,6 +5,8 @@ The todolist directive collects all todos of your project and lists them along
with a backlink to the original location.
"""
+from __future__ import annotations
+
from typing import Any, Dict, List, cast
from docutils import nodes
diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py
index e4461f813..9a62ce348 100644
--- a/sphinx/ext/viewcode.py
+++ b/sphinx/ext/viewcode.py
@@ -1,5 +1,7 @@
"""Add links to module code in Python object descriptions."""
+from __future__ import annotations
+
import posixpath
import traceback
from os import path
diff --git a/sphinx/extension.py b/sphinx/extension.py
index 2a984f5b4..15ea8e027 100644
--- a/sphinx/extension.py
+++ b/sphinx/extension.py
@@ -1,5 +1,7 @@
"""Utilities for Sphinx extensions."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict
from packaging.version import InvalidVersion, Version
diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py
index 7716f2a12..280f9f793 100644
--- a/sphinx/highlighting.py
+++ b/sphinx/highlighting.py
@@ -1,5 +1,7 @@
"""Highlight code blocks using Pygments."""
+from __future__ import annotations
+
from functools import partial
from importlib import import_module
from typing import Any, Dict, Optional, Type, Union
diff --git a/sphinx/io.py b/sphinx/io.py
index 928f0749f..44e82bdc2 100644
--- a/sphinx/io.py
+++ b/sphinx/io.py
@@ -1,4 +1,6 @@
"""Input/Output files"""
+from __future__ import annotations
+
import codecs
import warnings
from typing import TYPE_CHECKING, Any, List, Type
diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py
index 8a551d6ef..4247a6e2e 100644
--- a/sphinx/jinja2glue.py
+++ b/sphinx/jinja2glue.py
@@ -1,5 +1,7 @@
"""Glue code for the jinja2 templating engine."""
+from __future__ import annotations
+
import pathlib
from os import path
from pprint import pformat
diff --git a/sphinx/parsers.py b/sphinx/parsers.py
index ff1f8e2cf..61c51c5a8 100644
--- a/sphinx/parsers.py
+++ b/sphinx/parsers.py
@@ -1,5 +1,7 @@
"""A Base class for additional parsers."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, Union
import docutils.parsers
diff --git a/sphinx/project.py b/sphinx/project.py
index 9dc29eb29..85db042bd 100644
--- a/sphinx/project.py
+++ b/sphinx/project.py
@@ -1,5 +1,7 @@
"""Utility function and classes for Sphinx projects."""
+from __future__ import annotations
+
import os
from glob import glob
from typing import Dict, Iterable, Optional, Set
diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py
index 67b17d21b..68dbab23e 100644
--- a/sphinx/pycode/__init__.py
+++ b/sphinx/pycode/__init__.py
@@ -1,5 +1,7 @@
"""Utilities parsing and analyzing Python code."""
+from __future__ import annotations
+
import re
import tokenize
from collections import OrderedDict
diff --git a/sphinx/pycode/ast.py b/sphinx/pycode/ast.py
index 32c016521..f5ce196ab 100644
--- a/sphinx/pycode/ast.py
+++ b/sphinx/pycode/ast.py
@@ -1,5 +1,7 @@
"""Helpers for AST (Abstract Syntax Tree)."""
+from __future__ import annotations
+
import ast
import warnings
from typing import Dict, List, Optional, Type, overload
diff --git a/sphinx/pycode/parser.py b/sphinx/pycode/parser.py
index d64fb9282..cf2303fa9 100644
--- a/sphinx/pycode/parser.py
+++ b/sphinx/pycode/parser.py
@@ -1,5 +1,7 @@
"""Utilities parsing and analyzing Python code."""
+from __future__ import annotations
+
import ast
import inspect
import itertools
diff --git a/sphinx/registry.py b/sphinx/registry.py
index f668ce662..4cefccff7 100644
--- a/sphinx/registry.py
+++ b/sphinx/registry.py
@@ -1,5 +1,7 @@
"""Sphinx component registry."""
+from __future__ import annotations
+
import traceback
import warnings
from importlib import import_module
diff --git a/sphinx/roles.py b/sphinx/roles.py
index 83dd60ea7..30626a9d4 100644
--- a/sphinx/roles.py
+++ b/sphinx/roles.py
@@ -1,5 +1,7 @@
"""Handlers for additional ReST roles."""
+from __future__ import annotations
+
import re
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Type
diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py
index 45d938949..aa5acd025 100644
--- a/sphinx/search/__init__.py
+++ b/sphinx/search/__init__.py
@@ -1,4 +1,6 @@
"""Create a full-text search index for offline search."""
+from __future__ import annotations
+
import html
import json
import pickle
diff --git a/sphinx/search/da.py b/sphinx/search/da.py
index 42559ad93..28ecfec2c 100644
--- a/sphinx/search/da.py
+++ b/sphinx/search/da.py
@@ -1,5 +1,7 @@
"""Danish search language: includes the JS Danish stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/de.py b/sphinx/search/de.py
index 3896629de..279b2bf31 100644
--- a/sphinx/search/de.py
+++ b/sphinx/search/de.py
@@ -1,5 +1,7 @@
"""German search language: includes the JS German stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/en.py b/sphinx/search/en.py
index 19bd9f019..a55f0221d 100644
--- a/sphinx/search/en.py
+++ b/sphinx/search/en.py
@@ -1,5 +1,7 @@
"""English search language: includes the JS porter stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/es.py b/sphinx/search/es.py
index 7aba54bfd..0ed9a20ae 100644
--- a/sphinx/search/es.py
+++ b/sphinx/search/es.py
@@ -1,5 +1,7 @@
"""Spanish search language: includes the JS Spanish stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/fi.py b/sphinx/search/fi.py
index 36f7e7747..52c1137b4 100644
--- a/sphinx/search/fi.py
+++ b/sphinx/search/fi.py
@@ -1,5 +1,7 @@
"""Finnish search language: includes the JS Finnish stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/fr.py b/sphinx/search/fr.py
index a469bc922..5550816c2 100644
--- a/sphinx/search/fr.py
+++ b/sphinx/search/fr.py
@@ -1,5 +1,7 @@
"""French search language: includes the JS French stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/hu.py b/sphinx/search/hu.py
index 23f7d85bb..77de918ab 100644
--- a/sphinx/search/hu.py
+++ b/sphinx/search/hu.py
@@ -1,5 +1,7 @@
"""Hungarian search language: includes the JS Hungarian stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/it.py b/sphinx/search/it.py
index 80b3b3a6d..55e2f01e9 100644
--- a/sphinx/search/it.py
+++ b/sphinx/search/it.py
@@ -1,5 +1,7 @@
"""Italian search language: includes the JS Italian stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/ja.py b/sphinx/search/ja.py
index 38520edc3..c69eccc8c 100644
--- a/sphinx/search/ja.py
+++ b/sphinx/search/ja.py
@@ -8,6 +8,8 @@
# Python Version was developed by xnights <programming.magic(at)gmail.com>.
# For details, see http://programming-magic.com/?id=170
+from __future__ import annotations
+
import os
import re
import sys
diff --git a/sphinx/search/nl.py b/sphinx/search/nl.py
index b5c549f66..38d890c6d 100644
--- a/sphinx/search/nl.py
+++ b/sphinx/search/nl.py
@@ -1,5 +1,7 @@
"""Dutch search language: includes the JS porter stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/no.py b/sphinx/search/no.py
index f11f3cf15..669c1cbf1 100644
--- a/sphinx/search/no.py
+++ b/sphinx/search/no.py
@@ -1,5 +1,7 @@
"""Norwegian search language: includes the JS Norwegian stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/pt.py b/sphinx/search/pt.py
index 1708928b2..2abe7966e 100644
--- a/sphinx/search/pt.py
+++ b/sphinx/search/pt.py
@@ -1,5 +1,7 @@
"""Portuguese search language: includes the JS Portuguese stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/ro.py b/sphinx/search/ro.py
index 4c8a22711..7ae421f2d 100644
--- a/sphinx/search/ro.py
+++ b/sphinx/search/ro.py
@@ -1,5 +1,7 @@
"""Romanian search language: includes the JS Romanian stemmer."""
+from __future__ import annotations
+
from typing import Dict, Set
import snowballstemmer
diff --git a/sphinx/search/ru.py b/sphinx/search/ru.py
index 6c4f8da94..4c04259f7 100644
--- a/sphinx/search/ru.py
+++ b/sphinx/search/ru.py
@@ -1,5 +1,7 @@
"""Russian search language: includes the JS Russian stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/sv.py b/sphinx/search/sv.py
index 176cc8da4..c5ab947fa 100644
--- a/sphinx/search/sv.py
+++ b/sphinx/search/sv.py
@@ -1,5 +1,7 @@
"""Swedish search language: includes the JS Swedish stemmer."""
+from __future__ import annotations
+
from typing import Dict
import snowballstemmer
diff --git a/sphinx/search/tr.py b/sphinx/search/tr.py
index 78d48aed0..00e1e93fc 100644
--- a/sphinx/search/tr.py
+++ b/sphinx/search/tr.py
@@ -1,5 +1,7 @@
"""Turkish search language: includes the JS Turkish stemmer."""
+from __future__ import annotations
+
from typing import Dict, Set
import snowballstemmer
diff --git a/sphinx/search/zh.py b/sphinx/search/zh.py
index 86f612d5d..8d9132280 100644
--- a/sphinx/search/zh.py
+++ b/sphinx/search/zh.py
@@ -1,5 +1,7 @@
"""Chinese search language: includes routine to split words."""
+from __future__ import annotations
+
import os
import re
from typing import Dict, List
diff --git a/sphinx/setup_command.py b/sphinx/setup_command.py
index bbeaa2281..f725ec3cc 100644
--- a/sphinx/setup_command.py
+++ b/sphinx/setup_command.py
@@ -3,6 +3,8 @@
:author: Sebastian Wiesner <basti.wiesner@gmx.net>
"""
+from __future__ import annotations
+
import os
import sys
import warnings
diff --git a/sphinx/testing/comparer.py b/sphinx/testing/comparer.py
index 09e8364bd..142d15348 100644
--- a/sphinx/testing/comparer.py
+++ b/sphinx/testing/comparer.py
@@ -1,4 +1,6 @@
"""Sphinx test comparer for pytest"""
+from __future__ import annotations
+
import difflib
import pathlib
from typing import Any, List, Union
diff --git a/sphinx/testing/fixtures.py b/sphinx/testing/fixtures.py
index 88e1bec9b..41550d393 100644
--- a/sphinx/testing/fixtures.py
+++ b/sphinx/testing/fixtures.py
@@ -1,5 +1,7 @@
"""Sphinx test fixtures for pytest"""
+from __future__ import annotations
+
import subprocess
import sys
from collections import namedtuple
diff --git a/sphinx/testing/path.py b/sphinx/testing/path.py
index 40de6f069..7c4eb7f2b 100644
--- a/sphinx/testing/path.py
+++ b/sphinx/testing/path.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import builtins
import os
import shutil
diff --git a/sphinx/testing/util.py b/sphinx/testing/util.py
index 6f0b79810..eb45d42a0 100644
--- a/sphinx/testing/util.py
+++ b/sphinx/testing/util.py
@@ -1,4 +1,6 @@
"""Sphinx test suite utilities"""
+from __future__ import annotations
+
import functools
import os
import re
diff --git a/sphinx/theming.py b/sphinx/theming.py
index a0331246f..a144af674 100644
--- a/sphinx/theming.py
+++ b/sphinx/theming.py
@@ -1,5 +1,7 @@
"""Theming support for HTML builders."""
+from __future__ import annotations
+
import configparser
import os
import shutil
diff --git a/sphinx/transforms/__init__.py b/sphinx/transforms/__init__.py
index fdffa0f7c..3bdd915f9 100644
--- a/sphinx/transforms/__init__.py
+++ b/sphinx/transforms/__init__.py
@@ -1,5 +1,7 @@
"""Docutils transforms used by Sphinx when reading documents."""
+from __future__ import annotations
+
import re
import unicodedata
from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Tuple, cast
diff --git a/sphinx/transforms/compact_bullet_list.py b/sphinx/transforms/compact_bullet_list.py
index 4bf633237..449c875c0 100644
--- a/sphinx/transforms/compact_bullet_list.py
+++ b/sphinx/transforms/compact_bullet_list.py
@@ -1,5 +1,7 @@
"""Docutils transforms used by Sphinx when reading documents."""
+from __future__ import annotations
+
from typing import Any, Dict, List, cast
from docutils import nodes
diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py
index 552aa955f..5f226683f 100644
--- a/sphinx/transforms/i18n.py
+++ b/sphinx/transforms/i18n.py
@@ -1,5 +1,7 @@
"""Docutils transforms used by Sphinx when reading documents."""
+from __future__ import annotations
+
from os import path
from re import DOTALL, match
from textwrap import indent
diff --git a/sphinx/transforms/post_transforms/__init__.py b/sphinx/transforms/post_transforms/__init__.py
index 10c5a2744..e3a27bd6d 100644
--- a/sphinx/transforms/post_transforms/__init__.py
+++ b/sphinx/transforms/post_transforms/__init__.py
@@ -1,5 +1,7 @@
"""Docutils transforms used by Sphinx."""
+from __future__ import annotations
+
import re
from typing import Any, Dict, List, Optional, Sequence, Tuple, Type, cast
diff --git a/sphinx/transforms/post_transforms/code.py b/sphinx/transforms/post_transforms/code.py
index 5a5980c4a..0308b2224 100644
--- a/sphinx/transforms/post_transforms/code.py
+++ b/sphinx/transforms/post_transforms/code.py
@@ -1,5 +1,7 @@
"""transforms for code-blocks."""
+from __future__ import annotations
+
import sys
from typing import Any, Dict, List, NamedTuple
diff --git a/sphinx/transforms/post_transforms/images.py b/sphinx/transforms/post_transforms/images.py
index 1b9e901ff..0910b6b37 100644
--- a/sphinx/transforms/post_transforms/images.py
+++ b/sphinx/transforms/post_transforms/images.py
@@ -1,5 +1,7 @@
"""Docutils transforms used by Sphinx."""
+from __future__ import annotations
+
import os
import re
from math import ceil
diff --git a/sphinx/transforms/references.py b/sphinx/transforms/references.py
index 647c83e12..0d520e026 100644
--- a/sphinx/transforms/references.py
+++ b/sphinx/transforms/references.py
@@ -1,5 +1,7 @@
"""Docutils transforms used by Sphinx."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict
from docutils.transforms.references import DanglingReferences
diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py
index c28e76091..313b32211 100644
--- a/sphinx/util/__init__.py
+++ b/sphinx/util/__init__.py
@@ -1,5 +1,7 @@
"""Utility functions for Sphinx."""
+from __future__ import annotations
+
import functools
import hashlib
import os
diff --git a/sphinx/util/cfamily.py b/sphinx/util/cfamily.py
index 21ac9b79f..15122955b 100644
--- a/sphinx/util/cfamily.py
+++ b/sphinx/util/cfamily.py
@@ -1,5 +1,7 @@
"""Utility functions common to the C and C++ domains."""
+from __future__ import annotations
+
import re
from copy import deepcopy
from typing import Any, Callable, List, Match, Optional, Pattern, Tuple, Union
diff --git a/sphinx/util/console.py b/sphinx/util/console.py
index 304f5d4a1..d4c6ff44f 100644
--- a/sphinx/util/console.py
+++ b/sphinx/util/console.py
@@ -1,5 +1,7 @@
"""Format colored console output."""
+from __future__ import annotations
+
import os
import re
import shutil
diff --git a/sphinx/util/docfields.py b/sphinx/util/docfields.py
index 7a2f802c5..ec49774f1 100644
--- a/sphinx/util/docfields.py
+++ b/sphinx/util/docfields.py
@@ -3,6 +3,8 @@
"Doc fields" are reST field lists in object descriptions that will
be domain-specifically transformed to a more appealing presentation.
"""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, Any, Dict, List, Tuple, Type, Union, cast
from docutils import nodes
diff --git a/sphinx/util/docstrings.py b/sphinx/util/docstrings.py
index eb3acefd4..8efd71bb6 100644
--- a/sphinx/util/docstrings.py
+++ b/sphinx/util/docstrings.py
@@ -1,5 +1,7 @@
"""Utilities for docstring processing."""
+from __future__ import annotations
+
import re
import sys
from typing import Dict, List, Tuple
diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py
index e45cf0db9..e80066845 100644
--- a/sphinx/util/docutils.py
+++ b/sphinx/util/docutils.py
@@ -1,5 +1,7 @@
"""Utility functions for docutils."""
+from __future__ import annotations
+
import os
import re
import warnings
diff --git a/sphinx/util/fileutil.py b/sphinx/util/fileutil.py
index e4f24f239..a4bf3d94f 100644
--- a/sphinx/util/fileutil.py
+++ b/sphinx/util/fileutil.py
@@ -1,5 +1,7 @@
"""File utility functions for Sphinx."""
+from __future__ import annotations
+
import os
import posixpath
from typing import TYPE_CHECKING, Callable, Dict, Optional
diff --git a/sphinx/util/i18n.py b/sphinx/util/i18n.py
index 6915d3091..23ba31e7c 100644
--- a/sphinx/util/i18n.py
+++ b/sphinx/util/i18n.py
@@ -1,5 +1,7 @@
"""Builder superclass for all builders."""
+from __future__ import annotations
+
import os
import re
import warnings
diff --git a/sphinx/util/images.py b/sphinx/util/images.py
index 2e13957f6..656f2e5bf 100644
--- a/sphinx/util/images.py
+++ b/sphinx/util/images.py
@@ -1,5 +1,7 @@
"""Image utility functions for Sphinx."""
+from __future__ import annotations
+
import base64
import imghdr
from collections import OrderedDict
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py
index accbb2388..7544f109b 100644
--- a/sphinx/util/inspect.py
+++ b/sphinx/util/inspect.py
@@ -1,5 +1,7 @@
"""Helpers for inspecting Python modules."""
+from __future__ import annotations
+
import ast
import builtins
import contextlib
diff --git a/sphinx/util/inventory.py b/sphinx/util/inventory.py
index 7827aec74..91369f559 100644
--- a/sphinx/util/inventory.py
+++ b/sphinx/util/inventory.py
@@ -1,4 +1,6 @@
"""Inventory utility functions for Sphinx."""
+from __future__ import annotations
+
import os
import re
import zlib
diff --git a/sphinx/util/jsdump.py b/sphinx/util/jsdump.py
index 17a3c6528..0cd59c383 100644
--- a/sphinx/util/jsdump.py
+++ b/sphinx/util/jsdump.py
@@ -3,6 +3,8 @@
Uses the basestring encode function from simplejson by Bob Ippolito.
"""
+from __future__ import annotations
+
import re
import warnings
from typing import IO, Any, Dict, List, Match, Union
diff --git a/sphinx/util/logging.py b/sphinx/util/logging.py
index 6f8b7096d..5c84755c7 100644
--- a/sphinx/util/logging.py
+++ b/sphinx/util/logging.py
@@ -1,5 +1,7 @@
"""Logging utility functions for Sphinx."""
+from __future__ import annotations
+
import logging
import logging.handlers
from collections import defaultdict
diff --git a/sphinx/util/matching.py b/sphinx/util/matching.py
index ffea2d6f3..45b49f67b 100644
--- a/sphinx/util/matching.py
+++ b/sphinx/util/matching.py
@@ -1,5 +1,7 @@
"""Pattern-matching utility functions for Sphinx."""
+from __future__ import annotations
+
import os.path
import re
from typing import Callable, Dict, Iterable, Iterator, List, Match, Optional, Pattern
diff --git a/sphinx/util/math.py b/sphinx/util/math.py
index 121c606c5..bac197d7a 100644
--- a/sphinx/util/math.py
+++ b/sphinx/util/math.py
@@ -1,5 +1,7 @@
"""Utility functions for math."""
+from __future__ import annotations
+
from typing import Optional
from docutils import nodes
diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py
index 9494b61de..4f1c2dac7 100644
--- a/sphinx/util/nodes.py
+++ b/sphinx/util/nodes.py
@@ -1,5 +1,7 @@
"""Docutils node-related utility functions for Sphinx."""
+from __future__ import annotations
+
import re
import unicodedata
from typing import (TYPE_CHECKING, Any, Callable, Iterable, List, Optional, Set, Tuple, Type,
@@ -45,7 +47,8 @@ class NodeMatcher:
A special value ``typing.Any`` matches any kind of node-attributes. For example,
following example searches ``reference`` node having ``refdomain`` attributes::
- from typing import Any
+ from __future__ import annotations
+from typing import Any
matcher = NodeMatcher(nodes.reference, refdomain=Any)
doctree.findall(matcher)
# => [<reference ...>, <reference ...>, ...]
diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py
index e8d47c5c7..485b65e88 100644
--- a/sphinx/util/osutil.py
+++ b/sphinx/util/osutil.py
@@ -1,5 +1,7 @@
"""Operating system-related utility functions for Sphinx."""
+from __future__ import annotations
+
import contextlib
import filecmp
import os
diff --git a/sphinx/util/parallel.py b/sphinx/util/parallel.py
index 201e5b5e2..a37b85346 100644
--- a/sphinx/util/parallel.py
+++ b/sphinx/util/parallel.py
@@ -1,5 +1,7 @@
"""Parallel building utilities."""
+from __future__ import annotations
+
import os
import time
import traceback
diff --git a/sphinx/util/png.py b/sphinx/util/png.py
index cb7ee8be4..d2718da18 100644
--- a/sphinx/util/png.py
+++ b/sphinx/util/png.py
@@ -1,5 +1,7 @@
"""PNG image manipulation helpers."""
+from __future__ import annotations
+
import binascii
import struct
from typing import Optional
diff --git a/sphinx/util/requests.py b/sphinx/util/requests.py
index 0f52d61ef..0b1058b88 100644
--- a/sphinx/util/requests.py
+++ b/sphinx/util/requests.py
@@ -1,5 +1,7 @@
"""Simple requests package loader"""
+from __future__ import annotations
+
import sys
import warnings
from contextlib import contextmanager
diff --git a/sphinx/util/rst.py b/sphinx/util/rst.py
index 800d15f5b..ddcef6f6d 100644
--- a/sphinx/util/rst.py
+++ b/sphinx/util/rst.py
@@ -1,5 +1,7 @@
"""reST helper functions."""
+from __future__ import annotations
+
import re
from collections import defaultdict
from contextlib import contextmanager
diff --git a/sphinx/util/tags.py b/sphinx/util/tags.py
index ac69ae852..422307952 100644
--- a/sphinx/util/tags.py
+++ b/sphinx/util/tags.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from typing import Iterator, List, Optional
from jinja2 import nodes
diff --git a/sphinx/util/template.py b/sphinx/util/template.py
index 23c68e36b..d38af78d8 100644
--- a/sphinx/util/template.py
+++ b/sphinx/util/template.py
@@ -1,5 +1,7 @@
"""Templates utility functions for Sphinx."""
+from __future__ import annotations
+
import os
from functools import partial
from os import path
diff --git a/sphinx/util/texescape.py b/sphinx/util/texescape.py
index ba885f695..2952c4388 100644
--- a/sphinx/util/texescape.py
+++ b/sphinx/util/texescape.py
@@ -1,5 +1,7 @@
"""TeX escaping helper."""
+from __future__ import annotations
+
import re
from typing import Dict, Optional
diff --git a/sphinx/util/typing.py b/sphinx/util/typing.py
index 8ad451f03..17bbdd152 100644
--- a/sphinx/util/typing.py
+++ b/sphinx/util/typing.py
@@ -1,5 +1,7 @@
"""The composite types for Sphinx."""
+from __future__ import annotations
+
import sys
import typing
from struct import Struct
diff --git a/sphinx/versioning.py b/sphinx/versioning.py
index 06cf33cc0..f42af8942 100644
--- a/sphinx/versioning.py
+++ b/sphinx/versioning.py
@@ -1,4 +1,6 @@
"""Implements the low-level algorithms Sphinx uses for versioning doctrees."""
+from __future__ import annotations
+
import pickle
from itertools import product, zip_longest
from operator import itemgetter
diff --git a/sphinx/writers/_html4.py b/sphinx/writers/_html4.py
index 4ff2ebd3a..4e996d152 100644
--- a/sphinx/writers/_html4.py
+++ b/sphinx/writers/_html4.py
@@ -1,5 +1,7 @@
"""Frozen HTML 4 translator."""
+from __future__ import annotations
+
import os
import posixpath
import re
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
index d72433b88..e425d1238 100644
--- a/sphinx/writers/html.py
+++ b/sphinx/writers/html.py
@@ -1,5 +1,7 @@
"""docutils writers handling Sphinx' custom nodes."""
+from __future__ import annotations
+
from typing import TYPE_CHECKING, cast
from docutils.writers.html4css1 import Writer
diff --git a/sphinx/writers/html5.py b/sphinx/writers/html5.py
index 6fe9b62fd..4819be450 100644
--- a/sphinx/writers/html5.py
+++ b/sphinx/writers/html5.py
@@ -1,5 +1,7 @@
"""Experimental docutils writers for HTML5 handling Sphinx's custom nodes."""
+from __future__ import annotations
+
import os
import posixpath
import re
diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
index 2b412891b..c378935d0 100644
--- a/sphinx/writers/latex.py
+++ b/sphinx/writers/latex.py
@@ -4,6 +4,8 @@ Much of this code is adapted from Dave Kuhlman's "docpy" writer from his
docutils sandbox.
"""
+from __future__ import annotations
+
import re
import warnings
from collections import defaultdict
diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py
index a55015647..48b8d936c 100644
--- a/sphinx/writers/manpage.py
+++ b/sphinx/writers/manpage.py
@@ -1,5 +1,7 @@
"""Manual page writer, extended for Sphinx custom nodes."""
+from __future__ import annotations
+
from typing import Any, Dict, Iterable, cast
from docutils import nodes
diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py
index cbac28a2f..1425beae7 100644
--- a/sphinx/writers/texinfo.py
+++ b/sphinx/writers/texinfo.py
@@ -1,5 +1,7 @@
"""Custom docutils writer for Texinfo."""
+from __future__ import annotations
+
import re
import textwrap
from os import path
diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py
index 8df01012c..8acfe4d37 100644
--- a/sphinx/writers/text.py
+++ b/sphinx/writers/text.py
@@ -1,4 +1,6 @@
"""Custom docutils writer for plain text."""
+from __future__ import annotations
+
import math
import os
import re
diff --git a/sphinx/writers/xml.py b/sphinx/writers/xml.py
index 5f9aad7fa..124c5e66a 100644
--- a/sphinx/writers/xml.py
+++ b/sphinx/writers/xml.py
@@ -1,5 +1,7 @@
"""Docutils-native XML and pseudo-XML writers."""
+from __future__ import annotations
+
from typing import Any
from docutils.writers.docutils_xml import Writer as BaseXMLWriter
diff --git a/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py b/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py
index aa7eb99a6..9d42b3872 100644
--- a/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py
+++ b/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from typing import TYPE_CHECKING
if TYPE_CHECKING:
diff --git a/tests/roots/test-ext-autodoc/target/__init__.py b/tests/roots/test-ext-autodoc/target/__init__.py
index bb2290be6..d7ee4ac0f 100644
--- a/tests/roots/test-ext-autodoc/target/__init__.py
+++ b/tests/roots/test-ext-autodoc/target/__init__.py
@@ -1,7 +1,7 @@
import enum
from io import StringIO
-from sphinx.util import save_traceback
+from ._functions_to_import import function_to_be_imported
__all__ = ['Class']
diff --git a/tests/roots/test-ext-autodoc/target/_functions_to_import.py b/tests/roots/test-ext-autodoc/target/_functions_to_import.py
new file mode 100644
index 000000000..7663e9798
--- /dev/null
+++ b/tests/roots/test-ext-autodoc/target/_functions_to_import.py
@@ -0,0 +1,8 @@
+from typing import TYPE_CHECKING, Optional
+
+if TYPE_CHECKING:
+ from sphinx.application import Sphinx
+
+
+def function_to_be_imported(app: Optional["Sphinx"]) -> str:
+ """docstring"""
diff --git a/tests/roots/test-ext-autodoc/target/annotated.py b/tests/roots/test-ext-autodoc/target/annotated.py
index 427188256..5b87518f9 100644
--- a/tests/roots/test-ext-autodoc/target/annotated.py
+++ b/tests/roots/test-ext-autodoc/target/annotated.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from typing import Annotated
diff --git a/tests/roots/test-ext-autodoc/target/classes.py b/tests/roots/test-ext-autodoc/target/classes.py
index 5ba0294fb..e5cce7a69 100644
--- a/tests/roots/test-ext-autodoc/target/classes.py
+++ b/tests/roots/test-ext-autodoc/target/classes.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from inspect import Parameter, Signature
from typing import List, Union
diff --git a/tests/roots/test-ext-autodoc/target/final.py b/tests/roots/test-ext-autodoc/target/final.py
index ff78442e7..a8c3860e3 100644
--- a/tests/roots/test-ext-autodoc/target/final.py
+++ b/tests/roots/test-ext-autodoc/target/final.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import typing
from typing import final
diff --git a/tests/roots/test-ext-autodoc/target/generic_class.py b/tests/roots/test-ext-autodoc/target/generic_class.py
index e6ff38abc..1ec80584d 100644
--- a/tests/roots/test-ext-autodoc/target/generic_class.py
+++ b/tests/roots/test-ext-autodoc/target/generic_class.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from typing import Generic, TypeVar
T = TypeVar('T')
diff --git a/tests/roots/test-ext-autodoc/target/genericalias.py b/tests/roots/test-ext-autodoc/target/genericalias.py
index 3856e034d..06026fbbc 100644
--- a/tests/roots/test-ext-autodoc/target/genericalias.py
+++ b/tests/roots/test-ext-autodoc/target/genericalias.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from typing import Callable, List
#: A list of int
diff --git a/tests/roots/test-ext-autodoc/target/overload.py b/tests/roots/test-ext-autodoc/target/overload.py
index 1b395ee5b..902f00915 100644
--- a/tests/roots/test-ext-autodoc/target/overload.py
+++ b/tests/roots/test-ext-autodoc/target/overload.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
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 0cc3b4e20..2759f27e8 100644
--- a/tests/roots/test-ext-autodoc/target/preserve_defaults.py
+++ b/tests/roots/test-ext-autodoc/target/preserve_defaults.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from datetime import datetime
from typing import Any
diff --git a/tests/roots/test-ext-autodoc/target/typehints.py b/tests/roots/test-ext-autodoc/target/typehints.py
index 4acfc8911..de2f6d2a8 100644
--- a/tests/roots/test-ext-autodoc/target/typehints.py
+++ b/tests/roots/test-ext-autodoc/target/typehints.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pathlib
from typing import Any, Tuple, TypeVar, Union
diff --git a/tests/roots/test-ext-autodoc/target/typevar.py b/tests/roots/test-ext-autodoc/target/typevar.py
index ff2d46d19..1a02f3e2e 100644
--- a/tests/roots/test-ext-autodoc/target/typevar.py
+++ b/tests/roots/test-ext-autodoc/target/typevar.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from datetime import date
from typing import NewType, TypeVar
diff --git a/tests/roots/test-ext-autodoc/target/wrappedfunction.py b/tests/roots/test-ext-autodoc/target/wrappedfunction.py
index 0bd2d2069..064d77742 100644
--- a/tests/roots/test-ext-autodoc/target/wrappedfunction.py
+++ b/tests/roots/test-ext-autodoc/target/wrappedfunction.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from contextlib import contextmanager
from functools import lru_cache
from typing import Generator
diff --git a/tests/roots/test-ext-autosummary-filename-map/autosummary_dummy_module.py b/tests/roots/test-ext-autosummary-filename-map/autosummary_dummy_module.py
index 0953b64b9..9fb1256e6 100644
--- a/tests/roots/test-ext-autosummary-filename-map/autosummary_dummy_module.py
+++ b/tests/roots/test-ext-autosummary-filename-map/autosummary_dummy_module.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from os import path
from typing import Union
diff --git a/tests/test_build_linkcheck.py b/tests/test_build_linkcheck.py
index dfdbb5ff3..0374e5d3f 100644
--- a/tests/test_build_linkcheck.py
+++ b/tests/test_build_linkcheck.py
@@ -1,5 +1,7 @@
"""Test the build process with manpage builder with the test root."""
+from __future__ import annotations
+
import http.server
import json
import re
@@ -8,7 +10,6 @@ import time
import wsgiref.handlers
from datetime import datetime
from queue import Queue
-from typing import Dict
from unittest import mock
import pytest
@@ -555,7 +556,7 @@ def test_too_many_requests_user_timeout(app, capsys):
class FakeResponse:
- headers: Dict[str, str] = {}
+ headers: dict[str, str] = {}
url = "http://localhost/"
diff --git a/tests/test_ext_autodoc.py b/tests/test_ext_autodoc.py
index 6b00373f4..ec4388bf0 100644
--- a/tests/test_ext_autodoc.py
+++ b/tests/test_ext_autodoc.py
@@ -808,7 +808,7 @@ def test_autodoc_imported_members(app):
"imported-members": None,
"ignore-module-all": None}
actual = do_autodoc(app, 'module', 'target', options)
- assert '.. py:function:: save_traceback(app: ~typing.Optional[Sphinx]) -> str' in actual
+ assert '.. py:function:: function_to_be_imported(app: ~typing.Optional[Sphinx]) -> str' in actual
@pytest.mark.sphinx('html', testroot='ext-autodoc')
diff --git a/tests/test_ext_autodoc_autoclass.py b/tests/test_ext_autodoc_autoclass.py
index 8d85d7cd3..412f3c955 100644
--- a/tests/test_ext_autodoc_autoclass.py
+++ b/tests/test_ext_autodoc_autoclass.py
@@ -4,6 +4,8 @@ This tests mainly the Documenters; the auto directives are tested in a test
source file translated by test_build.
"""
+from __future__ import annotations
+
from typing import List, Union
import pytest
diff --git a/tests/test_ext_autodoc_configs.py b/tests/test_ext_autodoc_configs.py
index 31b9139fe..4f0d06bb4 100644
--- a/tests/test_ext_autodoc_configs.py
+++ b/tests/test_ext_autodoc_configs.py
@@ -1588,7 +1588,7 @@ def test_autodoc_default_options(app):
actual = do_autodoc(app, 'class', 'target.CustomIter')
assert ' .. py:method:: target.CustomIter' not in actual
actual = do_autodoc(app, 'module', 'target')
- assert '.. py:function:: save_traceback(app)' not in actual
+ assert '.. py:function:: function_to_be_imported(app)' not in actual
# with :members:
app.config.autodoc_default_options = {'members': None}
diff --git a/tests/test_ext_autodoc_mock.py b/tests/test_ext_autodoc_mock.py
index c10350fbe..0802811ae 100644
--- a/tests/test_ext_autodoc_mock.py
+++ b/tests/test_ext_autodoc_mock.py
@@ -1,5 +1,7 @@
"""Test the autodoc extension."""
+from __future__ import annotations
+
import abc
import sys
from importlib import import_module
diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py
index 753b363da..c7f9914cc 100644
--- a/tests/test_util_inspect.py
+++ b/tests/test_util_inspect.py
@@ -1,5 +1,7 @@
"""Tests util.inspect functions."""
+from __future__ import annotations
+
import ast
import datetime
import enum
diff --git a/tests/test_util_nodes.py b/tests/test_util_nodes.py
index ad177a9f0..721851f92 100644
--- a/tests/test_util_nodes.py
+++ b/tests/test_util_nodes.py
@@ -1,4 +1,6 @@
"""Tests uti.nodes functions."""
+from __future__ import annotations
+
import warnings
from textwrap import dedent
from typing import Any