summaryrefslogtreecommitdiff
path: root/sphinx/util/docutils.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/util/docutils.py')
-rw-r--r--sphinx/util/docutils.py50
1 files changed, 17 insertions, 33 deletions
diff --git a/sphinx/util/docutils.py b/sphinx/util/docutils.py
index ed93939a7..7069189e3 100644
--- a/sphinx/util/docutils.py
+++ b/sphinx/util/docutils.py
@@ -10,8 +10,6 @@
import os
import re
-import types
-import warnings
from contextlib import contextmanager
from copy import copy
from distutils.version import LooseVersion
@@ -24,14 +22,12 @@ import docutils
from docutils import nodes
from docutils.io import FileOutput
from docutils.nodes import Element, Node, system_message
-from docutils.parsers.rst import Directive, directives, roles, convert_directive_function
+from docutils.parsers.rst import Directive, directives, roles
from docutils.parsers.rst.states import Inliner
from docutils.statemachine import StateMachine, State, StringList
from docutils.utils import Reporter, unescape
-from sphinx.deprecation import RemovedInSphinx30Warning
-from sphinx.errors import ExtensionError, SphinxError
-from sphinx.locale import __
+from sphinx.errors import SphinxError
from sphinx.util import logging
from sphinx.util.typing import RoleFunction
@@ -279,25 +275,6 @@ def is_html5_writer_available() -> bool:
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
- ) -> Any:
- warnings.warn('function based directive support is now deprecated. '
- 'Use class based directive instead.',
- RemovedInSphinx30Warning)
-
- if isinstance(obj, (types.FunctionType, types.MethodType)):
- obj.content = has_content # type: ignore
- obj.arguments = argument_spec or (0, 0, False) # type: ignore
- obj.options = option_spec # type: ignore
- return convert_directive_function(obj)
- else:
- if has_content or argument_spec or option_spec:
- raise ExtensionError(__('when adding directive classes, no '
- 'additional arguments may be given'))
- return obj
-
-
@contextmanager
def switch_source_input(state: State, content: StringList) -> Generator[None, None, None]:
"""Switch current source input of state temporarily."""
@@ -353,9 +330,13 @@ class SphinxDirective(Directive):
"""Reference to the :class:`.Config` object."""
return self.env.config
+ def get_source_info(self) -> Tuple[str, int]:
+ """Get source and line number."""
+ return self.state_machine.get_source_and_line(self.lineno)
+
def set_source_info(self, node: Node) -> None:
"""Set source and line number to the node."""
- node.source, node.line = self.state_machine.get_source_and_line(self.lineno)
+ node.source, node.line = self.get_source_info()
class SphinxRole:
@@ -411,12 +392,13 @@ class SphinxRole:
"""Reference to the :class:`.Config` object."""
return self.env.config
- def set_source_info(self, node: Node, lineno: int = None) -> None:
+ def get_source_info(self, lineno: int = None) -> Tuple[str, int]:
if lineno is None:
lineno = self.lineno
+ return self.inliner.reporter.get_source_and_line(lineno) # type: ignore
- source_info = self.inliner.reporter.get_source_and_line(lineno) # type: ignore
- node.source, node.line = source_info
+ def set_source_info(self, node: Node, lineno: int = None) -> None:
+ node.source, node.line = self.get_source_info(lineno)
class ReferenceRole(SphinxRole):
@@ -467,7 +449,7 @@ class SphinxTranslator(nodes.NodeVisitor):
self.config = builder.config
self.settings = document.settings
- def dispatch_visit(self, node):
+ def dispatch_visit(self, node: Node) -> None:
"""
Dispatch node to appropriate visitor method.
The priority of visitor method is:
@@ -479,11 +461,12 @@ class SphinxTranslator(nodes.NodeVisitor):
for node_class in node.__class__.__mro__:
method = getattr(self, 'visit_%s' % (node_class.__name__), None)
if method:
- return method(node)
+ method(node)
+ break
else:
super().dispatch_visit(node)
- def dispatch_departure(self, node):
+ def dispatch_departure(self, node: Node) -> None:
"""
Dispatch node to appropriate departure method.
The priority of departure method is:
@@ -495,7 +478,8 @@ class SphinxTranslator(nodes.NodeVisitor):
for node_class in node.__class__.__mro__:
method = getattr(self, 'depart_%s' % (node_class.__name__), None)
if method:
- return method(node)
+ method(node)
+ break
else:
super().dispatch_departure(node)