mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
👌 Make ExtensionMetadata type public and use it in internal extensions (#12153)
This type alias has now been fully documented for public consumption. This will be beneficial to the sphinx ecosystem, to aide/encourage extension developers to provide the correct metadata. Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
@@ -22,6 +22,11 @@ Deprecated
|
||||
Features added
|
||||
--------------
|
||||
|
||||
* Add public type alias :class:`sphinx.util.typing.ExtensionMetadata`.
|
||||
This can be used by extension developers
|
||||
to annotate the return type of their ``setup`` function.
|
||||
Patch by Chris Sewell.
|
||||
|
||||
* #12133: Allow ``external`` roles to reference object types
|
||||
(rather than role names). Patch by Chris Sewell.
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import Directive
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class HelloWorld(Directive):
|
||||
def run(self):
|
||||
@@ -8,7 +11,7 @@ class HelloWorld(Directive):
|
||||
return [paragraph_node]
|
||||
|
||||
|
||||
def setup(app):
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_directive('helloworld', HelloWorld)
|
||||
|
||||
return {
|
||||
|
||||
@@ -3,10 +3,12 @@ from collections import defaultdict
|
||||
from docutils.parsers.rst import directives
|
||||
|
||||
from sphinx import addnodes
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.directives import ObjectDescription
|
||||
from sphinx.domains import Domain, Index
|
||||
from sphinx.roles import XRefRole
|
||||
from sphinx.util.nodes import make_refnode
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class RecipeDirective(ObjectDescription):
|
||||
@@ -153,7 +155,7 @@ class RecipeDomain(Domain):
|
||||
self.data['recipes'].append((name, signature, 'Recipe', self.env.docname, anchor, 0))
|
||||
|
||||
|
||||
def setup(app):
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(RecipeDomain)
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import Directive
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.locale import _
|
||||
from sphinx.util.docutils import SphinxDirective
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class todo(nodes.Admonition, nodes.Element):
|
||||
@@ -111,7 +113,7 @@ def process_todo_nodes(app, doctree, fromdocname):
|
||||
node.replace_self(content)
|
||||
|
||||
|
||||
def setup(app):
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value('todo_include_todos', False, 'html')
|
||||
|
||||
app.add_node(todolist)
|
||||
|
||||
@@ -35,3 +35,9 @@ Utility components
|
||||
|
||||
.. autoclass:: sphinx.events.EventManager
|
||||
:members:
|
||||
|
||||
Utility types
|
||||
-------------
|
||||
|
||||
.. autoclass:: sphinx.util.typing.ExtensionMetadata
|
||||
:members:
|
||||
|
||||
@@ -12,6 +12,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Element
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
# deprecated name -> (object to return, canonical path or empty string)
|
||||
_DEPRECATED_OBJECTS = {
|
||||
@@ -573,7 +574,7 @@ class manpage(nodes.Inline, nodes.FixedTextElement):
|
||||
"""Node for references to manpages."""
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_node(toctree)
|
||||
|
||||
app.add_node(desc)
|
||||
|
||||
@@ -18,6 +18,7 @@ from sphinx.util.osutil import ensuredir, os_path
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -155,7 +156,7 @@ class ChangesBuilder(Builder):
|
||||
pass
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(ChangesBuilder)
|
||||
|
||||
return {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from os import path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from sphinx.builders.html import StandaloneHTMLBuilder
|
||||
from sphinx.util import logging
|
||||
@@ -11,6 +11,7 @@ from sphinx.util.osutil import SEP, os_path
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -42,7 +43,7 @@ class DirectoryHTMLBuilder(StandaloneHTMLBuilder):
|
||||
return outfilename
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.setup_extension('sphinx.builders.html')
|
||||
|
||||
app.add_builder(DirectoryHTMLBuilder)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.locale import __
|
||||
@@ -11,6 +11,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class DummyBuilder(Builder):
|
||||
@@ -38,7 +39,7 @@ class DummyBuilder(Builder):
|
||||
pass
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(DummyBuilder)
|
||||
|
||||
return {
|
||||
|
||||
@@ -22,6 +22,7 @@ from sphinx.util.osutil import make_filename
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -257,7 +258,7 @@ def convert_epub_css_files(app: Sphinx, config: Config) -> None:
|
||||
config.epub_css_files = epub_css_files # type: ignore[attr-defined]
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(Epub3Builder)
|
||||
|
||||
# config values
|
||||
|
||||
@@ -33,6 +33,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -302,7 +303,7 @@ def _gettext_compact_validator(app: Sphinx, config: Config) -> None:
|
||||
config.gettext_compact = True # type: ignore[attr-defined]
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(MessageCatalogBuilder)
|
||||
|
||||
app.add_config_value('gettext_compact', True, 'gettext', {bool, str})
|
||||
|
||||
@@ -58,6 +58,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.config import _ConfigRebuild
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.tags import Tags
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
#: the filename for the inventory of objects
|
||||
INVENTORY_FILENAME = 'objects.inv'
|
||||
@@ -1296,7 +1297,7 @@ def error_on_html_4(_app: Sphinx, config: Config) -> None:
|
||||
))
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
# builders
|
||||
app.add_builder(StandaloneHTMLBuilder)
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ from sphinx.util.nodes import NodeMatcher
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class KeyboardTransform(SphinxPostTransform):
|
||||
@@ -77,7 +78,7 @@ class KeyboardTransform(SphinxPostTransform):
|
||||
return False
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_post_transform(KeyboardTransform)
|
||||
|
||||
return {
|
||||
|
||||
@@ -39,6 +39,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
XINDY_LANG_OPTIONS = {
|
||||
# language codes from docutils.writers.latex2e.Babel
|
||||
@@ -521,7 +522,7 @@ def default_latex_documents(config: Config) -> list[tuple[str, str, str, str, st
|
||||
config.latex_theme)]
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.setup_extension('sphinx.builders.latex.transforms')
|
||||
|
||||
app.add_builder(LaTeXBuilder)
|
||||
|
||||
@@ -25,6 +25,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Element, Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
URI_SCHEMES = ('mailto:', 'http:', 'https:', 'ftp:')
|
||||
|
||||
@@ -631,7 +632,7 @@ class IndexInSectionTitleTransform(SphinxPostTransform):
|
||||
node.parent.insert(i + 1, index)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_transform(FootnoteDocnameUpdater)
|
||||
app.add_post_transform(SubstitutionDefinitionsRemover)
|
||||
app.add_post_transform(BibliographyTransform)
|
||||
|
||||
@@ -42,6 +42,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -655,7 +656,7 @@ def compile_linkcheck_allowed_redirects(app: Sphinx, config: Config) -> None:
|
||||
app.config.linkcheck_allowed_redirects.pop(url)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(CheckExternalLinksBuilder)
|
||||
app.add_post_transform(HyperlinkCollector)
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ from sphinx.writers.manpage import ManualPageTranslator, ManualPageWriter
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -114,7 +115,7 @@ def default_man_pages(config: Config) -> list[tuple[str, str, str, list[str], in
|
||||
[config.author], 1)]
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(ManualPageBuilder)
|
||||
|
||||
app.add_config_value('man_pages', default_man_pages, '')
|
||||
|
||||
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -190,7 +191,7 @@ class SingleFileHTMLBuilder(StandaloneHTMLBuilder):
|
||||
self.handle_page('opensearch', {}, 'opensearch.xml', outfilename=fn)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.setup_extension('sphinx.builders.html')
|
||||
|
||||
app.add_builder(SingleFileHTMLBuilder)
|
||||
|
||||
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
template_dir = os.path.join(package_dir, 'templates', 'texinfo')
|
||||
@@ -214,7 +215,7 @@ def default_texinfo_documents(
|
||||
'One line description of project', 'Miscellaneous')]
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(TexinfoBuilder)
|
||||
|
||||
app.add_config_value('texinfo_documents', default_texinfo_documents, '')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from os import path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils.io import StringOutput
|
||||
|
||||
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -79,7 +80,7 @@ class TextBuilder(Builder):
|
||||
pass
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(TextBuilder)
|
||||
|
||||
app.add_config_value('text_sectionchars', '*=-~"+`', 'env')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from os import path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.io import StringOutput
|
||||
@@ -21,6 +21,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -112,7 +113,7 @@ class PseudoXMLBuilder(XMLBuilder):
|
||||
_writer_class = PseudoXMLWriter
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(XMLBuilder)
|
||||
app.add_builder(PseudoXMLBuilder)
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ from sphinx.errors import ConfigError, ExtensionError
|
||||
from sphinx.locale import _, __
|
||||
from sphinx.util import logging
|
||||
from sphinx.util.osutil import fs_encoding
|
||||
from sphinx.util.typing import NoneType
|
||||
from sphinx.util.typing import ExtensionMetadata, NoneType
|
||||
|
||||
if sys.version_info >= (3, 11):
|
||||
from contextlib import chdir
|
||||
@@ -703,7 +703,7 @@ def check_root_doc(app: Sphinx, env: BuildEnvironment, added: set[str],
|
||||
return changed
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('config-inited', convert_source_suffix, priority=800)
|
||||
app.connect('config-inited', convert_highlight_options, priority=800)
|
||||
app.connect('config-inited', init_numfig_format, priority=800)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from typing import TYPE_CHECKING, Any, Generic, TypeVar, cast
|
||||
from typing import TYPE_CHECKING, Generic, TypeVar, cast
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives, roles
|
||||
@@ -14,7 +14,7 @@ from sphinx.util import docutils
|
||||
from sphinx.util.docfields import DocFieldTransformer, Field, TypedField
|
||||
from sphinx.util.docutils import SphinxDirective
|
||||
from sphinx.util.nodes import nested_parse_with_titles
|
||||
from sphinx.util.typing import OptionSpec # NoQA: TCH001
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec # NoQA: TCH001
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
@@ -356,7 +356,7 @@ class DefaultDomain(SphinxDirective):
|
||||
return []
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value("strip_signature_backslash", False, 'env')
|
||||
directives.register_directive('default-role', DefaultRole)
|
||||
directives.register_directive('default-domain', DefaultDomain)
|
||||
|
||||
@@ -20,7 +20,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -469,7 +469,7 @@ class LiteralInclude(SphinxDirective):
|
||||
return [document.reporter.warning(exc, line=self.lineno)]
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
directives.register_directive('highlight', Highlight)
|
||||
directives.register_directive('code-block', CodeBlock)
|
||||
directives.register_directive('sourcecode', CodeBlock)
|
||||
|
||||
@@ -25,7 +25,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Element, Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
|
||||
glob_re = re.compile(r'.*[*?\[].*')
|
||||
@@ -425,7 +425,7 @@ class Include(BaseInclude, SphinxDirective):
|
||||
return super().run()
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
directives.register_directive('toctree', TocTree)
|
||||
directives.register_directive('sectionauthor', Author)
|
||||
directives.register_directive('moduleauthor', Author)
|
||||
|
||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import os
|
||||
from os import path
|
||||
from typing import TYPE_CHECKING, Any, cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.nodes import Node, make_id
|
||||
@@ -21,7 +21,7 @@ from sphinx.util.osutil import SEP, os_path, relpath
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -176,7 +176,7 @@ class MathDirective(SphinxDirective):
|
||||
ret.insert(0, target)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
directives.register_directive('figure', Figure)
|
||||
directives.register_directive('meta', Meta)
|
||||
directives.register_directive('csv-table', CSVTable)
|
||||
|
||||
@@ -42,7 +42,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.domains.c._symbol import LookupKey
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -780,7 +780,7 @@ class CDomain(Domain):
|
||||
yield (name, dispname, objectType, docname, newestId, 1)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(CDomain)
|
||||
app.add_config_value("c_id_attributes", [], 'env')
|
||||
app.add_config_value("c_paren_attributes", [], 'env')
|
||||
|
||||
@@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
|
||||
versionlabels = {
|
||||
@@ -150,7 +150,7 @@ class ChangeSetDomain(Domain):
|
||||
return self.changesets.get(version, [])
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(ChangeSetDomain)
|
||||
app.add_directive('deprecated', VersionChange)
|
||||
app.add_directive('versionadded', VersionChange)
|
||||
|
||||
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -143,7 +144,7 @@ class CitationReferenceTransform(SphinxTransform):
|
||||
domain.note_citation_reference(ref)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(CitationDomain)
|
||||
app.add_transform(CitationDefinitionTransform)
|
||||
app.add_transform(CitationReferenceTransform)
|
||||
|
||||
@@ -46,7 +46,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.domains.cpp._symbol import LookupKey
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -1063,7 +1063,7 @@ class CPPDomain(Domain):
|
||||
return f'{parentName}::{target}'
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(CPPDomain)
|
||||
app.add_config_value("cpp_index_common_prefix", [], 'env')
|
||||
app.add_config_value("cpp_id_attributes", [], 'env')
|
||||
|
||||
@@ -21,7 +21,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -115,7 +115,7 @@ class IndexRole(ReferenceRole):
|
||||
return [index, target, text], []
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(IndexDomain)
|
||||
app.add_directive('index', IndexDirective)
|
||||
app.add_role('index', IndexRole())
|
||||
|
||||
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -498,7 +498,7 @@ class JavaScriptDomain(Domain):
|
||||
return '.'.join(filter(None, [modname, prefix, target]))
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(JavaScriptDomain)
|
||||
app.add_config_value(
|
||||
'javascript_maximum_signature_line_length', None, 'env', {int, type(None)},
|
||||
|
||||
@@ -20,6 +20,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -144,7 +145,7 @@ class MathDomain(Domain):
|
||||
)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(MathDomain)
|
||||
app.add_role('eq', MathReferenceRole(warn_dangling=True))
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -870,7 +870,7 @@ def builtin_resolver(app: Sphinx, env: BuildEnvironment,
|
||||
return None
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.setup_extension('sphinx.directives')
|
||||
|
||||
app.add_domain(PythonDomain)
|
||||
|
||||
@@ -24,7 +24,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -293,7 +293,7 @@ class ReSTDomain(Domain):
|
||||
yield name, name, typ, docname, node_id, 1
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(ReSTDomain)
|
||||
|
||||
return {
|
||||
|
||||
@@ -27,7 +27,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec, RoleFunction
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec, RoleFunction
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -1114,7 +1114,7 @@ def warn_missing_reference(app: Sphinx, domain: Domain, node: pending_xref,
|
||||
return True
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_domain(StandardDomain)
|
||||
app.connect('warn-missing-reference', warn_missing_reference)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ from __future__ import annotations
|
||||
import os
|
||||
from glob import glob
|
||||
from os import path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.utils import relative_path
|
||||
@@ -22,6 +22,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -136,7 +137,7 @@ class DownloadFileCollector(EnvironmentCollector):
|
||||
node['filename'] = app.env.dlfiles.add_file(app.env.docname, rel_filename)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_env_collector(ImageCollector)
|
||||
app.add_env_collector(DownloadFileCollector)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from __future__ import annotations
|
||||
|
||||
import os
|
||||
from os import path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils.utils import relative_path
|
||||
|
||||
@@ -16,6 +16,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class DependenciesCollector(EnvironmentCollector):
|
||||
@@ -47,7 +48,7 @@ class DependenciesCollector(EnvironmentCollector):
|
||||
app.env.dependencies[app.env.docname].add(relpath)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_env_collector(DependenciesCollector)
|
||||
|
||||
return {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any, cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -11,6 +11,7 @@ from sphinx.environment.collectors import EnvironmentCollector
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class MetadataCollector(EnvironmentCollector):
|
||||
@@ -60,7 +61,7 @@ class MetadataCollector(EnvironmentCollector):
|
||||
doctree.pop(index)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_env_collector(MetadataCollector)
|
||||
|
||||
return {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -12,6 +12,7 @@ from sphinx.transforms import SphinxContentsFilter
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class TitleCollector(EnvironmentCollector):
|
||||
@@ -51,7 +52,7 @@ class TitleCollector(EnvironmentCollector):
|
||||
app.env.longtitles[app.env.docname] = longtitlenode
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_env_collector(TitleCollector)
|
||||
|
||||
return {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any, TypeVar, cast
|
||||
from typing import TYPE_CHECKING, TypeVar, cast
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -20,6 +20,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
N = TypeVar('N')
|
||||
|
||||
@@ -345,7 +346,7 @@ def _make_anchor_name(ids: list[str], num_entries: list[int]) -> str:
|
||||
return anchorname
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_env_collector(TocTreeCollector)
|
||||
|
||||
return {
|
||||
|
||||
@@ -33,7 +33,13 @@ from sphinx.util.inspect import (
|
||||
safe_getattr,
|
||||
stringify_signature,
|
||||
)
|
||||
from sphinx.util.typing import OptionSpec, get_type_hints, restify, stringify_annotation
|
||||
from sphinx.util.typing import (
|
||||
ExtensionMetadata,
|
||||
OptionSpec,
|
||||
get_type_hints,
|
||||
restify,
|
||||
stringify_annotation,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterator, Sequence
|
||||
@@ -2844,7 +2850,7 @@ def autodoc_attrgetter(app: Sphinx, obj: Any, name: str, *defargs: Any) -> Any:
|
||||
return safe_getattr(obj, name, *defargs)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_autodocumenter(ModuleDocumenter)
|
||||
app.add_autodocumenter(ClassDocumenter)
|
||||
app.add_autodocumenter(ExceptionDocumenter)
|
||||
|
||||
@@ -22,6 +22,7 @@ if TYPE_CHECKING:
|
||||
from typing import Any
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
_LAMBDA_NAME = (lambda: None).__name__
|
||||
@@ -189,7 +190,7 @@ def update_defvalue(app: Sphinx, obj: Any, bound_method: bool) -> None:
|
||||
logger.warning(__("Failed to parse a default argument value for %r: %s"), obj, exc)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value('autodoc_preserve_defaults', False, 'env')
|
||||
app.connect('autodoc-before-process-signature', update_defvalue)
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ if TYPE_CHECKING:
|
||||
from collections.abc import Sequence
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -134,7 +135,7 @@ def update_annotations_using_type_comments(app: Sphinx, obj: Any, bound_method:
|
||||
logger.warning(__("Failed to parse type_comment for %r: %s"), obj, exc)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('autodoc-before-process-signature', update_annotations_using_type_comments)
|
||||
|
||||
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
|
||||
|
||||
@@ -11,7 +11,7 @@ from docutils import nodes
|
||||
import sphinx
|
||||
from sphinx import addnodes
|
||||
from sphinx.util import inspect
|
||||
from sphinx.util.typing import stringify_annotation
|
||||
from sphinx.util.typing import ExtensionMetadata, stringify_annotation
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from docutils.nodes import Element
|
||||
@@ -209,7 +209,7 @@ def augment_descriptions_with_types(
|
||||
node += field
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('autodoc-process-signature', record_typehints)
|
||||
app.connect('object-description-transform', merge_typehints)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any, cast
|
||||
from typing import TYPE_CHECKING, cast
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -16,6 +16,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -57,7 +58,7 @@ def register_sections_as_label(app: Sphinx, document: Node) -> None:
|
||||
domain.labels[name] = docname, labelid, sectname
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value('autosectionlabel_prefix_document', False, 'env')
|
||||
app.add_config_value('autosectionlabel_maxdepth', None, 'env')
|
||||
app.connect('doctree-read', register_sections_as_label)
|
||||
|
||||
@@ -95,7 +95,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.extension import Extension
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
from sphinx.writers.html import HTML5Translator
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -821,7 +821,7 @@ def process_generate_options(app: Sphinx) -> None:
|
||||
encoding=app.config.source_encoding)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
# I need autodoc
|
||||
app.setup_extension('sphinx.ext.autodoc')
|
||||
app.add_node(autosummary_toc,
|
||||
|
||||
@@ -26,6 +26,7 @@ if TYPE_CHECKING:
|
||||
from collections.abc import Iterator
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -388,7 +389,7 @@ class CoverageBuilder(Builder):
|
||||
self.py_undocumented, self.py_documented), dumpfile)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_builder(CoverageBuilder)
|
||||
app.add_config_value('coverage_ignore_modules', [], '')
|
||||
app.add_config_value('coverage_ignore_functions', [], '')
|
||||
|
||||
@@ -32,7 +32,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Element, Node, TextElement
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -563,7 +563,7 @@ Doctest summary
|
||||
run_setup_cleanup(self.cleanup_runner, group.cleanup, 'cleanup')
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_directive('testsetup', TestsetupDirective)
|
||||
app.add_directive('testcleanup', TestcleanupDirective)
|
||||
app.add_directive('doctest', DoctestDirective)
|
||||
|
||||
@@ -37,7 +37,7 @@ if TYPE_CHECKING:
|
||||
from docutils.parsers.rst.states import Inliner
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import RoleFunction
|
||||
from sphinx.util.typing import ExtensionMetadata, RoleFunction
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -117,7 +117,7 @@ def setup_link_roles(app: Sphinx) -> None:
|
||||
app.add_role(name, make_link_role(name, base_url, caption))
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value('extlinks', {}, 'env')
|
||||
app.add_config_value('extlinks_detect_hardcoded_links', False, 'env')
|
||||
|
||||
|
||||
@@ -5,13 +5,14 @@ from __future__ import annotations
|
||||
import contextlib
|
||||
import os
|
||||
import urllib.parse
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import sphinx
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
def _get_domain_from_url(url: str) -> str:
|
||||
@@ -52,6 +53,6 @@ def create_nojekyll_and_cname(app: Sphinx, env: BuildEnvironment) -> None:
|
||||
os.unlink(cname_path)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('env-updated', create_nojekyll_and_cname)
|
||||
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
|
||||
|
||||
@@ -31,7 +31,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
from sphinx.writers.html import HTML5Translator
|
||||
from sphinx.writers.latex import LaTeXTranslator
|
||||
from sphinx.writers.manpage import ManualPageTranslator
|
||||
@@ -452,7 +452,7 @@ def on_config_inited(_app: Sphinx, config: Config) -> None:
|
||||
config.html_static_path.append(css_path)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_node(graphviz,
|
||||
html=(html_visit_graphviz, None),
|
||||
latex=(latex_visit_graphviz, None),
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace of the project configuration (that is, all variables from
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
|
||||
|
||||
class ifconfig(nodes.Element):
|
||||
@@ -74,7 +74,7 @@ def process_ifconfig_nodes(app: Sphinx, doctree: nodes.document, docname: str) -
|
||||
node.replace_self(node.children)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_node(ifconfig)
|
||||
app.add_directive('ifconfig', IfConfig)
|
||||
app.connect('doctree-resolved', process_ifconfig_nodes)
|
||||
|
||||
@@ -5,7 +5,7 @@ from __future__ import annotations
|
||||
import subprocess
|
||||
import sys
|
||||
from subprocess import CalledProcessError
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import sphinx
|
||||
from sphinx.errors import ExtensionError
|
||||
@@ -15,6 +15,7 @@ from sphinx.util import logging
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -73,7 +74,7 @@ class ImagemagickConverter(ImageConverter):
|
||||
(exc.stderr, exc.stdout)) from exc
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_post_transform(ImagemagickConverter)
|
||||
if sys.platform == 'win32':
|
||||
# On Windows, we use Imagemagik v7 by default to avoid the trouble for
|
||||
|
||||
@@ -11,7 +11,7 @@ import tempfile
|
||||
from hashlib import sha1
|
||||
from os import path
|
||||
from subprocess import CalledProcessError
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -33,6 +33,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
from sphinx.writers.html import HTML5Translator
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -384,7 +385,7 @@ def html_visit_displaymath(self: HTML5Translator, node: nodes.math_block) -> Non
|
||||
raise nodes.SkipNode
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_html_math_renderer('imgmath',
|
||||
(html_visit_math, None),
|
||||
(html_visit_displaymath, None))
|
||||
|
||||
@@ -58,7 +58,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
from sphinx.writers.html import HTML5Translator
|
||||
from sphinx.writers.latex import LaTeXTranslator
|
||||
from sphinx.writers.texinfo import TexinfoTranslator
|
||||
@@ -477,7 +477,7 @@ def skip(self: nodes.NodeVisitor, node: inheritance_diagram) -> None:
|
||||
raise nodes.SkipNode
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.setup_extension('sphinx.ext.graphviz')
|
||||
app.add_node(
|
||||
inheritance_diagram,
|
||||
|
||||
@@ -53,7 +53,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.config import Config
|
||||
from sphinx.domains import Domain
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import Inventory, InventoryItem, RoleFunction
|
||||
from sphinx.util.typing import ExtensionMetadata, Inventory, InventoryItem, RoleFunction
|
||||
|
||||
InventoryCacheEntry = tuple[Union[str, None], int, Inventory]
|
||||
|
||||
@@ -707,7 +707,7 @@ def normalize_intersphinx_mapping(app: Sphinx, config: Config) -> None:
|
||||
config.intersphinx_mapping.pop(key)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value('intersphinx_mapping', {}, 'env')
|
||||
app.add_config_value('intersphinx_cache_limit', 5, '')
|
||||
app.add_config_value('intersphinx_timeout', None, '')
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docutils import nodes
|
||||
|
||||
@@ -15,6 +15,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class LinkcodeError(SphinxError):
|
||||
@@ -71,7 +72,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
|
||||
signode += onlynode
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('doctree-read', doctree_read)
|
||||
app.add_config_value('linkcode_resolve', None, '')
|
||||
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
|
||||
|
||||
@@ -21,6 +21,7 @@ from sphinx.util.math import get_node_equation_number
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
from sphinx.writers.html import HTML5Translator
|
||||
|
||||
# more information for mathjax secure url is here:
|
||||
@@ -109,7 +110,7 @@ def install_mathjax(app: Sphinx, pagename: str, templatename: str, context: dict
|
||||
builder.add_js_file(app.config.mathjax_path, **options)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_html_math_renderer('mathjax',
|
||||
(html_visit_math, None),
|
||||
(html_visit_displaymath, None))
|
||||
|
||||
@@ -11,6 +11,7 @@ from sphinx.util import inspect
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.config import _ConfigRebuild
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class Config:
|
||||
@@ -292,7 +293,7 @@ class Config:
|
||||
setattr(self, name, value)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
"""Sphinx extension setup function.
|
||||
|
||||
When the extension is loaded, Sphinx imports this module and executes
|
||||
|
||||
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import OptionSpec
|
||||
from sphinx.util.typing import ExtensionMetadata, OptionSpec
|
||||
from sphinx.writers.html import HTML5Translator
|
||||
from sphinx.writers.latex import LaTeXTranslator
|
||||
|
||||
@@ -224,7 +224,7 @@ def latex_depart_todo_node(self: LaTeXTranslator, node: todo_node) -> None:
|
||||
self.body.append('\\end{sphinxadmonition}\n')
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_event('todo-defined')
|
||||
app.add_config_value('todo_include_todos', False, 'html')
|
||||
app.add_config_value('todo_link_only', False, 'html')
|
||||
|
||||
@@ -27,6 +27,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -341,7 +342,7 @@ def collect_pages(app: Sphinx) -> Generator[tuple[str, dict[str, Any], str], Non
|
||||
yield (posixpath.join(OUTPUT_DIRNAME, 'index'), context, 'page.html')
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_config_value('viewcode_import', None, '')
|
||||
app.add_config_value('viewcode_enable_epub', False, '')
|
||||
app.add_config_value('viewcode_follow_imported_members', True, '')
|
||||
|
||||
@@ -13,7 +13,7 @@ from sphinx.util import logging
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import _ExtensionMetadata
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -22,7 +22,7 @@ class Extension:
|
||||
def __init__(self, name: str, module: Any, **kwargs: Any) -> None:
|
||||
self.name = name
|
||||
self.module = module
|
||||
self.metadata: _ExtensionMetadata = kwargs # type: ignore[assignment]
|
||||
self.metadata: ExtensionMetadata = kwargs # type: ignore[assignment]
|
||||
self.version = kwargs.pop('version', 'unknown version')
|
||||
|
||||
# The extension supports parallel read or not. The default value
|
||||
@@ -82,7 +82,7 @@ def verify_needs_extensions(app: Sphinx, config: Config) -> None:
|
||||
)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('config-inited', verify_needs_extensions, priority=800)
|
||||
|
||||
return {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import docutils.parsers
|
||||
import docutils.parsers.rst
|
||||
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class Parser(docutils.parsers.Parser):
|
||||
@@ -88,7 +89,7 @@ class RSTParser(docutils.parsers.rst.Parser, Parser):
|
||||
append_epilog(content, self.config.rst_epilog)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_source_parser(RSTParser)
|
||||
|
||||
return {
|
||||
|
||||
@@ -40,9 +40,9 @@ if TYPE_CHECKING:
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.ext.autodoc import Documenter
|
||||
from sphinx.util.typing import (
|
||||
ExtensionMetadata,
|
||||
RoleFunction,
|
||||
TitleGetter,
|
||||
_ExtensionMetadata,
|
||||
_ExtensionSetupFunc,
|
||||
)
|
||||
|
||||
@@ -460,7 +460,7 @@ class SphinxComponentRegistry:
|
||||
if setup is None:
|
||||
logger.warning(__('extension %r has no setup() function; is it really '
|
||||
'a Sphinx extension module?'), extname)
|
||||
metadata: _ExtensionMetadata = {}
|
||||
metadata: ExtensionMetadata = {}
|
||||
else:
|
||||
try:
|
||||
metadata = setup(app)
|
||||
@@ -513,7 +513,7 @@ def merge_source_suffix(app: Sphinx, config: Config) -> None:
|
||||
app.registry.source_suffix = app.config.source_suffix
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.connect('config-inited', merge_source_suffix, priority=800)
|
||||
|
||||
return {
|
||||
|
||||
@@ -22,7 +22,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import RoleFunction
|
||||
from sphinx.util.typing import ExtensionMetadata, RoleFunction
|
||||
|
||||
|
||||
generic_docroles = {
|
||||
@@ -457,7 +457,7 @@ specific_docroles: dict[str, RoleFunction] = {
|
||||
}
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
from docutils.parsers.rst import roles
|
||||
|
||||
for rolename, nodeclass in generic_docroles.items():
|
||||
|
||||
@@ -29,6 +29,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.config import Config
|
||||
from sphinx.domains.std import StandardDomain
|
||||
from sphinx.environment import BuildEnvironment
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -488,7 +489,7 @@ def _sort_key(node: nodes.Node) -> int:
|
||||
raise ValueError(msg)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_transform(ApplySourceWorkaround)
|
||||
app.add_transform(ExtraTranslatableNodes)
|
||||
app.add_transform(DefaultSubstitutions)
|
||||
|
||||
@@ -13,6 +13,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class RefOnlyListChecker(nodes.GenericNodeVisitor):
|
||||
@@ -80,7 +81,7 @@ class RefOnlyBulletListTransform(SphinxTransform):
|
||||
item.replace(para, compact_para)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_transform(RefOnlyBulletListTransform)
|
||||
|
||||
return {
|
||||
|
||||
@@ -33,6 +33,7 @@ if TYPE_CHECKING:
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.config import Config
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -611,7 +612,7 @@ class RemoveTranslatableInline(SphinxTransform):
|
||||
inline.parent += inline.children
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_transform(PreserveTranslatableMessages)
|
||||
app.add_transform(Locale)
|
||||
app.add_transform(TranslationProgressTotaliser)
|
||||
|
||||
@@ -23,6 +23,7 @@ if TYPE_CHECKING:
|
||||
from sphinx.addnodes import pending_xref
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.domains import Domain
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -288,7 +289,7 @@ class PropagateDescDomain(SphinxPostTransform):
|
||||
node['classes'].append(node.parent['domain'])
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_post_transform(ReferencesResolver)
|
||||
app.add_post_transform(OnlyNodeTransform)
|
||||
app.add_post_transform(SigElementFallbackTransform)
|
||||
|
||||
@@ -16,6 +16,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node, TextElement
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class HighlightSetting(NamedTuple):
|
||||
@@ -130,7 +131,7 @@ class TrimDoctestFlagsTransform(SphinxTransform):
|
||||
return False
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_post_transform(HighlightLanguageTransform)
|
||||
app.add_post_transform(TrimDoctestFlagsTransform)
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ from sphinx.util.osutil import ensuredir
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -275,7 +276,7 @@ class ImageConverter(BaseImageConverter):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_post_transform(ImageDownloader)
|
||||
app.add_post_transform(DataURIExtractor)
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ from sphinx.transforms import SphinxTransform
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
|
||||
class SphinxDanglingReferences(DanglingReferences):
|
||||
@@ -37,7 +38,7 @@ class SphinxDomains(SphinxTransform):
|
||||
domain.process_doc(self.env, self.env.docname, self.document)
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_transform(SphinxDanglingReferences)
|
||||
app.add_transform(SphinxDomains)
|
||||
|
||||
|
||||
@@ -90,17 +90,28 @@ InventoryItem = tuple[
|
||||
Inventory = dict[str, dict[str, InventoryItem]]
|
||||
|
||||
|
||||
# return of a setup() function
|
||||
# https://www.sphinx-doc.org/en/master/extdev/index.html#extension-metadata
|
||||
class _ExtensionMetadata(TypedDict, total=False):
|
||||
class ExtensionMetadata(TypedDict, total=False):
|
||||
"""The metadata returned by an extension's ``setup()`` function.
|
||||
|
||||
See :ref:`ext-metadata`.
|
||||
"""
|
||||
|
||||
version: str
|
||||
"""The extension version (default: ``'unknown version'``)."""
|
||||
env_version: int
|
||||
"""An integer that identifies the version of env data added by the extension."""
|
||||
parallel_read_safe: bool
|
||||
"""Indicate whether parallel reading of source files is supported
|
||||
by the extension.
|
||||
"""
|
||||
parallel_write_safe: bool
|
||||
"""Indicate whether parallel writing of output files is supported
|
||||
by the extension (default: ``True``).
|
||||
"""
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
_ExtensionSetupFunc = Callable[[Sphinx], _ExtensionMetadata]
|
||||
_ExtensionSetupFunc = Callable[[Sphinx], ExtensionMetadata]
|
||||
|
||||
|
||||
def get_type_hints(
|
||||
|
||||
@@ -17,6 +17,7 @@ if TYPE_CHECKING:
|
||||
from docutils.nodes import Node
|
||||
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.typing import ExtensionMetadata
|
||||
|
||||
try:
|
||||
import Levenshtein # type: ignore[import-not-found]
|
||||
@@ -171,7 +172,7 @@ class UIDTransform(SphinxTransform):
|
||||
list(merge_doctrees(old_doctree, self.document, env.versioning_condition))
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> dict[str, Any]:
|
||||
def setup(app: Sphinx) -> ExtensionMetadata:
|
||||
app.add_transform(UIDTransform)
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user