mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
mypy: Enable disallow_incomplete_defs flag for type checking
This commit is contained in:
parent
7a4bbf372a
commit
ab184ac20d
@ -40,6 +40,7 @@ paths =
|
|||||||
.
|
.
|
||||||
|
|
||||||
[mypy]
|
[mypy]
|
||||||
|
disallow_incomplete_defs = True
|
||||||
show_column_numbers = True
|
show_column_numbers = True
|
||||||
show_error_context = True
|
show_error_context = True
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
@ -12,6 +12,7 @@ import warnings
|
|||||||
from typing import Any, Dict, List, Sequence
|
from typing import Any, Dict, List, Sequence
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
|
from docutils.nodes import Node
|
||||||
|
|
||||||
from sphinx.deprecation import RemovedInSphinx30Warning, RemovedInSphinx40Warning
|
from sphinx.deprecation import RemovedInSphinx30Warning, RemovedInSphinx40Warning
|
||||||
|
|
||||||
@ -358,7 +359,8 @@ class abbreviation(nodes.abbreviation):
|
|||||||
.. deprecated:: 2.0
|
.. deprecated:: 2.0
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, rawsource: str = '', text: str = '', *children, **attributes) -> None:
|
def __init__(self, rawsource: str = '', text: str = '',
|
||||||
|
*children: Node, **attributes: Any) -> None:
|
||||||
warnings.warn("abbrevition node for Sphinx was replaced by docutils'.",
|
warnings.warn("abbrevition node for Sphinx was replaced by docutils'.",
|
||||||
RemovedInSphinx40Warning, stacklevel=2)
|
RemovedInSphinx40Warning, stacklevel=2)
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ class Sphinx:
|
|||||||
logger.debug('[app] disconnecting event: [id=%s]', listener_id)
|
logger.debug('[app] disconnecting event: [id=%s]', listener_id)
|
||||||
self.events.disconnect(listener_id)
|
self.events.disconnect(listener_id)
|
||||||
|
|
||||||
def emit(self, event: str, *args) -> List:
|
def emit(self, event: str, *args: Any) -> List:
|
||||||
"""Emit *event* and pass *arguments* to the callback functions.
|
"""Emit *event* and pass *arguments* to the callback functions.
|
||||||
|
|
||||||
Return the return values of all callbacks as a list. Do not emit core
|
Return the return values of all callbacks as a list. Do not emit core
|
||||||
@ -446,7 +446,7 @@ class Sphinx:
|
|||||||
"""
|
"""
|
||||||
return self.events.emit(event, *args)
|
return self.events.emit(event, *args)
|
||||||
|
|
||||||
def emit_firstresult(self, event: str, *args) -> Any:
|
def emit_firstresult(self, event: str, *args: Any) -> Any:
|
||||||
"""Emit *event* and pass *arguments* to the callback functions.
|
"""Emit *event* and pass *arguments* to the callback functions.
|
||||||
|
|
||||||
Return the result of the first callback that doesn't return ``None``.
|
Return the result of the first callback that doesn't return ``None``.
|
||||||
@ -524,7 +524,8 @@ class Sphinx:
|
|||||||
"""
|
"""
|
||||||
self.registry.add_translator(name, translator_class, override=override)
|
self.registry.add_translator(name, translator_class, override=override)
|
||||||
|
|
||||||
def add_node(self, node: "Type[Element]", override: bool = False, **kwds) -> None:
|
def add_node(self, node: "Type[Element]", override: bool = False,
|
||||||
|
**kwds: Tuple[Callable, Callable]) -> None:
|
||||||
"""Register a Docutils node class.
|
"""Register a Docutils node class.
|
||||||
|
|
||||||
This is necessary for Docutils internals. It may also be used in the
|
This is necessary for Docutils internals. It may also be used in the
|
||||||
@ -564,7 +565,7 @@ class Sphinx:
|
|||||||
|
|
||||||
def add_enumerable_node(self, node: "Type[Element]", figtype: str,
|
def add_enumerable_node(self, node: "Type[Element]", figtype: str,
|
||||||
title_getter: TitleGetter = None, override: bool = False,
|
title_getter: TitleGetter = None, override: bool = False,
|
||||||
**kwds) -> None:
|
**kwds: Tuple[Callable, Callable]) -> None:
|
||||||
"""Register a Docutils node class as a numfig target.
|
"""Register a Docutils node class as a numfig target.
|
||||||
|
|
||||||
Sphinx numbers the node automatically. And then the users can refer it
|
Sphinx numbers the node automatically. And then the users can refer it
|
||||||
@ -600,7 +601,7 @@ class Sphinx:
|
|||||||
|
|
||||||
def add_directive(self, name: str, obj: Any, content: bool = None,
|
def add_directive(self, name: str, obj: Any, content: bool = None,
|
||||||
arguments: Tuple[int, int, bool] = None, override: bool = False,
|
arguments: Tuple[int, int, bool] = None, override: bool = False,
|
||||||
**options) -> None:
|
**options: Any) -> None:
|
||||||
"""Register a Docutils directive.
|
"""Register a Docutils directive.
|
||||||
|
|
||||||
*name* must be the prospective directive name. There are two possible
|
*name* must be the prospective directive name. There are two possible
|
||||||
@ -729,7 +730,7 @@ class Sphinx:
|
|||||||
|
|
||||||
def add_directive_to_domain(self, domain: str, name: str, obj: Any,
|
def add_directive_to_domain(self, domain: str, name: str, obj: Any,
|
||||||
has_content: bool = None, argument_spec: Any = None,
|
has_content: bool = None, argument_spec: Any = None,
|
||||||
override: bool = False, **option_spec) -> None:
|
override: bool = False, **option_spec: Any) -> None:
|
||||||
"""Register a Docutils directive in a domain.
|
"""Register a Docutils directive in a domain.
|
||||||
|
|
||||||
Like :meth:`add_directive`, but the directive is added to the domain
|
Like :meth:`add_directive`, but the directive is added to the domain
|
||||||
@ -1099,7 +1100,7 @@ class Sphinx:
|
|||||||
"""
|
"""
|
||||||
self.registry.add_source_suffix(suffix, filetype, override=override)
|
self.registry.add_source_suffix(suffix, filetype, override=override)
|
||||||
|
|
||||||
def add_source_parser(self, *args, **kwargs) -> None:
|
def add_source_parser(self, *args: Any, **kwargs: Any) -> None:
|
||||||
"""Register a parser class.
|
"""Register a parser class.
|
||||||
|
|
||||||
.. versionadded:: 1.4
|
.. versionadded:: 1.4
|
||||||
|
@ -118,11 +118,11 @@ class Builder:
|
|||||||
self.env.set_versioning_method(self.versioning_method,
|
self.env.set_versioning_method(self.versioning_method,
|
||||||
self.versioning_compare)
|
self.versioning_compare)
|
||||||
|
|
||||||
def get_translator_class(self, *args) -> "Type[nodes.NodeVisitor]":
|
def get_translator_class(self, *args: Any) -> "Type[nodes.NodeVisitor]":
|
||||||
"""Return a class of translator."""
|
"""Return a class of translator."""
|
||||||
return self.app.registry.get_translator_class(self)
|
return self.app.registry.get_translator_class(self)
|
||||||
|
|
||||||
def create_translator(self, *args) -> nodes.NodeVisitor:
|
def create_translator(self, *args: Any) -> nodes.NodeVisitor:
|
||||||
"""Return an instance of translator.
|
"""Return an instance of translator.
|
||||||
|
|
||||||
This method returns an instance of ``default_translator_class`` by default.
|
This method returns an instance of ``default_translator_class`` by default.
|
||||||
|
@ -50,7 +50,7 @@ class ChangesBuilder(Builder):
|
|||||||
'deprecated': 'deprecated',
|
'deprecated': 'deprecated',
|
||||||
}
|
}
|
||||||
|
|
||||||
def write(self, *ignored) -> None:
|
def write(self, *ignored: Any) -> None:
|
||||||
version = self.config.version
|
version = self.config.version
|
||||||
domain = cast(ChangeSetDomain, self.env.get_domain('changeset'))
|
domain = cast(ChangeSetDomain, self.env.get_domain('changeset'))
|
||||||
libchanges = {} # type: Dict[str, List[Tuple[str, str, int]]]
|
libchanges = {} # type: Dict[str, List[Tuple[str, str, int]]]
|
||||||
|
@ -198,7 +198,7 @@ if source_date_epoch is not None:
|
|||||||
|
|
||||||
|
|
||||||
class LocalTimeZone(tzinfo):
|
class LocalTimeZone(tzinfo):
|
||||||
def __init__(self, *args, **kw) -> None:
|
def __init__(self, *args: Any, **kw: Any) -> None:
|
||||||
super().__init__(*args, **kw) # type: ignore
|
super().__init__(*args, **kw) # type: ignore
|
||||||
self.tzdelta = tzdelta
|
self.tzdelta = tzdelta
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ class LocalTimeZone(tzinfo):
|
|||||||
ltz = LocalTimeZone()
|
ltz = LocalTimeZone()
|
||||||
|
|
||||||
|
|
||||||
def should_write(filepath: str, new_content: str):
|
def should_write(filepath: str, new_content: str) -> bool:
|
||||||
if not path.exists(filepath):
|
if not path.exists(filepath):
|
||||||
return True
|
return True
|
||||||
try:
|
try:
|
||||||
|
@ -887,7 +887,7 @@ class StandaloneHTMLBuilder(Builder):
|
|||||||
indexer_name, indexer_name),
|
indexer_name, indexer_name),
|
||||||
RemovedInSphinx40Warning)
|
RemovedInSphinx40Warning)
|
||||||
|
|
||||||
def _get_local_toctree(self, docname: str, collapse: bool = True, **kwds) -> str:
|
def _get_local_toctree(self, docname: str, collapse: bool = True, **kwds: Any) -> str:
|
||||||
if 'includehidden' not in kwds:
|
if 'includehidden' not in kwds:
|
||||||
kwds['includehidden'] = False
|
kwds['includehidden'] = False
|
||||||
return self.render_partial(TocTree(self.env).get_toctree_for(
|
return self.render_partial(TocTree(self.env).get_toctree_for(
|
||||||
@ -1000,7 +1000,7 @@ class StandaloneHTMLBuilder(Builder):
|
|||||||
return False
|
return False
|
||||||
ctx['hasdoc'] = hasdoc
|
ctx['hasdoc'] = hasdoc
|
||||||
|
|
||||||
def warn(*args, **kwargs) -> str:
|
def warn(*args: Any, **kwargs: Any) -> str:
|
||||||
"""Simple warn() wrapper for themes."""
|
"""Simple warn() wrapper for themes."""
|
||||||
warnings.warn('The template function warn() was deprecated. '
|
warnings.warn('The template function warn() was deprecated. '
|
||||||
'Use warning() instead.',
|
'Use warning() instead.',
|
||||||
|
@ -216,7 +216,7 @@ class LaTeXBuilder(Builder):
|
|||||||
'[2016/05/29 stylesheet for highlighting with pygments]\n\n')
|
'[2016/05/29 stylesheet for highlighting with pygments]\n\n')
|
||||||
f.write(highlighter.get_stylesheet())
|
f.write(highlighter.get_stylesheet())
|
||||||
|
|
||||||
def write(self, *ignored) -> None:
|
def write(self, *ignored: Any) -> None:
|
||||||
docwriter = LaTeXWriter(self)
|
docwriter = LaTeXWriter(self)
|
||||||
docsettings = OptionParser(
|
docsettings = OptionParser(
|
||||||
defaults=self.env.settings,
|
defaults=self.env.settings,
|
||||||
|
@ -32,7 +32,7 @@ class FootnoteDocnameUpdater(SphinxTransform):
|
|||||||
default_priority = 700
|
default_priority = 700
|
||||||
TARGET_NODES = (nodes.footnote, nodes.footnote_reference)
|
TARGET_NODES = (nodes.footnote, nodes.footnote_reference)
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
matcher = NodeMatcher(*self.TARGET_NODES)
|
matcher = NodeMatcher(*self.TARGET_NODES)
|
||||||
for node in self.document.traverse(matcher): # type: nodes.Element
|
for node in self.document.traverse(matcher): # type: nodes.Element
|
||||||
node['docname'] = self.env.docname
|
node['docname'] = self.env.docname
|
||||||
@ -51,7 +51,7 @@ class ShowUrlsTransform(SphinxPostTransform):
|
|||||||
# references are expanded to footnotes (or not)
|
# references are expanded to footnotes (or not)
|
||||||
expanded = False
|
expanded = False
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
try:
|
try:
|
||||||
# replace id_prefix temporarily
|
# replace id_prefix temporarily
|
||||||
settings = self.document.settings # type: Any
|
settings = self.document.settings # type: Any
|
||||||
@ -338,7 +338,7 @@ class LaTeXFootnoteTransform(SphinxPostTransform):
|
|||||||
default_priority = 600
|
default_priority = 600
|
||||||
builders = ('latex',)
|
builders = ('latex',)
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
footnotes = list(self.document.traverse(nodes.footnote))
|
footnotes = list(self.document.traverse(nodes.footnote))
|
||||||
for node in footnotes:
|
for node in footnotes:
|
||||||
node.parent.remove(node)
|
node.parent.remove(node)
|
||||||
@ -490,7 +490,7 @@ class BibliographyTransform(SphinxPostTransform):
|
|||||||
default_priority = 750
|
default_priority = 750
|
||||||
builders = ('latex',)
|
builders = ('latex',)
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
citations = thebibliography()
|
citations = thebibliography()
|
||||||
for node in self.document.traverse(nodes.citation):
|
for node in self.document.traverse(nodes.citation):
|
||||||
node.parent.remove(node)
|
node.parent.remove(node)
|
||||||
@ -509,7 +509,7 @@ class CitationReferenceTransform(SphinxPostTransform):
|
|||||||
default_priority = 5 # before ReferencesResolver
|
default_priority = 5 # before ReferencesResolver
|
||||||
builders = ('latex',)
|
builders = ('latex',)
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
domain = cast(CitationDomain, self.env.get_domain('citation'))
|
domain = cast(CitationDomain, self.env.get_domain('citation'))
|
||||||
matcher = NodeMatcher(addnodes.pending_xref, refdomain='citation', reftype='ref')
|
matcher = NodeMatcher(addnodes.pending_xref, refdomain='citation', reftype='ref')
|
||||||
for node in self.document.traverse(matcher): # type: addnodes.pending_xref
|
for node in self.document.traverse(matcher): # type: addnodes.pending_xref
|
||||||
@ -529,7 +529,7 @@ class MathReferenceTransform(SphinxPostTransform):
|
|||||||
default_priority = 5 # before ReferencesResolver
|
default_priority = 5 # before ReferencesResolver
|
||||||
builders = ('latex',)
|
builders = ('latex',)
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
equations = self.env.get_domain('math').data['objects']
|
equations = self.env.get_domain('math').data['objects']
|
||||||
for node in self.document.traverse(addnodes.pending_xref):
|
for node in self.document.traverse(addnodes.pending_xref):
|
||||||
if node['refdomain'] == 'math' and node['reftype'] in ('eq', 'numref'):
|
if node['refdomain'] == 'math' and node['reftype'] in ('eq', 'numref'):
|
||||||
@ -544,7 +544,7 @@ class LiteralBlockTransform(SphinxPostTransform):
|
|||||||
default_priority = 400
|
default_priority = 400
|
||||||
builders = ('latex',)
|
builders = ('latex',)
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
matcher = NodeMatcher(nodes.container, literal_block=True)
|
matcher = NodeMatcher(nodes.container, literal_block=True)
|
||||||
for node in self.document.traverse(matcher): # type: nodes.container
|
for node in self.document.traverse(matcher): # type: nodes.container
|
||||||
newnode = captioned_literal_block('', *node.children, **node.attributes)
|
newnode = captioned_literal_block('', *node.children, **node.attributes)
|
||||||
@ -556,7 +556,7 @@ class DocumentTargetTransform(SphinxPostTransform):
|
|||||||
default_priority = 400
|
default_priority = 400
|
||||||
builders = ('latex',)
|
builders = ('latex',)
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(addnodes.start_of_file):
|
for node in self.document.traverse(addnodes.start_of_file):
|
||||||
section = node.next_node(nodes.section)
|
section = node.next_node(nodes.section)
|
||||||
if section:
|
if section:
|
||||||
|
@ -56,7 +56,7 @@ class ManualPageBuilder(Builder):
|
|||||||
raise NoUri
|
raise NoUri
|
||||||
|
|
||||||
@progress_message(__('writing'))
|
@progress_message(__('writing'))
|
||||||
def write(self, *ignored) -> None:
|
def write(self, *ignored: Any) -> None:
|
||||||
docwriter = ManualPageWriter(self)
|
docwriter = ManualPageWriter(self)
|
||||||
docsettings = OptionParser(
|
docsettings = OptionParser(
|
||||||
defaults=self.env.settings,
|
defaults=self.env.settings,
|
||||||
|
@ -67,7 +67,7 @@ class SingleFileHTMLBuilder(StandaloneHTMLBuilder):
|
|||||||
if hashindex >= 0:
|
if hashindex >= 0:
|
||||||
refnode['refuri'] = fname + refuri[hashindex:]
|
refnode['refuri'] = fname + refuri[hashindex:]
|
||||||
|
|
||||||
def _get_local_toctree(self, docname: str, collapse: bool = True, **kwds) -> str:
|
def _get_local_toctree(self, docname: str, collapse: bool = True, **kwds: Any) -> str:
|
||||||
if 'includehidden' not in kwds:
|
if 'includehidden' not in kwds:
|
||||||
kwds['includehidden'] = False
|
kwds['includehidden'] = False
|
||||||
toctree = TocTree(self.env).get_toctree_for(docname, self, collapse, **kwds)
|
toctree = TocTree(self.env).get_toctree_for(docname, self, collapse, **kwds)
|
||||||
@ -149,7 +149,7 @@ class SingleFileHTMLBuilder(StandaloneHTMLBuilder):
|
|||||||
'display_toc': display_toc,
|
'display_toc': display_toc,
|
||||||
}
|
}
|
||||||
|
|
||||||
def write(self, *ignored) -> None:
|
def write(self, *ignored: Any) -> None:
|
||||||
docnames = self.env.all_docs
|
docnames = self.env.all_docs
|
||||||
|
|
||||||
with progress_message(__('preparing documents')):
|
with progress_message(__('preparing documents')):
|
||||||
|
@ -90,7 +90,7 @@ class TexinfoBuilder(Builder):
|
|||||||
docname = docname[:-5]
|
docname = docname[:-5]
|
||||||
self.titles.append((docname, entry[2]))
|
self.titles.append((docname, entry[2]))
|
||||||
|
|
||||||
def write(self, *ignored) -> None:
|
def write(self, *ignored: Any) -> None:
|
||||||
self.init_document_data()
|
self.init_document_data()
|
||||||
for entry in self.document_data:
|
for entry in self.document_data:
|
||||||
docname, targetname, title, author = entry[:4]
|
docname, targetname, title, author = entry[:4]
|
||||||
|
@ -154,7 +154,7 @@ class Config:
|
|||||||
'env', []),
|
'env', []),
|
||||||
} # type: Dict[str, Tuple]
|
} # type: Dict[str, Tuple]
|
||||||
|
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
if len(args) == 4:
|
if len(args) == 4:
|
||||||
# old style arguments: (dirname, filename, overrides, tags)
|
# old style arguments: (dirname, filename, overrides, tags)
|
||||||
warnings.warn('The argument of Config() class has been changed. '
|
warnings.warn('The argument of Config() class has been changed. '
|
||||||
|
@ -48,7 +48,7 @@ class ObjType:
|
|||||||
'searchprio': 1,
|
'searchprio': 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, lname: str, *roles, **attrs) -> None:
|
def __init__(self, lname: str, *roles: Any, **attrs: Any) -> None:
|
||||||
self.lname = lname
|
self.lname = lname
|
||||||
self.roles = roles # type: Tuple
|
self.roles = roles # type: Tuple
|
||||||
self.attrs = self.known_attrs.copy() # type: Dict
|
self.attrs = self.known_attrs.copy() # type: Dict
|
||||||
|
@ -112,7 +112,7 @@ class CitationDefinitionTransform(SphinxTransform):
|
|||||||
"""Mark citation definition labels as not smartquoted."""
|
"""Mark citation definition labels as not smartquoted."""
|
||||||
default_priority = 619
|
default_priority = 619
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
domain = cast(CitationDomain, self.env.get_domain('citation'))
|
domain = cast(CitationDomain, self.env.get_domain('citation'))
|
||||||
for node in self.document.traverse(nodes.citation):
|
for node in self.document.traverse(nodes.citation):
|
||||||
# register citation node to domain
|
# register citation node to domain
|
||||||
@ -131,7 +131,7 @@ class CitationReferenceTransform(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 619
|
default_priority = 619
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
domain = cast(CitationDomain, self.env.get_domain('citation'))
|
domain = cast(CitationDomain, self.env.get_domain('citation'))
|
||||||
for node in self.document.traverse(nodes.citation_reference):
|
for node in self.document.traverse(nodes.citation_reference):
|
||||||
target = node.astext()
|
target = node.astext()
|
||||||
|
@ -6496,7 +6496,7 @@ class AliasNode(nodes.Element):
|
|||||||
class AliasTransform(SphinxTransform):
|
class AliasTransform(SphinxTransform):
|
||||||
default_priority = ReferencesResolver.default_priority - 1
|
default_priority = ReferencesResolver.default_priority - 1
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(AliasNode):
|
for node in self.document.traverse(AliasNode):
|
||||||
class Warner:
|
class Warner:
|
||||||
def warn(self, msg):
|
def warn(self, msg):
|
||||||
|
@ -628,7 +628,7 @@ class StandardDomain(Domain):
|
|||||||
self.progoptions[program, name] = (docname, labelid)
|
self.progoptions[program, name] = (docname, labelid)
|
||||||
|
|
||||||
def build_reference_node(self, fromdocname: str, builder: "Builder", docname: str,
|
def build_reference_node(self, fromdocname: str, builder: "Builder", docname: str,
|
||||||
labelid: str, sectname: str, rolename: str, **options
|
labelid: str, sectname: str, rolename: str, **options: Any
|
||||||
) -> Element:
|
) -> Element:
|
||||||
nodeclass = options.pop('nodeclass', nodes.reference)
|
nodeclass = options.pop('nodeclass', nodes.reference)
|
||||||
newnode = nodeclass('', '', internal=True, **options)
|
newnode = nodeclass('', '', internal=True, **options)
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
:license: BSD, see LICENSE for details.
|
:license: BSD, see LICENSE for details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from typing import Any, Iterable, List
|
||||||
from typing import cast
|
from typing import cast
|
||||||
from typing import Iterable, List
|
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.nodes import Element, Node
|
from docutils.nodes import Element, Node
|
||||||
@ -314,8 +314,8 @@ class TocTree:
|
|||||||
node['refuri'] = node['anchorname'] or '#'
|
node['refuri'] = node['anchorname'] or '#'
|
||||||
return toc
|
return toc
|
||||||
|
|
||||||
def get_toctree_for(self, docname: str, builder: "Builder", collapse: bool, **kwds
|
def get_toctree_for(self, docname: str, builder: "Builder", collapse: bool,
|
||||||
) -> Element:
|
**kwds: Any) -> Element:
|
||||||
"""Return the global TOC nodetree."""
|
"""Return the global TOC nodetree."""
|
||||||
doctree = self.env.get_doctree(self.env.config.master_doc)
|
doctree = self.env.get_doctree(self.env.config.master_doc)
|
||||||
toctrees = [] # type: List[Element]
|
toctrees = [] # type: List[Element]
|
||||||
|
@ -81,7 +81,7 @@ class EventManager:
|
|||||||
for event in self.listeners.values():
|
for event in self.listeners.values():
|
||||||
event.pop(listener_id, None)
|
event.pop(listener_id, None)
|
||||||
|
|
||||||
def emit(self, name: str, *args) -> List:
|
def emit(self, name: str, *args: Any) -> List:
|
||||||
"""Emit a Sphinx event."""
|
"""Emit a Sphinx event."""
|
||||||
try:
|
try:
|
||||||
logger.debug('[app] emitting event: %r%s', name, repr(args)[:100])
|
logger.debug('[app] emitting event: %r%s', name, repr(args)[:100])
|
||||||
@ -99,7 +99,7 @@ class EventManager:
|
|||||||
results.append(callback(self.app, *args))
|
results.append(callback(self.app, *args))
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def emit_firstresult(self, name: str, *args) -> Any:
|
def emit_firstresult(self, name: str, *args: Any) -> Any:
|
||||||
"""Emit a Sphinx event and returns first result.
|
"""Emit a Sphinx event and returns first result.
|
||||||
|
|
||||||
This returns the result of the first handler that doesn't return ``None``.
|
This returns the result of the first handler that doesn't return ``None``.
|
||||||
|
@ -221,7 +221,7 @@ class Documenter:
|
|||||||
|
|
||||||
option_spec = {'noindex': bool_option} # type: Dict[str, Callable]
|
option_spec = {'noindex': bool_option} # type: Dict[str, Callable]
|
||||||
|
|
||||||
def get_attr(self, obj: Any, name: str, *defargs) -> Any:
|
def get_attr(self, obj: Any, name: str, *defargs: Any) -> Any:
|
||||||
"""getattr() override for types such as Zope interfaces."""
|
"""getattr() override for types such as Zope interfaces."""
|
||||||
return autodoc_attrgetter(self.env.app, obj, name, *defargs)
|
return autodoc_attrgetter(self.env.app, obj, name, *defargs)
|
||||||
|
|
||||||
@ -351,7 +351,7 @@ class Documenter:
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def format_args(self, **kwargs) -> str:
|
def format_args(self, **kwargs: Any) -> str:
|
||||||
"""Format the argument signature of *self.object*.
|
"""Format the argument signature of *self.object*.
|
||||||
|
|
||||||
Should return None if the object does not have a signature.
|
Should return None if the object does not have a signature.
|
||||||
@ -369,7 +369,7 @@ class Documenter:
|
|||||||
# directives of course)
|
# directives of course)
|
||||||
return '.'.join(self.objpath) or self.modname
|
return '.'.join(self.objpath) or self.modname
|
||||||
|
|
||||||
def format_signature(self, **kwargs) -> str:
|
def format_signature(self, **kwargs: Any) -> str:
|
||||||
"""Format the signature (arguments and return annotation) of the object.
|
"""Format the signature (arguments and return annotation) of the object.
|
||||||
|
|
||||||
Let the user process it via the ``autodoc-process-signature`` event.
|
Let the user process it via the ``autodoc-process-signature`` event.
|
||||||
@ -750,7 +750,7 @@ class ModuleDocumenter(Documenter):
|
|||||||
'imported-members': bool_option, 'ignore-module-all': bool_option
|
'imported-members': bool_option, 'ignore-module-all': bool_option
|
||||||
} # type: Dict[str, Callable]
|
} # type: Dict[str, Callable]
|
||||||
|
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
super().__init__(*args)
|
super().__init__(*args)
|
||||||
merge_special_members_option(self.options)
|
merge_special_members_option(self.options)
|
||||||
|
|
||||||
@ -928,7 +928,7 @@ class DocstringSignatureMixin:
|
|||||||
return lines
|
return lines
|
||||||
return super().get_doc(None, ignore) # type: ignore
|
return super().get_doc(None, ignore) # type: ignore
|
||||||
|
|
||||||
def format_signature(self, **kwargs) -> str:
|
def format_signature(self, **kwargs: Any) -> str:
|
||||||
if self.args is None and self.env.config.autodoc_docstring_signature: # type: ignore
|
if self.args is None and self.env.config.autodoc_docstring_signature: # type: ignore
|
||||||
# only act if a signature is not explicitly given already, and if
|
# only act if a signature is not explicitly given already, and if
|
||||||
# the feature is enabled
|
# the feature is enabled
|
||||||
@ -943,7 +943,7 @@ class DocstringStripSignatureMixin(DocstringSignatureMixin):
|
|||||||
Mixin for AttributeDocumenter to provide the
|
Mixin for AttributeDocumenter to provide the
|
||||||
feature of stripping any function signature from the docstring.
|
feature of stripping any function signature from the docstring.
|
||||||
"""
|
"""
|
||||||
def format_signature(self, **kwargs) -> str:
|
def format_signature(self, **kwargs: Any) -> str:
|
||||||
if self.args is None and self.env.config.autodoc_docstring_signature: # type: ignore
|
if self.args is None and self.env.config.autodoc_docstring_signature: # type: ignore
|
||||||
# only act if a signature is not explicitly given already, and if
|
# only act if a signature is not explicitly given already, and if
|
||||||
# the feature is enabled
|
# the feature is enabled
|
||||||
@ -970,7 +970,7 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
|
|||||||
return (inspect.isfunction(member) or inspect.isbuiltin(member) or
|
return (inspect.isfunction(member) or inspect.isbuiltin(member) or
|
||||||
(inspect.isroutine(member) and isinstance(parent, ModuleDocumenter)))
|
(inspect.isroutine(member) and isinstance(parent, ModuleDocumenter)))
|
||||||
|
|
||||||
def format_args(self, **kwargs) -> str:
|
def format_args(self, **kwargs: Any) -> str:
|
||||||
if self.env.config.autodoc_typehints == 'none':
|
if self.env.config.autodoc_typehints == 'none':
|
||||||
kwargs.setdefault('show_annotation', False)
|
kwargs.setdefault('show_annotation', False)
|
||||||
|
|
||||||
@ -1047,7 +1047,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
|
|||||||
'private-members': bool_option, 'special-members': members_option,
|
'private-members': bool_option, 'special-members': members_option,
|
||||||
} # type: Dict[str, Callable]
|
} # type: Dict[str, Callable]
|
||||||
|
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
super().__init__(*args)
|
super().__init__(*args)
|
||||||
merge_special_members_option(self.options)
|
merge_special_members_option(self.options)
|
||||||
|
|
||||||
@ -1067,7 +1067,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
|
|||||||
self.doc_as_attr = True
|
self.doc_as_attr = True
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def format_args(self, **kwargs) -> str:
|
def format_args(self, **kwargs: Any) -> str:
|
||||||
if self.env.config.autodoc_typehints == 'none':
|
if self.env.config.autodoc_typehints == 'none':
|
||||||
kwargs.setdefault('show_annotation', False)
|
kwargs.setdefault('show_annotation', False)
|
||||||
|
|
||||||
@ -1087,7 +1087,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
|
|||||||
# with __init__ in C
|
# with __init__ in C
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def format_signature(self, **kwargs) -> str:
|
def format_signature(self, **kwargs: Any) -> str:
|
||||||
if self.doc_as_attr:
|
if self.doc_as_attr:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
@ -1275,7 +1275,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
|
|||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def format_args(self, **kwargs) -> str:
|
def format_args(self, **kwargs: Any) -> str:
|
||||||
if self.env.config.autodoc_typehints == 'none':
|
if self.env.config.autodoc_typehints == 'none':
|
||||||
kwargs.setdefault('show_annotation', False)
|
kwargs.setdefault('show_annotation', False)
|
||||||
|
|
||||||
@ -1290,7 +1290,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
|
|||||||
args = args.replace('\\', '\\\\')
|
args = args.replace('\\', '\\\\')
|
||||||
return args
|
return args
|
||||||
|
|
||||||
def add_directive_header(self, sig) -> None:
|
def add_directive_header(self, sig: str) -> None:
|
||||||
super().add_directive_header(sig)
|
super().add_directive_header(sig)
|
||||||
|
|
||||||
sourcename = self.get_sourcename()
|
sourcename = self.get_sourcename()
|
||||||
@ -1492,7 +1492,7 @@ def get_documenters(app: Sphinx) -> Dict[str, "Type[Documenter]"]:
|
|||||||
return app.registry.documenters
|
return app.registry.documenters
|
||||||
|
|
||||||
|
|
||||||
def autodoc_attrgetter(app: Sphinx, obj: Any, name: str, *defargs) -> Any:
|
def autodoc_attrgetter(app: Sphinx, obj: Any, name: str, *defargs: Any) -> Any:
|
||||||
"""Alternative getattr() for types"""
|
"""Alternative getattr() for types"""
|
||||||
for typ, func in app.registry.autodoc_attrgettrs.items():
|
for typ, func in app.registry.autodoc_attrgettrs.items():
|
||||||
if isinstance(obj, typ):
|
if isinstance(obj, typ):
|
||||||
|
@ -28,7 +28,7 @@ class _MockObject:
|
|||||||
|
|
||||||
__display_name__ = '_MockObject'
|
__display_name__ = '_MockObject'
|
||||||
|
|
||||||
def __new__(cls, *args, **kwargs) -> Any:
|
def __new__(cls, *args: Any, **kwargs: Any) -> Any:
|
||||||
if len(args) == 3 and isinstance(args[1], tuple):
|
if len(args) == 3 and isinstance(args[1], tuple):
|
||||||
superclass = args[1][-1].__class__
|
superclass = args[1][-1].__class__
|
||||||
if superclass is cls:
|
if superclass is cls:
|
||||||
@ -38,7 +38,7 @@ class _MockObject:
|
|||||||
|
|
||||||
return super().__new__(cls)
|
return super().__new__(cls)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
self.__qualname__ = ''
|
self.__qualname__ = ''
|
||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self) -> int:
|
||||||
@ -59,7 +59,7 @@ class _MockObject:
|
|||||||
def __getattr__(self, key: str) -> "_MockObject":
|
def __getattr__(self, key: str) -> "_MockObject":
|
||||||
return _make_subclass(key, self.__display_name__, self.__class__)()
|
return _make_subclass(key, self.__display_name__, self.__class__)()
|
||||||
|
|
||||||
def __call__(self, *args, **kw) -> Any:
|
def __call__(self, *args: Any, **kw: Any) -> Any:
|
||||||
if args and type(args[0]) in [type, FunctionType, MethodType]:
|
if args and type(args[0]) in [type, FunctionType, MethodType]:
|
||||||
# Appears to be a decorator, pass through unchanged
|
# Appears to be a decorator, pass through unchanged
|
||||||
return args[0]
|
return args[0]
|
||||||
|
@ -62,7 +62,7 @@ class DummyApplication:
|
|||||||
self._warncount = 0
|
self._warncount = 0
|
||||||
self.warningiserror = False
|
self.warningiserror = False
|
||||||
|
|
||||||
def emit_firstresult(self, *args) -> None:
|
def emit_firstresult(self, *args: Any) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ class CoverageBuilder(Builder):
|
|||||||
def get_outdated_docs(self) -> str:
|
def get_outdated_docs(self) -> str:
|
||||||
return 'coverage overview'
|
return 'coverage overview'
|
||||||
|
|
||||||
def write(self, *ignored) -> None:
|
def write(self, *ignored: Any) -> None:
|
||||||
self.py_undoc = {} # type: Dict[str, Dict[str, Any]]
|
self.py_undoc = {} # type: Dict[str, Dict[str, Any]]
|
||||||
self.build_py_coverage()
|
self.build_py_coverage()
|
||||||
self.write_py_coverage()
|
self.write_py_coverage()
|
||||||
|
@ -32,7 +32,7 @@ class DurationDomain(Domain):
|
|||||||
def reading_durations(self) -> Dict[str, timedelta]:
|
def reading_durations(self) -> Dict[str, timedelta]:
|
||||||
return self.data.setdefault('reading_durations', {})
|
return self.data.setdefault('reading_durations', {})
|
||||||
|
|
||||||
def note_reading_duration(self, duration: timedelta):
|
def note_reading_duration(self, duration: timedelta) -> None:
|
||||||
self.reading_durations[self.env.docname] = duration
|
self.reading_durations[self.env.docname] = duration
|
||||||
|
|
||||||
def clear(self) -> None:
|
def clear(self) -> None:
|
||||||
@ -69,7 +69,7 @@ def on_doctree_read(app: Sphinx, doctree: nodes.document) -> None:
|
|||||||
domain.note_reading_duration(duration)
|
domain.note_reading_duration(duration)
|
||||||
|
|
||||||
|
|
||||||
def on_build_finished(app: Sphinx, error):
|
def on_build_finished(app: Sphinx, error: Exception) -> None:
|
||||||
"""Display duration ranking on current build."""
|
"""Display duration ranking on current build."""
|
||||||
domain = cast(DurationDomain, app.env.get_domain('duration'))
|
domain = cast(DurationDomain, app.env.get_domain('duration'))
|
||||||
durations = sorted(domain.reading_durations.items(), key=itemgetter(1), reverse=True)
|
durations = sorted(domain.reading_durations.items(), key=itemgetter(1), reverse=True)
|
||||||
|
@ -265,7 +265,7 @@ class Config:
|
|||||||
'napoleon_custom_sections': (None, 'env')
|
'napoleon_custom_sections': (None, 'env')
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, **settings) -> None:
|
def __init__(self, **settings: Any) -> None:
|
||||||
for name, (default, rebuild) in self._config_values.items():
|
for name, (default, rebuild) in self._config_values.items():
|
||||||
setattr(self, name, default)
|
setattr(self, name, default)
|
||||||
for name, value in settings.items():
|
for name, value in settings.items():
|
||||||
|
@ -47,7 +47,7 @@ class peek_iter:
|
|||||||
be set to a new object instance: ``object()``.
|
be set to a new object instance: ``object()``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
"""__init__(o, sentinel=None)"""
|
"""__init__(o, sentinel=None)"""
|
||||||
self._iterable = iter(*args) # type: Iterable
|
self._iterable = iter(*args) # type: Iterable
|
||||||
self._cache = collections.deque() # type: collections.deque
|
self._cache = collections.deque() # type: collections.deque
|
||||||
@ -208,7 +208,7 @@ class modify_iter(peek_iter):
|
|||||||
"whitespace."
|
"whitespace."
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
"""__init__(o, sentinel=None, modifier=lambda x: x)"""
|
"""__init__(o, sentinel=None, modifier=lambda x: x)"""
|
||||||
if 'modifier' in kwargs:
|
if 'modifier' in kwargs:
|
||||||
self.modifier = kwargs['modifier']
|
self.modifier = kwargs['modifier']
|
||||||
|
@ -23,7 +23,7 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
class Extension:
|
class Extension:
|
||||||
def __init__(self, name: str, module: Any, **kwargs) -> None:
|
def __init__(self, name: str, module: Any, **kwargs: Any) -> None:
|
||||||
self.name = name
|
self.name = name
|
||||||
self.module = module
|
self.module = module
|
||||||
self.metadata = kwargs
|
self.metadata = kwargs
|
||||||
|
@ -93,7 +93,7 @@ class PygmentsBridge:
|
|||||||
else:
|
else:
|
||||||
return get_style_by_name(stylename)
|
return get_style_by_name(stylename)
|
||||||
|
|
||||||
def get_formatter(self, **kwargs) -> Formatter:
|
def get_formatter(self, **kwargs: Any) -> Formatter:
|
||||||
kwargs.update(self.formatter_args)
|
kwargs.update(self.formatter_args)
|
||||||
return self.formatter(**kwargs)
|
return self.formatter(**kwargs)
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ class PygmentsBridge:
|
|||||||
return lexer
|
return lexer
|
||||||
|
|
||||||
def highlight_block(self, source: str, lang: str, opts: Dict = None,
|
def highlight_block(self, source: str, lang: str, opts: Dict = None,
|
||||||
force: bool = False, location: Any = None, **kwargs) -> str:
|
force: bool = False, location: Any = None, **kwargs: Any) -> str:
|
||||||
if not isinstance(source, str):
|
if not isinstance(source, str):
|
||||||
source = source.decode()
|
source = source.decode()
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ class SphinxBaseReader(standalone.Reader):
|
|||||||
|
|
||||||
transforms = [] # type: List[Type[Transform]]
|
transforms = [] # type: List[Type[Transform]]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
from sphinx.application import Sphinx
|
from sphinx.application import Sphinx
|
||||||
if len(args) > 0 and isinstance(args[0], Sphinx):
|
if len(args) > 0 and isinstance(args[0], Sphinx):
|
||||||
self._app = args[0]
|
self._app = args[0]
|
||||||
@ -181,7 +181,7 @@ class SphinxDummyWriter(UnfilteredWriter):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def SphinxDummySourceClass(source: Any, *args, **kwargs) -> Any:
|
def SphinxDummySourceClass(source: Any, *args: Any, **kwargs: Any) -> Any:
|
||||||
"""Bypass source object as is to cheat Publisher."""
|
"""Bypass source object as is to cheat Publisher."""
|
||||||
return source
|
return source
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ class SphinxBaseFileInput(FileInput):
|
|||||||
It supports to replace unknown Unicode characters to '?'.
|
It supports to replace unknown Unicode characters to '?'.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, app: "Sphinx", env: BuildEnvironment, *args, **kwds) -> None:
|
def __init__(self, app: "Sphinx", env: BuildEnvironment, *args: Any, **kwds: Any) -> None:
|
||||||
self.app = app
|
self.app = app
|
||||||
self.env = env
|
self.env = env
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ class SphinxFileInput(FileInput):
|
|||||||
"""A basic FileInput for Sphinx."""
|
"""A basic FileInput for Sphinx."""
|
||||||
supported = ('*',) # RemovedInSphinx30Warning
|
supported = ('*',) # RemovedInSphinx30Warning
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
kwargs['error_handler'] = 'sphinx'
|
kwargs['error_handler'] = 'sphinx'
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ class idgen:
|
|||||||
|
|
||||||
|
|
||||||
@contextfunction
|
@contextfunction
|
||||||
def warning(context: Dict, message: str, *args, **kwargs) -> str:
|
def warning(context: Dict, message: str, *args: Any, **kwargs: Any) -> str:
|
||||||
if 'pagename' in context:
|
if 'pagename' in context:
|
||||||
filename = context.get('pagename') + context.get('file_suffix', '')
|
filename = context.get('pagename') + context.get('file_suffix', '')
|
||||||
message = 'in rendering %s: %s' % (filename, message)
|
message = 'in rendering %s: %s' % (filename, message)
|
||||||
|
@ -243,7 +243,7 @@ def get_translation(catalog, namespace='general'):
|
|||||||
|
|
||||||
.. versionadded:: 1.8
|
.. versionadded:: 1.8
|
||||||
"""
|
"""
|
||||||
def gettext(message: str, *args) -> str:
|
def gettext(message: str, *args: Any) -> str:
|
||||||
if not is_translator_registered(catalog, namespace):
|
if not is_translator_registered(catalog, namespace):
|
||||||
# not initialized yet
|
# not initialized yet
|
||||||
return _TranslationProxy(_lazy_translate, catalog, namespace, message) # type: ignore # NOQA
|
return _TranslationProxy(_lazy_translate, catalog, namespace, message) # type: ignore # NOQA
|
||||||
|
@ -117,7 +117,7 @@ class Token:
|
|||||||
else:
|
else:
|
||||||
raise ValueError('Unknown value: %r' % other)
|
raise ValueError('Unknown value: %r' % other)
|
||||||
|
|
||||||
def match(self, *conditions) -> bool:
|
def match(self, *conditions: Any) -> bool:
|
||||||
return any(self == candidate for candidate in conditions)
|
return any(self == candidate for candidate in conditions)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
|
@ -184,7 +184,7 @@ class SphinxComponentRegistry:
|
|||||||
|
|
||||||
def add_directive_to_domain(self, domain: str, name: str, obj: Any,
|
def add_directive_to_domain(self, domain: str, name: str, obj: Any,
|
||||||
has_content: bool = None, argument_spec: Any = None,
|
has_content: bool = None, argument_spec: Any = None,
|
||||||
override: bool = False, **option_spec) -> None:
|
override: bool = False, **option_spec: Any) -> None:
|
||||||
logger.debug('[app] adding directive to domain: %r',
|
logger.debug('[app] adding directive to domain: %r',
|
||||||
(domain, name, obj, has_content, argument_spec, option_spec))
|
(domain, name, obj, has_content, argument_spec, option_spec))
|
||||||
if domain not in self.domains:
|
if domain not in self.domains:
|
||||||
@ -273,7 +273,7 @@ class SphinxComponentRegistry:
|
|||||||
else:
|
else:
|
||||||
self.source_suffix[suffix] = filetype
|
self.source_suffix[suffix] = filetype
|
||||||
|
|
||||||
def add_source_parser(self, *args, **kwargs) -> None:
|
def add_source_parser(self, *args: Any, **kwargs: Any) -> None:
|
||||||
logger.debug('[app] adding search source_parser: %r', args)
|
logger.debug('[app] adding search source_parser: %r', args)
|
||||||
if len(args) == 1:
|
if len(args) == 1:
|
||||||
# new sytle arguments: (source_parser)
|
# new sytle arguments: (source_parser)
|
||||||
@ -352,7 +352,8 @@ class SphinxComponentRegistry:
|
|||||||
raise ExtensionError(__('Translator for %r already exists') % name)
|
raise ExtensionError(__('Translator for %r already exists') % name)
|
||||||
self.translators[name] = translator
|
self.translators[name] = translator
|
||||||
|
|
||||||
def add_translation_handlers(self, node: "Type[Element]", **kwargs) -> None:
|
def add_translation_handlers(self, node: "Type[Element]",
|
||||||
|
**kwargs: Tuple[Callable, Callable]) -> None:
|
||||||
logger.debug('[app] adding translation_handlers: %r, %r', node, kwargs)
|
logger.debug('[app] adding translation_handlers: %r, %r', node, kwargs)
|
||||||
for builder_name, handlers in kwargs.items():
|
for builder_name, handlers in kwargs.items():
|
||||||
translation_handlers = self.translation_handlers.setdefault(builder_name, {})
|
translation_handlers = self.translation_handlers.setdefault(builder_name, {})
|
||||||
@ -361,13 +362,13 @@ class SphinxComponentRegistry:
|
|||||||
translation_handlers[node.__name__] = (visit, depart)
|
translation_handlers[node.__name__] = (visit, depart)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ExtensionError(__('kwargs for add_node() must be a (visit, depart) '
|
raise ExtensionError(__('kwargs for add_node() must be a (visit, depart) '
|
||||||
'function tuple: %r=%r') % builder_name, handlers)
|
'function tuple: %r=%r') % (builder_name, handlers))
|
||||||
|
|
||||||
def get_translator_class(self, builder: Builder) -> "Type[nodes.NodeVisitor]":
|
def get_translator_class(self, builder: Builder) -> "Type[nodes.NodeVisitor]":
|
||||||
return self.translators.get(builder.name,
|
return self.translators.get(builder.name,
|
||||||
builder.default_translator_class)
|
builder.default_translator_class)
|
||||||
|
|
||||||
def create_translator(self, builder: Builder, *args) -> nodes.NodeVisitor:
|
def create_translator(self, builder: Builder, *args: Any) -> nodes.NodeVisitor:
|
||||||
translator_class = self.get_translator_class(builder)
|
translator_class = self.get_translator_class(builder)
|
||||||
assert translator_class, "translator not found for %s" % builder.name
|
assert translator_class, "translator not found for %s" % builder.name
|
||||||
translator = translator_class(*args)
|
translator = translator_class(*args)
|
||||||
|
@ -124,17 +124,17 @@ class path(str):
|
|||||||
def utime(self, arg: Any) -> None:
|
def utime(self, arg: Any) -> None:
|
||||||
os.utime(self, arg)
|
os.utime(self, arg)
|
||||||
|
|
||||||
def open(self, mode: str = 'r', **kwargs) -> IO:
|
def open(self, mode: str = 'r', **kwargs: Any) -> IO:
|
||||||
return open(self, mode, **kwargs)
|
return open(self, mode, **kwargs)
|
||||||
|
|
||||||
def write_text(self, text: str, encoding: str = 'utf-8', **kwargs) -> None:
|
def write_text(self, text: str, encoding: str = 'utf-8', **kwargs: Any) -> None:
|
||||||
"""
|
"""
|
||||||
Writes the given `text` to the file.
|
Writes the given `text` to the file.
|
||||||
"""
|
"""
|
||||||
with open(self, 'w', encoding=encoding, **kwargs) as f:
|
with open(self, 'w', encoding=encoding, **kwargs) as f:
|
||||||
f.write(text)
|
f.write(text)
|
||||||
|
|
||||||
def text(self, encoding: str = 'utf-8', **kwargs) -> str:
|
def text(self, encoding: str = 'utf-8', **kwargs: Any) -> str:
|
||||||
"""
|
"""
|
||||||
Returns the text in the file.
|
Returns the text in the file.
|
||||||
"""
|
"""
|
||||||
@ -181,7 +181,7 @@ class path(str):
|
|||||||
"""
|
"""
|
||||||
os.makedirs(self, mode, exist_ok=exist_ok)
|
os.makedirs(self, mode, exist_ok=exist_ok)
|
||||||
|
|
||||||
def joinpath(self, *args) -> "path":
|
def joinpath(self, *args: Any) -> "path":
|
||||||
"""
|
"""
|
||||||
Joins the path with the argument given and returns the result.
|
Joins the path with the argument given and returns the result.
|
||||||
"""
|
"""
|
||||||
|
@ -47,7 +47,7 @@ def assert_startswith(thing: str, prefix: str) -> None:
|
|||||||
assert False, '%r does not start with %r' % (thing, prefix)
|
assert False, '%r does not start with %r' % (thing, prefix)
|
||||||
|
|
||||||
|
|
||||||
def assert_node(node: nodes.Node, cls: Any = None, xpath: str = "", **kwargs) -> None:
|
def assert_node(node: nodes.Node, cls: Any = None, xpath: str = "", **kwargs: Any) -> None:
|
||||||
if cls:
|
if cls:
|
||||||
if isinstance(cls, list):
|
if isinstance(cls, list):
|
||||||
assert_node(node, cls[0], xpath=xpath, **kwargs)
|
assert_node(node, cls[0], xpath=xpath, **kwargs)
|
||||||
@ -92,7 +92,7 @@ def etree_parse(path: str) -> Any:
|
|||||||
|
|
||||||
|
|
||||||
class Struct:
|
class Struct:
|
||||||
def __init__(self, **kwds) -> None:
|
def __init__(self, **kwds: Any) -> None:
|
||||||
self.__dict__.update(kwds)
|
self.__dict__.update(kwds)
|
||||||
|
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ class SphinxTestAppWrapperForSkipBuilding:
|
|||||||
def __getattr__(self, name: str) -> Any:
|
def __getattr__(self, name: str) -> Any:
|
||||||
return getattr(self.app, name)
|
return getattr(self.app, name)
|
||||||
|
|
||||||
def build(self, *args, **kw) -> None:
|
def build(self, *args: Any, **kw: Any) -> None:
|
||||||
if not self.app.outdir.listdir(): # type: ignore
|
if not self.app.outdir.listdir(): # type: ignore
|
||||||
# if listdir is empty, do build.
|
# if listdir is empty, do build.
|
||||||
self.app.build(*args, **kw)
|
self.app.build(*args, **kw)
|
||||||
|
@ -104,7 +104,7 @@ class DefaultSubstitutions(SphinxTransform):
|
|||||||
# run before the default Substitutions
|
# run before the default Substitutions
|
||||||
default_priority = 210
|
default_priority = 210
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
# only handle those not otherwise defined in the document
|
# only handle those not otherwise defined in the document
|
||||||
to_handle = default_substitutions - set(self.document.substitution_defs)
|
to_handle = default_substitutions - set(self.document.substitution_defs)
|
||||||
for ref in self.document.traverse(nodes.substitution_reference):
|
for ref in self.document.traverse(nodes.substitution_reference):
|
||||||
@ -127,7 +127,7 @@ class MoveModuleTargets(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 210
|
default_priority = 210
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(nodes.target):
|
for node in self.document.traverse(nodes.target):
|
||||||
if not node['ids']:
|
if not node['ids']:
|
||||||
continue
|
continue
|
||||||
@ -145,7 +145,7 @@ class HandleCodeBlocks(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 210
|
default_priority = 210
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
# move doctest blocks out of blockquotes
|
# move doctest blocks out of blockquotes
|
||||||
for node in self.document.traverse(nodes.block_quote):
|
for node in self.document.traverse(nodes.block_quote):
|
||||||
if all(isinstance(child, nodes.doctest_block) for child
|
if all(isinstance(child, nodes.doctest_block) for child
|
||||||
@ -169,7 +169,7 @@ class AutoNumbering(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 210
|
default_priority = 210
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
domain = self.env.get_domain('std') # type: StandardDomain
|
domain = self.env.get_domain('std') # type: StandardDomain
|
||||||
|
|
||||||
for node in self.document.traverse(nodes.Element):
|
for node in self.document.traverse(nodes.Element):
|
||||||
@ -183,7 +183,7 @@ class SortIds(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 261
|
default_priority = 261
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(nodes.section):
|
for node in self.document.traverse(nodes.section):
|
||||||
if len(node['ids']) > 1 and node['ids'][0].startswith('id'):
|
if len(node['ids']) > 1 and node['ids'][0].startswith('id'):
|
||||||
node['ids'] = node['ids'][1:] + [node['ids'][0]]
|
node['ids'] = node['ids'][1:] + [node['ids'][0]]
|
||||||
@ -204,7 +204,7 @@ class ApplySourceWorkaround(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 10
|
default_priority = 10
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(): # type: Node
|
for node in self.document.traverse(): # type: Node
|
||||||
if isinstance(node, (nodes.TextElement, nodes.image)):
|
if isinstance(node, (nodes.TextElement, nodes.image)):
|
||||||
apply_source_workaround(node)
|
apply_source_workaround(node)
|
||||||
@ -216,7 +216,7 @@ class AutoIndexUpgrader(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 210
|
default_priority = 210
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(addnodes.index):
|
for node in self.document.traverse(addnodes.index):
|
||||||
if 'entries' in node and any(len(entry) == 4 for entry in node['entries']):
|
if 'entries' in node and any(len(entry) == 4 for entry in node['entries']):
|
||||||
msg = __('4 column based index found. '
|
msg = __('4 column based index found. '
|
||||||
@ -233,7 +233,7 @@ class ExtraTranslatableNodes(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 10
|
default_priority = 10
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
targets = self.config.gettext_additional_targets
|
targets = self.config.gettext_additional_targets
|
||||||
target_nodes = [v for k, v in TRANSLATABLE_NODES.items() if k in targets]
|
target_nodes = [v for k, v in TRANSLATABLE_NODES.items() if k in targets]
|
||||||
if not target_nodes:
|
if not target_nodes:
|
||||||
@ -252,7 +252,7 @@ class UnreferencedFootnotesDetector(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 200
|
default_priority = 200
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.footnotes:
|
for node in self.document.footnotes:
|
||||||
if node['names'] == []:
|
if node['names'] == []:
|
||||||
# footnote having duplicated number. It is already warned at parser.
|
# footnote having duplicated number. It is already warned at parser.
|
||||||
@ -273,7 +273,7 @@ class DoctestTransform(SphinxTransform):
|
|||||||
"""Set "doctest" style to each doctest_block node"""
|
"""Set "doctest" style to each doctest_block node"""
|
||||||
default_priority = 500
|
default_priority = 500
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(nodes.doctest_block):
|
for node in self.document.traverse(nodes.doctest_block):
|
||||||
node['classes'].append('doctest')
|
node['classes'].append('doctest')
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ class FigureAligner(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 700
|
default_priority = 700
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
matcher = NodeMatcher(nodes.table, nodes.figure)
|
matcher = NodeMatcher(nodes.table, nodes.figure)
|
||||||
for node in self.document.traverse(matcher): # type: Element
|
for node in self.document.traverse(matcher): # type: Element
|
||||||
node.setdefault('align', 'default')
|
node.setdefault('align', 'default')
|
||||||
@ -294,7 +294,7 @@ class FilterSystemMessages(SphinxTransform):
|
|||||||
"""Filter system messages from a doctree."""
|
"""Filter system messages from a doctree."""
|
||||||
default_priority = 999
|
default_priority = 999
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
filterlevel = 2 if self.config.keep_warnings else 5
|
filterlevel = 2 if self.config.keep_warnings else 5
|
||||||
for node in self.document.traverse(nodes.system_message):
|
for node in self.document.traverse(nodes.system_message):
|
||||||
if node['level'] < filterlevel:
|
if node['level'] < filterlevel:
|
||||||
@ -321,7 +321,7 @@ class SphinxSmartQuotes(SmartQuotes, SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 750
|
default_priority = 750
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
if not self.is_available():
|
if not self.is_available():
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -370,7 +370,7 @@ class DoctreeReadEvent(SphinxTransform):
|
|||||||
"""Emit :event:`doctree-read` event."""
|
"""Emit :event:`doctree-read` event."""
|
||||||
default_priority = 880
|
default_priority = 880
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
self.app.emit('doctree-read', self.document)
|
self.app.emit('doctree-read', self.document)
|
||||||
|
|
||||||
|
|
||||||
@ -378,7 +378,7 @@ class ManpageLink(SphinxTransform):
|
|||||||
"""Find manpage section numbers and names"""
|
"""Find manpage section numbers and names"""
|
||||||
default_priority = 999
|
default_priority = 999
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(addnodes.manpage):
|
for node in self.document.traverse(addnodes.manpage):
|
||||||
manpage = ' '.join([str(x) for x in node.children
|
manpage = ' '.join([str(x) for x in node.children
|
||||||
if isinstance(x, nodes.Text)])
|
if isinstance(x, nodes.Text)])
|
||||||
|
@ -61,7 +61,7 @@ class RefOnlyBulletListTransform(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 100
|
default_priority = 100
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
if self.config.html_compact_lists:
|
if self.config.html_compact_lists:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ class PreserveTranslatableMessages(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 10 # this MUST be invoked before Locale transform
|
default_priority = 10 # this MUST be invoked before Locale transform
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(addnodes.translatable):
|
for node in self.document.traverse(addnodes.translatable):
|
||||||
node.preserve_original_messages()
|
node.preserve_original_messages()
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ class Locale(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 20
|
default_priority = 20
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
settings, source = self.document.settings, self.document['source']
|
settings, source = self.document.settings, self.document['source']
|
||||||
msgstr = ''
|
msgstr = ''
|
||||||
|
|
||||||
@ -480,7 +480,7 @@ class RemoveTranslatableInline(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 999
|
default_priority = 999
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
from sphinx.builders.gettext import MessageCatalogBuilder
|
from sphinx.builders.gettext import MessageCatalogBuilder
|
||||||
if isinstance(self.app.builder, MessageCatalogBuilder):
|
if isinstance(self.app.builder, MessageCatalogBuilder):
|
||||||
return
|
return
|
||||||
|
@ -38,7 +38,7 @@ class SphinxPostTransform(SphinxTransform):
|
|||||||
builders = () # type: Tuple[str, ...]
|
builders = () # type: Tuple[str, ...]
|
||||||
formats = () # type: Tuple[str, ...]
|
formats = () # type: Tuple[str, ...]
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
if self.is_supported():
|
if self.is_supported():
|
||||||
self.run(**kwargs)
|
self.run(**kwargs)
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ class SphinxPostTransform(SphinxTransform):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
"""main method of post transforms.
|
"""main method of post transforms.
|
||||||
|
|
||||||
Subclasses should override this method instead of ``apply()``.
|
Subclasses should override this method instead of ``apply()``.
|
||||||
@ -66,7 +66,7 @@ class ReferencesResolver(SphinxPostTransform):
|
|||||||
|
|
||||||
default_priority = 10
|
default_priority = 10
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(addnodes.pending_xref):
|
for node in self.document.traverse(addnodes.pending_xref):
|
||||||
contnode = cast(nodes.TextElement, node[0].deepcopy())
|
contnode = cast(nodes.TextElement, node[0].deepcopy())
|
||||||
newnode = None
|
newnode = None
|
||||||
@ -178,7 +178,7 @@ class ReferencesResolver(SphinxPostTransform):
|
|||||||
class OnlyNodeTransform(SphinxPostTransform):
|
class OnlyNodeTransform(SphinxPostTransform):
|
||||||
default_priority = 50
|
default_priority = 50
|
||||||
|
|
||||||
def run(self, **kwargs) -> None:
|
def run(self, **kwargs: Any) -> None:
|
||||||
# A comment on the comment() nodes being inserted: replacing by [] would
|
# A comment on the comment() nodes being inserted: replacing by [] would
|
||||||
# result in a "Losing ids" exception if there is a target node before
|
# result in a "Losing ids" exception if there is a target node before
|
||||||
# the only node, so we make sure docutils can transfer the id to
|
# the only node, so we make sure docutils can transfer the id to
|
||||||
|
@ -36,7 +36,7 @@ class HighlightLanguageTransform(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 400
|
default_priority = 400
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
visitor = HighlightLanguageVisitor(self.document,
|
visitor = HighlightLanguageVisitor(self.document,
|
||||||
self.config.highlight_language)
|
self.config.highlight_language)
|
||||||
self.document.walkabout(visitor)
|
self.document.walkabout(visitor)
|
||||||
@ -92,7 +92,7 @@ class TrimDoctestFlagsTransform(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = HighlightLanguageTransform.default_priority + 1
|
default_priority = HighlightLanguageTransform.default_priority + 1
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
if not self.config.trim_doctest_flags:
|
if not self.config.trim_doctest_flags:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ class MathNodeMigrator(SphinxTransform):
|
|||||||
"""
|
"""
|
||||||
default_priority = 999
|
default_priority = 999
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for math_node in self.document.traverse(nodes.math):
|
for math_node in self.document.traverse(nodes.math):
|
||||||
# case: old styled ``math`` node generated by old extensions
|
# case: old styled ``math`` node generated by old extensions
|
||||||
if len(math_node) == 0:
|
if len(math_node) == 0:
|
||||||
|
@ -183,7 +183,7 @@ class ImageConverter(BaseImageConverter):
|
|||||||
#: ]
|
#: ]
|
||||||
conversion_rules = [] # type: List[Tuple[str, str]]
|
conversion_rules = [] # type: List[Tuple[str, str]]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
self.available = None # type: bool
|
self.available = None # type: bool
|
||||||
# the converter is available or not.
|
# the converter is available or not.
|
||||||
# Will be checked at first conversion
|
# Will be checked at first conversion
|
||||||
|
@ -26,7 +26,7 @@ class SubstitutionDefinitionsRemover(SphinxTransform):
|
|||||||
# should be invoked after Substitutions process
|
# should be invoked after Substitutions process
|
||||||
default_priority = Substitutions.default_priority + 1
|
default_priority = Substitutions.default_priority + 1
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(nodes.substitution_definition):
|
for node in self.document.traverse(nodes.substitution_definition):
|
||||||
node.parent.remove(node)
|
node.parent.remove(node)
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ class SubstitutionDefinitionsRemover(SphinxTransform):
|
|||||||
class SphinxDanglingReferences(DanglingReferences):
|
class SphinxDanglingReferences(DanglingReferences):
|
||||||
"""DanglingReferences transform which does not output info messages."""
|
"""DanglingReferences transform which does not output info messages."""
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
try:
|
try:
|
||||||
reporter = self.document.reporter
|
reporter = self.document.reporter
|
||||||
report_level = reporter.report_level
|
report_level = reporter.report_level
|
||||||
@ -50,7 +50,7 @@ class SphinxDomains(SphinxTransform):
|
|||||||
"""Collect objects to Sphinx domains for cross references."""
|
"""Collect objects to Sphinx domains for cross references."""
|
||||||
default_priority = 850
|
default_priority = 850
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for domain in self.env.domains.values():
|
for domain in self.env.domains.values():
|
||||||
domain.process_doc(self.env, self.env.docname, self.document)
|
domain.process_doc(self.env, self.env.docname, self.document)
|
||||||
|
|
||||||
|
@ -482,7 +482,7 @@ def force_decode(string: str, encoding: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
class attrdict(dict):
|
class attrdict(dict):
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
warnings.warn('The attrdict class is deprecated.',
|
warnings.warn('The attrdict class is deprecated.',
|
||||||
RemovedInSphinx40Warning, stacklevel=2)
|
RemovedInSphinx40Warning, stacklevel=2)
|
||||||
|
@ -53,7 +53,7 @@ class IndexEntriesMigrator(SphinxTransform):
|
|||||||
"""Migrating indexentries from old style (4columns) to new style (5columns)."""
|
"""Migrating indexentries from old style (4columns) to new style (5columns)."""
|
||||||
default_priority = 700
|
default_priority = 700
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
for node in self.document.traverse(addnodes.index):
|
for node in self.document.traverse(addnodes.index):
|
||||||
for i, entries in enumerate(node['entries']):
|
for i, entries in enumerate(node['entries']):
|
||||||
if len(entries) == 4:
|
if len(entries) == 4:
|
||||||
|
@ -279,7 +279,9 @@ def is_html5_writer_available() -> bool:
|
|||||||
return __version_info__ > (0, 13, 0)
|
return __version_info__ > (0, 13, 0)
|
||||||
|
|
||||||
|
|
||||||
def directive_helper(obj: Any, has_content: bool = None, argument_spec: Tuple[int, int, bool] = None, **option_spec) -> Any: # NOQA
|
def directive_helper(obj: Any, has_content: bool = None,
|
||||||
|
argument_spec: Tuple[int, int, bool] = None, **option_spec: Any
|
||||||
|
) -> Any:
|
||||||
warnings.warn('function based directive support is now deprecated. '
|
warnings.warn('function based directive support is now deprecated. '
|
||||||
'Use class based directive instead.',
|
'Use class based directive instead.',
|
||||||
RemovedInSphinx30Warning)
|
RemovedInSphinx30Warning)
|
||||||
@ -317,7 +319,7 @@ def switch_source_input(state: State, content: StringList) -> Generator[None, No
|
|||||||
class SphinxFileOutput(FileOutput):
|
class SphinxFileOutput(FileOutput):
|
||||||
"""Better FileOutput class for Sphinx."""
|
"""Better FileOutput class for Sphinx."""
|
||||||
|
|
||||||
def __init__(self, **kwargs) -> None:
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
self.overwrite_if_changed = kwargs.pop('overwrite_if_changed', False)
|
self.overwrite_if_changed = kwargs.pop('overwrite_if_changed', False)
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ def isproperty(obj: Any) -> bool:
|
|||||||
return isinstance(obj, property)
|
return isinstance(obj, property)
|
||||||
|
|
||||||
|
|
||||||
def safe_getattr(obj: Any, name: str, *defargs) -> Any:
|
def safe_getattr(obj: Any, name: str, *defargs: Any) -> Any:
|
||||||
"""A getattr() that turns all exceptions into AttributeErrors."""
|
"""A getattr() that turns all exceptions into AttributeErrors."""
|
||||||
try:
|
try:
|
||||||
return getattr(obj, name, *defargs)
|
return getattr(obj, name, *defargs)
|
||||||
|
@ -28,19 +28,19 @@ class SphinxJSONEncoder(json.JSONEncoder):
|
|||||||
return super().default(obj)
|
return super().default(obj)
|
||||||
|
|
||||||
|
|
||||||
def dump(obj: Any, fp: IO, *args, **kwds) -> None:
|
def dump(obj: Any, fp: IO, *args: Any, **kwds: Any) -> None:
|
||||||
kwds['cls'] = SphinxJSONEncoder
|
kwds['cls'] = SphinxJSONEncoder
|
||||||
json.dump(obj, fp, *args, **kwds)
|
json.dump(obj, fp, *args, **kwds)
|
||||||
|
|
||||||
|
|
||||||
def dumps(obj: Any, *args, **kwds) -> str:
|
def dumps(obj: Any, *args: Any, **kwds: Any) -> str:
|
||||||
kwds['cls'] = SphinxJSONEncoder
|
kwds['cls'] = SphinxJSONEncoder
|
||||||
return json.dumps(obj, *args, **kwds)
|
return json.dumps(obj, *args, **kwds)
|
||||||
|
|
||||||
|
|
||||||
def load(*args, **kwds) -> Any:
|
def load(*args: Any, **kwds: Any) -> Any:
|
||||||
return json.load(*args, **kwds)
|
return json.load(*args, **kwds)
|
||||||
|
|
||||||
|
|
||||||
def loads(*args, **kwds) -> Any:
|
def loads(*args: Any, **kwds: Any) -> Any:
|
||||||
return json.loads(*args, **kwds)
|
return json.loads(*args, **kwds)
|
||||||
|
@ -119,14 +119,14 @@ class SphinxWarningLogRecord(SphinxLogRecord):
|
|||||||
class SphinxLoggerAdapter(logging.LoggerAdapter):
|
class SphinxLoggerAdapter(logging.LoggerAdapter):
|
||||||
"""LoggerAdapter allowing ``type`` and ``subtype`` keywords."""
|
"""LoggerAdapter allowing ``type`` and ``subtype`` keywords."""
|
||||||
|
|
||||||
def log(self, level: Union[int, str], msg: str, *args, **kwargs) -> None:
|
def log(self, level: Union[int, str], msg: str, *args: Any, **kwargs: Any) -> None:
|
||||||
if isinstance(level, int):
|
if isinstance(level, int):
|
||||||
super().log(level, msg, *args, **kwargs)
|
super().log(level, msg, *args, **kwargs)
|
||||||
else:
|
else:
|
||||||
levelno = LEVEL_NAMES[level]
|
levelno = LEVEL_NAMES[level]
|
||||||
super().log(levelno, msg, *args, **kwargs)
|
super().log(levelno, msg, *args, **kwargs)
|
||||||
|
|
||||||
def verbose(self, msg: str, *args, **kwargs) -> None:
|
def verbose(self, msg: str, *args: Any, **kwargs: Any) -> None:
|
||||||
self.log(VERBOSE, msg, *args, **kwargs)
|
self.log(VERBOSE, msg, *args, **kwargs)
|
||||||
|
|
||||||
def process(self, msg: str, kwargs: Dict) -> Tuple[str, Dict]: # type: ignore
|
def process(self, msg: str, kwargs: Dict) -> Tuple[str, Dict]: # type: ignore
|
||||||
|
@ -60,7 +60,7 @@ class NodeMatcher:
|
|||||||
# => [<reference ...>, <reference ...>, ...]
|
# => [<reference ...>, <reference ...>, ...]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, *classes: "Type[Node]", **attrs) -> None:
|
def __init__(self, *classes: "Type[Node]", **attrs: Any) -> None:
|
||||||
self.classes = classes
|
self.classes = classes
|
||||||
self.attrs = attrs
|
self.attrs = attrs
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ def make_filename_from_project(project: str) -> str:
|
|||||||
return make_filename(project_suffix_re.sub('', project)).lower()
|
return make_filename(project_suffix_re.sub('', project)).lower()
|
||||||
|
|
||||||
|
|
||||||
def ustrftime(format: str, *args) -> str:
|
def ustrftime(format: str, *args: Any) -> str:
|
||||||
"""[DEPRECATED] strftime for unicode strings."""
|
"""[DEPRECATED] strftime for unicode strings."""
|
||||||
warnings.warn('sphinx.util.osutil.ustrtime is deprecated for removal',
|
warnings.warn('sphinx.util.osutil.ustrtime is deprecated for removal',
|
||||||
RemovedInSphinx30Warning, stacklevel=2)
|
RemovedInSphinx30Warning, stacklevel=2)
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from typing import Generator, Union
|
from typing import Any, Generator, Union
|
||||||
from urllib.parse import urlsplit
|
from urllib.parse import urlsplit
|
||||||
|
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
@ -77,7 +77,7 @@ def is_ssl_error(exc: Exception) -> bool:
|
|||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def ignore_insecure_warning(**kwargs) -> Generator[None, None, None]:
|
def ignore_insecure_warning(**kwargs: Any) -> Generator[None, None, None]:
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
if not kwargs.get('verify') and InsecureRequestWarning:
|
if not kwargs.get('verify') and InsecureRequestWarning:
|
||||||
# ignore InsecureRequestWarning if verify=False
|
# ignore InsecureRequestWarning if verify=False
|
||||||
@ -118,7 +118,7 @@ def _get_user_agent(config: Config) -> str:
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
def get(url: str, **kwargs) -> requests.Response:
|
def get(url: str, **kwargs: Any) -> requests.Response:
|
||||||
"""Sends a GET request like requests.get().
|
"""Sends a GET request like requests.get().
|
||||||
|
|
||||||
This sets up User-Agent header and TLS verification automatically."""
|
This sets up User-Agent header and TLS verification automatically."""
|
||||||
@ -134,7 +134,7 @@ def get(url: str, **kwargs) -> requests.Response:
|
|||||||
return requests.get(url, **kwargs)
|
return requests.get(url, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def head(url: str, **kwargs) -> requests.Response:
|
def head(url: str, **kwargs: Any) -> requests.Response:
|
||||||
"""Sends a HEAD request like requests.head().
|
"""Sends a HEAD request like requests.head().
|
||||||
|
|
||||||
This sets up User-Agent header and TLS verification automatically."""
|
This sets up User-Agent header and TLS verification automatically."""
|
||||||
|
@ -155,7 +155,7 @@ class UIDTransform(SphinxTransform):
|
|||||||
"""Add UIDs to doctree for versioning."""
|
"""Add UIDs to doctree for versioning."""
|
||||||
default_priority = 880
|
default_priority = 880
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
env = self.env
|
env = self.env
|
||||||
old_doctree = None
|
old_doctree = None
|
||||||
if not env.versioning_condition:
|
if not env.versioning_condition:
|
||||||
|
@ -13,8 +13,8 @@ import os
|
|||||||
import posixpath
|
import posixpath
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
|
from typing import Any, Iterable, Tuple
|
||||||
from typing import cast
|
from typing import cast
|
||||||
from typing import Iterable, Tuple
|
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.nodes import Element, Node, Text
|
from docutils.nodes import Element, Node, Text
|
||||||
@ -73,7 +73,7 @@ class HTMLTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
|
|
||||||
builder = None # type: StandaloneHTMLBuilder
|
builder = None # type: StandaloneHTMLBuilder
|
||||||
|
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
if isinstance(args[0], nodes.document) and isinstance(args[1], Builder):
|
if isinstance(args[0], nodes.document) and isinstance(args[1], Builder):
|
||||||
document, builder = args
|
document, builder = args
|
||||||
else:
|
else:
|
||||||
|
@ -12,8 +12,8 @@ import os
|
|||||||
import posixpath
|
import posixpath
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
|
from typing import Any, Iterable, Tuple
|
||||||
from typing import cast
|
from typing import cast
|
||||||
from typing import Iterable, Tuple
|
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.nodes import Element, Node, Text
|
from docutils.nodes import Element, Node, Text
|
||||||
@ -45,7 +45,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
|
|||||||
|
|
||||||
builder = None # type: StandaloneHTMLBuilder
|
builder = None # type: StandaloneHTMLBuilder
|
||||||
|
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
if isinstance(args[0], nodes.document) and isinstance(args[1], Builder):
|
if isinstance(args[0], nodes.document) and isinstance(args[1], Builder):
|
||||||
document, builder = args
|
document, builder = args
|
||||||
else:
|
else:
|
||||||
|
@ -60,7 +60,7 @@ class NestedInlineTransform:
|
|||||||
def __init__(self, document: nodes.document) -> None:
|
def __init__(self, document: nodes.document) -> None:
|
||||||
self.document = document
|
self.document = document
|
||||||
|
|
||||||
def apply(self, **kwargs) -> None:
|
def apply(self, **kwargs: Any) -> None:
|
||||||
matcher = NodeMatcher(nodes.literal, nodes.emphasis, nodes.strong)
|
matcher = NodeMatcher(nodes.literal, nodes.emphasis, nodes.strong)
|
||||||
for node in self.document.traverse(matcher): # type: TextElement
|
for node in self.document.traverse(matcher): # type: TextElement
|
||||||
if any(matcher(subnode) for subnode in node):
|
if any(matcher(subnode) for subnode in node):
|
||||||
@ -81,7 +81,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
|
|
||||||
_docinfo = {} # type: Dict[str, Any]
|
_docinfo = {} # type: Dict[str, Any]
|
||||||
|
|
||||||
def __init__(self, *args) -> None:
|
def __init__(self, *args: Any) -> None:
|
||||||
if isinstance(args[0], nodes.document) and isinstance(args[1], Builder):
|
if isinstance(args[0], nodes.document) and isinstance(args[1], Builder):
|
||||||
document, builder = args
|
document, builder = args
|
||||||
else:
|
else:
|
||||||
|
@ -13,7 +13,7 @@ import re
|
|||||||
import textwrap
|
import textwrap
|
||||||
import warnings
|
import warnings
|
||||||
from itertools import groupby, chain
|
from itertools import groupby, chain
|
||||||
from typing import Callable, Dict, List, Iterable, Optional, Set, Tuple, Union
|
from typing import Any, Callable, Dict, List, Iterable, Optional, Set, Tuple, Union
|
||||||
from typing import cast
|
from typing import cast
|
||||||
|
|
||||||
from docutils import nodes, writers
|
from docutils import nodes, writers
|
||||||
@ -362,7 +362,7 @@ MAXWIDTH = 70
|
|||||||
STDINDENT = 3
|
STDINDENT = 3
|
||||||
|
|
||||||
|
|
||||||
def my_wrap(text: str, width: int = MAXWIDTH, **kwargs) -> List[str]:
|
def my_wrap(text: str, width: int = MAXWIDTH, **kwargs: Any) -> List[str]:
|
||||||
w = TextWrapper(width=width, **kwargs)
|
w = TextWrapper(width=width, **kwargs)
|
||||||
return w.wrap(text)
|
return w.wrap(text)
|
||||||
|
|
||||||
@ -1182,6 +1182,6 @@ class TextTranslator(SphinxTranslator):
|
|||||||
warnings.warn('TextTranslator._make_depart_admonition() is deprecated.',
|
warnings.warn('TextTranslator._make_depart_admonition() is deprecated.',
|
||||||
RemovedInSphinx30Warning)
|
RemovedInSphinx30Warning)
|
||||||
|
|
||||||
def depart_admonition(self, node: Element) -> None:
|
def depart_admonition(self: "TextTranslator", node: Element) -> None:
|
||||||
self.end_state(first=admonitionlabels[name] + ': ')
|
self.end_state(first=admonitionlabels[name] + ': ')
|
||||||
return depart_admonition
|
return depart_admonition
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
:license: BSD, see LICENSE for details.
|
:license: BSD, see LICENSE for details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from docutils.writers.docutils_xml import Writer as BaseXMLWriter
|
from docutils.writers.docutils_xml import Writer as BaseXMLWriter
|
||||||
|
|
||||||
from sphinx.builders import Builder
|
from sphinx.builders import Builder
|
||||||
@ -19,7 +21,7 @@ class XMLWriter(BaseXMLWriter):
|
|||||||
self.builder = builder
|
self.builder = builder
|
||||||
self.translator_class = self.builder.get_translator_class()
|
self.translator_class = self.builder.get_translator_class()
|
||||||
|
|
||||||
def translate(self, *args, **kwargs) -> None:
|
def translate(self, *args: Any, **kwargs: Any) -> None:
|
||||||
self.document.settings.newlines = \
|
self.document.settings.newlines = \
|
||||||
self.document.settings.indents = \
|
self.document.settings.indents = \
|
||||||
self.builder.env.config.xml_pretty
|
self.builder.env.config.xml_pretty
|
||||||
|
Loading…
Reference in New Issue
Block a user