mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add docutils-stubs to test deps
This commit is contained in:
1
setup.py
1
setup.py
@@ -46,6 +46,7 @@ extras_require = {
|
|||||||
'flake8>=3.5.0',
|
'flake8>=3.5.0',
|
||||||
'flake8-import-order',
|
'flake8-import-order',
|
||||||
'mypy>=0.470',
|
'mypy>=0.470',
|
||||||
|
'docutils-stubs',
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -83,7 +83,7 @@ class Catalog:
|
|||||||
if msg not in self.metadata: # faster lookup in hash
|
if msg not in self.metadata: # faster lookup in hash
|
||||||
self.messages.append(msg)
|
self.messages.append(msg)
|
||||||
self.metadata[msg] = []
|
self.metadata[msg] = []
|
||||||
self.metadata[msg].append((origin.source, origin.line, origin.uid))
|
self.metadata[msg].append((origin.source, origin.line, origin.uid)) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
class MsgOrigin:
|
class MsgOrigin:
|
||||||
|
@@ -62,10 +62,10 @@ class Meta(html.Meta, SphinxDirective):
|
|||||||
meta = node.details['nodes'][0]
|
meta = node.details['nodes'][0]
|
||||||
meta.source = self.env.doc2path(self.env.docname)
|
meta.source = self.env.doc2path(self.env.docname)
|
||||||
meta.line = self.lineno
|
meta.line = self.lineno
|
||||||
meta.rawcontent = meta['content']
|
meta.rawcontent = meta['content'] # type: ignore
|
||||||
|
|
||||||
# docutils' meta nodes aren't picklable because the class is nested
|
# docutils' meta nodes aren't picklable because the class is nested
|
||||||
meta.__class__ = addnodes.meta
|
meta.__class__ = addnodes.meta # type: ignore
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@@ -152,7 +152,7 @@ class PyXrefMixin:
|
|||||||
delims_re = re.compile(delims)
|
delims_re = re.compile(delims)
|
||||||
sub_targets = re.split(delims, target)
|
sub_targets = re.split(delims, target)
|
||||||
|
|
||||||
split_contnode = bool(contnode and contnode.astext() == target)
|
split_contnode = bool(contnode and contnode.astext() == target) # type: ignore
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
for sub_target in filter(None, sub_targets):
|
for sub_target in filter(None, sub_targets):
|
||||||
|
@@ -246,8 +246,8 @@ class TocTree:
|
|||||||
caption_node.rawsource = toctree['rawcaption']
|
caption_node.rawsource = toctree['rawcaption']
|
||||||
if hasattr(toctree, 'uid'):
|
if hasattr(toctree, 'uid'):
|
||||||
# move uid to caption_node to translate it
|
# move uid to caption_node to translate it
|
||||||
caption_node.uid = toctree.uid
|
caption_node.uid = toctree.uid # type: ignore
|
||||||
del toctree.uid
|
del toctree.uid # type: ignore
|
||||||
newnode += caption_node
|
newnode += caption_node
|
||||||
newnode.extend(tocentries)
|
newnode.extend(tocentries)
|
||||||
newnode['toctree'] = True
|
newnode['toctree'] = True
|
||||||
|
@@ -114,7 +114,7 @@ class AutodocDirective(SphinxDirective):
|
|||||||
reporter = self.state.document.reporter
|
reporter = self.state.document.reporter
|
||||||
|
|
||||||
try:
|
try:
|
||||||
source, lineno = reporter.get_source_and_line(self.lineno)
|
source, lineno = reporter.get_source_and_line(self.lineno) # type: ignore
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
source, lineno = (None, None)
|
source, lineno = (None, None)
|
||||||
logger.debug('[autodoc] %s:%s: input:\n%s', source, lineno, self.block_text)
|
logger.debug('[autodoc] %s:%s: input:\n%s', source, lineno, self.block_text)
|
||||||
|
@@ -233,7 +233,7 @@ class SphinxRSTFileInput(SphinxBaseFileInput):
|
|||||||
for lineno, line in enumerate(epilog.splitlines()):
|
for lineno, line in enumerate(epilog.splitlines()):
|
||||||
text.append(line, '<rst_epilog>', lineno)
|
text.append(line, '<rst_epilog>', lineno)
|
||||||
|
|
||||||
def read(self):
|
def read(self): # type: ignore
|
||||||
# type: () -> StringList
|
# type: () -> StringList
|
||||||
warnings.warn('SphinxRSTFileInput is deprecated.',
|
warnings.warn('SphinxRSTFileInput is deprecated.',
|
||||||
RemovedInSphinx30Warning, stacklevel=2)
|
RemovedInSphinx30Warning, stacklevel=2)
|
||||||
@@ -284,7 +284,7 @@ def read_doc(app, env, filename):
|
|||||||
filetype = get_filetype(app.config.source_suffix, filename)
|
filetype = get_filetype(app.config.source_suffix, filename)
|
||||||
input_class = app.registry.get_source_input(filetype)
|
input_class = app.registry.get_source_input(filetype)
|
||||||
reader = SphinxStandaloneReader(app)
|
reader = SphinxStandaloneReader(app)
|
||||||
source = input_class(app, env, source=None, source_path=filename,
|
source = input_class(app, env, source=None, source_path=filename, # type: ignore
|
||||||
encoding=env.config.source_encoding)
|
encoding=env.config.source_encoding)
|
||||||
parser = app.registry.create_source_parser(app, filetype)
|
parser = app.registry.create_source_parser(app, filetype)
|
||||||
if parser.__class__.__name__ == 'CommonMarkParser' and parser.settings_spec == ():
|
if parser.__class__.__name__ == 'CommonMarkParser' and parser.settings_spec == ():
|
||||||
@@ -295,7 +295,7 @@ def read_doc(app, env, filename):
|
|||||||
# CommonMarkParser.
|
# CommonMarkParser.
|
||||||
parser.settings_spec = RSTParser.settings_spec
|
parser.settings_spec = RSTParser.settings_spec
|
||||||
|
|
||||||
pub = Publisher(reader=reader,
|
pub = Publisher(reader=reader, # type: ignore
|
||||||
parser=parser,
|
parser=parser,
|
||||||
writer=SphinxDummyWriter(),
|
writer=SphinxDummyWriter(),
|
||||||
source_class=SphinxDummySourceClass,
|
source_class=SphinxDummySourceClass,
|
||||||
|
@@ -76,7 +76,7 @@ class RSTParser(docutils.parsers.rst.Parser, Parser):
|
|||||||
def parse(self, inputstring, document):
|
def parse(self, inputstring, document):
|
||||||
# type: (Union[str, StringList], nodes.document) -> None
|
# type: (Union[str, StringList], nodes.document) -> None
|
||||||
"""Parse text and generate a document tree."""
|
"""Parse text and generate a document tree."""
|
||||||
self.setup_parse(inputstring, document)
|
self.setup_parse(inputstring, document) # type: ignore
|
||||||
self.statemachine = states.RSTStateMachine(
|
self.statemachine = states.RSTStateMachine(
|
||||||
state_classes=self.state_classes,
|
state_classes=self.state_classes,
|
||||||
initial_state=self.initial_state,
|
initial_state=self.initial_state,
|
||||||
|
@@ -133,8 +133,8 @@ class SphinxTestApp(application.Sphinx):
|
|||||||
warningiserror = False
|
warningiserror = False
|
||||||
|
|
||||||
self._saved_path = sys.path[:]
|
self._saved_path = sys.path[:]
|
||||||
self._saved_directives = directives._directives.copy()
|
self._saved_directives = directives._directives.copy() # type: ignore
|
||||||
self._saved_roles = roles._roles.copy()
|
self._saved_roles = roles._roles.copy() # type: ignore
|
||||||
|
|
||||||
self._saved_nodeclasses = set(v for v in dir(nodes.GenericNodeVisitor)
|
self._saved_nodeclasses = set(v for v in dir(nodes.GenericNodeVisitor)
|
||||||
if v.startswith('visit_'))
|
if v.startswith('visit_'))
|
||||||
@@ -154,8 +154,8 @@ class SphinxTestApp(application.Sphinx):
|
|||||||
locale.translators.clear()
|
locale.translators.clear()
|
||||||
sys.path[:] = self._saved_path
|
sys.path[:] = self._saved_path
|
||||||
sys.modules.pop('autodoc_fodder', None)
|
sys.modules.pop('autodoc_fodder', None)
|
||||||
directives._directives = self._saved_directives
|
directives._directives = self._saved_directives # type: ignore
|
||||||
roles._roles = self._saved_roles
|
roles._roles = self._saved_roles # type: ignore
|
||||||
for method in dir(nodes.GenericNodeVisitor):
|
for method in dir(nodes.GenericNodeVisitor):
|
||||||
if method.startswith('visit_') and \
|
if method.startswith('visit_') and \
|
||||||
method not in self._saved_nodeclasses:
|
method not in self._saved_nodeclasses:
|
||||||
|
@@ -63,7 +63,7 @@ def publish_msgstr(app, source, source_path, source_line, config, settings):
|
|||||||
settings=settings,
|
settings=settings,
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
doc = doc[0]
|
doc = doc[0] # type: ignore
|
||||||
except IndexError: # empty node
|
except IndexError: # empty node
|
||||||
pass
|
pass
|
||||||
return doc
|
return doc
|
||||||
|
@@ -18,6 +18,7 @@ from contextlib import contextmanager
|
|||||||
from copy import copy
|
from copy import copy
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
from os import path
|
from os import path
|
||||||
|
from typing import IO, cast
|
||||||
|
|
||||||
import docutils
|
import docutils
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
@@ -55,13 +56,13 @@ def docutils_namespace():
|
|||||||
# type: () -> Generator[None, None, None]
|
# type: () -> Generator[None, None, None]
|
||||||
"""Create namespace for reST parsers."""
|
"""Create namespace for reST parsers."""
|
||||||
try:
|
try:
|
||||||
_directives = copy(directives._directives)
|
_directives = copy(directives._directives) # type: ignore
|
||||||
_roles = copy(roles._roles)
|
_roles = copy(roles._roles) # type: ignore
|
||||||
|
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
directives._directives = _directives
|
directives._directives = _directives # type: ignore
|
||||||
roles._roles = _roles
|
roles._roles = _roles # type: ignore
|
||||||
|
|
||||||
for node in list(additional_nodes):
|
for node in list(additional_nodes):
|
||||||
unregister_node(node)
|
unregister_node(node)
|
||||||
@@ -71,7 +72,7 @@ def docutils_namespace():
|
|||||||
def is_directive_registered(name):
|
def is_directive_registered(name):
|
||||||
# type: (unicode) -> bool
|
# type: (unicode) -> bool
|
||||||
"""Check the *name* directive is already registered."""
|
"""Check the *name* directive is already registered."""
|
||||||
return name in directives._directives
|
return name in directives._directives # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def register_directive(name, directive):
|
def register_directive(name, directive):
|
||||||
@@ -87,7 +88,7 @@ def register_directive(name, directive):
|
|||||||
def is_role_registered(name):
|
def is_role_registered(name):
|
||||||
# type: (unicode) -> bool
|
# type: (unicode) -> bool
|
||||||
"""Check the *name* role is already registered."""
|
"""Check the *name* role is already registered."""
|
||||||
return name in roles._roles
|
return name in roles._roles # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def register_role(name, role):
|
def register_role(name, role):
|
||||||
@@ -103,7 +104,7 @@ def register_role(name, role):
|
|||||||
def unregister_role(name):
|
def unregister_role(name):
|
||||||
# type: (unicode) -> None
|
# type: (unicode) -> None
|
||||||
"""Unregister a role from docutils."""
|
"""Unregister a role from docutils."""
|
||||||
roles._roles.pop(name, None)
|
roles._roles.pop(name, None) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def is_node_registered(node):
|
def is_node_registered(node):
|
||||||
@@ -120,7 +121,7 @@ def register_node(node):
|
|||||||
inside ``docutils_namespace()`` to prevent side-effects.
|
inside ``docutils_namespace()`` to prevent side-effects.
|
||||||
"""
|
"""
|
||||||
if not hasattr(nodes.GenericNodeVisitor, 'visit_' + node.__name__):
|
if not hasattr(nodes.GenericNodeVisitor, 'visit_' + node.__name__):
|
||||||
nodes._add_node_class_names([node.__name__])
|
nodes._add_node_class_names([node.__name__]) # type: ignore
|
||||||
additional_nodes.add(node)
|
additional_nodes.add(node)
|
||||||
|
|
||||||
|
|
||||||
@@ -211,8 +212,8 @@ class sphinx_domains:
|
|||||||
self.directive_func = directives.directive
|
self.directive_func = directives.directive
|
||||||
self.role_func = roles.role
|
self.role_func = roles.role
|
||||||
|
|
||||||
directives.directive = self.lookup_directive
|
directives.directive = self.lookup_directive # type: ignore
|
||||||
roles.role = self.lookup_role
|
roles.role = self.lookup_role # type: ignore
|
||||||
|
|
||||||
def disable(self):
|
def disable(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
@@ -287,7 +288,7 @@ class LoggingReporter(Reporter):
|
|||||||
halt_level=Reporter.SEVERE_LEVEL, debug=False,
|
halt_level=Reporter.SEVERE_LEVEL, debug=False,
|
||||||
error_handler='backslashreplace'):
|
error_handler='backslashreplace'):
|
||||||
# type: (unicode, int, int, bool, unicode) -> None
|
# type: (unicode, int, int, bool, unicode) -> None
|
||||||
stream = WarningStream()
|
stream = cast(IO, WarningStream())
|
||||||
super(LoggingReporter, self).__init__(source, report_level, halt_level,
|
super(LoggingReporter, self).__init__(source, report_level, halt_level,
|
||||||
stream, debug, error_handler=error_handler)
|
stream, debug, error_handler=error_handler)
|
||||||
|
|
||||||
@@ -329,17 +330,17 @@ def switch_source_input(state, content):
|
|||||||
"""Switch current source input of state temporarily."""
|
"""Switch current source input of state temporarily."""
|
||||||
try:
|
try:
|
||||||
# remember the original ``get_source_and_line()`` method
|
# remember the original ``get_source_and_line()`` method
|
||||||
get_source_and_line = state.memo.reporter.get_source_and_line
|
get_source_and_line = state.memo.reporter.get_source_and_line # type: ignore
|
||||||
|
|
||||||
# replace it by new one
|
# replace it by new one
|
||||||
state_machine = StateMachine([], None)
|
state_machine = StateMachine([], None)
|
||||||
state_machine.input_lines = content
|
state_machine.input_lines = content
|
||||||
state.memo.reporter.get_source_and_line = state_machine.get_source_and_line
|
state.memo.reporter.get_source_and_line = state_machine.get_source_and_line # type: ignore # NOQA
|
||||||
|
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
# restore the method
|
# restore the method
|
||||||
state.memo.reporter.get_source_and_line = get_source_and_line
|
state.memo.reporter.get_source_and_line = get_source_and_line # type: ignore
|
||||||
|
|
||||||
|
|
||||||
class SphinxFileOutput(FileOutput):
|
class SphinxFileOutput(FileOutput):
|
||||||
|
@@ -451,7 +451,7 @@ def set_source_info(directive, node):
|
|||||||
|
|
||||||
def set_role_source_info(inliner, lineno, node):
|
def set_role_source_info(inliner, lineno, node):
|
||||||
# type: (Inliner, int, nodes.Node) -> None
|
# type: (Inliner, int, nodes.Node) -> None
|
||||||
node.source, node.line = inliner.reporter.get_source_and_line(lineno)
|
node.source, node.line = inliner.reporter.get_source_and_line(lineno) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
NON_SMARTQUOTABLE_PARENT_NODES = (
|
NON_SMARTQUOTABLE_PARENT_NODES = (
|
||||||
@@ -510,4 +510,4 @@ def _new_copy(self):
|
|||||||
return newnode
|
return newnode
|
||||||
|
|
||||||
|
|
||||||
nodes.Element.copy = _new_copy
|
nodes.Element.copy = _new_copy # type: ignore
|
||||||
|
@@ -281,7 +281,7 @@ class HTMLTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
self.depart_reference(node)
|
self.depart_reference(node)
|
||||||
|
|
||||||
# overwritten -- we don't want source comments to show up in the HTML
|
# overwritten -- we don't want source comments to show up in the HTML
|
||||||
def visit_comment(self, node):
|
def visit_comment(self, node): # type: ignore
|
||||||
# type: (nodes.Element) -> None
|
# type: (nodes.Element) -> None
|
||||||
raise nodes.SkipNode
|
raise nodes.SkipNode
|
||||||
|
|
||||||
@@ -840,7 +840,7 @@ class HTMLTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
else:
|
else:
|
||||||
node['classes'].append('row-odd')
|
node['classes'].append('row-odd')
|
||||||
self.body.append(self.starttag(node, 'tr', ''))
|
self.body.append(self.starttag(node, 'tr', ''))
|
||||||
node.column = 0
|
node.column = 0 # type: ignore
|
||||||
|
|
||||||
def visit_entry(self, node):
|
def visit_entry(self, node):
|
||||||
# type: (nodes.Element) -> None
|
# type: (nodes.Element) -> None
|
||||||
|
@@ -250,7 +250,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
|
|||||||
self.depart_reference(node)
|
self.depart_reference(node)
|
||||||
|
|
||||||
# overwritten -- we don't want source comments to show up in the HTML
|
# overwritten -- we don't want source comments to show up in the HTML
|
||||||
def visit_comment(self, node):
|
def visit_comment(self, node): # type: ignore
|
||||||
# type: (nodes.Element) -> None
|
# type: (nodes.Element) -> None
|
||||||
raise nodes.SkipNode
|
raise nodes.SkipNode
|
||||||
|
|
||||||
@@ -791,7 +791,7 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
|
|||||||
else:
|
else:
|
||||||
node['classes'].append('row-odd')
|
node['classes'].append('row-odd')
|
||||||
self.body.append(self.starttag(node, 'tr', ''))
|
self.body.append(self.starttag(node, 'tr', ''))
|
||||||
node.column = 0
|
node.column = 0 # type: ignore
|
||||||
|
|
||||||
def visit_field_list(self, node):
|
def visit_field_list(self, node):
|
||||||
# type: (nodes.Element) -> None
|
# type: (nodes.Element) -> None
|
||||||
|
@@ -116,7 +116,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
|
|
||||||
# Overwrite admonition label translations with our own
|
# Overwrite admonition label translations with our own
|
||||||
for label, translation in admonitionlabels.items():
|
for label, translation in admonitionlabels.items():
|
||||||
self.language.labels[label] = self.deunicode(translation)
|
self.language.labels[label] = self.deunicode(translation) # type: ignore
|
||||||
|
|
||||||
# overwritten -- added quotes around all .TH arguments
|
# overwritten -- added quotes around all .TH arguments
|
||||||
def header(self):
|
def header(self):
|
||||||
@@ -253,7 +253,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
super(ManualPageTranslator, self).visit_term(node)
|
super(ManualPageTranslator, self).visit_term(node)
|
||||||
|
|
||||||
# overwritten -- we don't want source comments to show up
|
# overwritten -- we don't want source comments to show up
|
||||||
def visit_comment(self, node):
|
def visit_comment(self, node): # type: ignore
|
||||||
# type: (nodes.Element) -> None
|
# type: (nodes.Element) -> None
|
||||||
raise nodes.SkipNode
|
raise nodes.SkipNode
|
||||||
|
|
||||||
@@ -333,7 +333,7 @@ class ManualPageTranslator(SphinxTranslator, BaseTranslator):
|
|||||||
self.body.append(self.defs['reference'][0])
|
self.body.append(self.defs['reference'][0])
|
||||||
# avoid repeating escaping code... fine since
|
# avoid repeating escaping code... fine since
|
||||||
# visit_Text calls astext() and only works on that afterwards
|
# visit_Text calls astext() and only works on that afterwards
|
||||||
self.visit_Text(node)
|
self.visit_Text(node) # type: ignore
|
||||||
self.body.append(self.defs['reference'][1])
|
self.body.append(self.defs['reference'][1])
|
||||||
|
|
||||||
uri = node.get('refuri', '')
|
uri = node.get('refuri', '')
|
||||||
|
Reference in New Issue
Block a user