diff --git a/sphinx/ext/autodoc/directive.py b/sphinx/ext/autodoc/directive.py index 7741dcbdf..f39b00f1a 100644 --- a/sphinx/ext/autodoc/directive.py +++ b/sphinx/ext/autodoc/directive.py @@ -13,10 +13,10 @@ from sphinx.util.parsing import nested_parse_to_nodes if TYPE_CHECKING: from docutils.nodes import Node - from docutils.parsers.rst.states import RSTState from sphinx.config import Config from sphinx.environment import BuildEnvironment + from sphinx.util.typing import _RSTState as RSTState logger = logging.getLogger(__name__) @@ -112,7 +112,7 @@ class AutodocDirective(SphinxDirective): reporter = self.state.document.reporter try: - source, lineno = reporter.get_source_and_line( + source, lineno = reporter.get_source_and_line( # type: ignore[attr-defined] self.lineno) except AttributeError: source, lineno = (None, None) diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index b9e513780..7a47003d7 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -378,7 +378,7 @@ class InheritanceDiagram(SphinxDirective): aliases=self.config.inheritance_alias, top_classes=node['top-classes']) except InheritanceException as err: - return [node.document.reporter.warning(err, line=self.lineno)] # type: ignore[union-attr] + return [node.document.reporter.warning(err, line=self.lineno)] # Create xref nodes for each target of the graph's image map and # add them to the doc tree so that Sphinx can resolve the @@ -386,7 +386,7 @@ class InheritanceDiagram(SphinxDirective): # removed from the doctree after we're done with them. for name in graph.get_all_class_names(): refnodes, x = class_role( # type: ignore[call-arg,misc] - 'class', ':class:`%s`' % name, name, 0, self.state) + 'class', ':class:`%s`' % name, name, 0, self.state.inliner) node.extend(refnodes) # Store the graph object so we can use it to generate the # dot file later diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index 9f3e827c8..5f4169458 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -20,12 +20,13 @@ if TYPE_CHECKING: from docutils.nodes import Element from docutils.parsers.rst import Directive - from docutils.parsers.rst.states import Inliner, RSTState + from docutils.parsers.rst.states import Inliner from docutils.statemachine import StringList from sphinx.builders import Builder from sphinx.environment import BuildEnvironment from sphinx.util.tags import Tags + from sphinx.util.typing import _RSTState as RSTState logger = logging.getLogger(__name__) diff --git a/sphinx/util/parsing.py b/sphinx/util/parsing.py index a8f937f8f..432d9f381 100644 --- a/sphinx/util/parsing.py +++ b/sphinx/util/parsing.py @@ -11,7 +11,7 @@ from docutils.statemachine import StringList, string2lines if TYPE_CHECKING: from collections.abc import Iterator - from docutils.parsers.rst.states import RSTState + from sphinx.util.typing import _RSTState as RSTState def nested_parse_to_nodes( diff --git a/sphinx/util/typing.py b/sphinx/util/typing.py index e0ff3b28f..2aab2b4f1 100644 --- a/sphinx/util/typing.py +++ b/sphinx/util/typing.py @@ -26,10 +26,12 @@ if TYPE_CHECKING: from collections.abc import Mapping from typing import Final, Literal + from docutils.parsers.rst.states import RSTState as _RSTStateGeneric from typing_extensions import TypeAlias, TypeIs from sphinx.application import Sphinx + _RSTState: TypeAlias = _RSTStateGeneric[list[str]] _RestifyMode: TypeAlias = Literal[ 'fully-qualified-except-typing', 'smart', diff --git a/tests/test_util/test_util_docutils_sphinx_directive.py b/tests/test_util/test_util_docutils_sphinx_directive.py index 3b6784b17..20c08191f 100644 --- a/tests/test_util/test_util_docutils_sphinx_directive.py +++ b/tests/test_util/test_util_docutils_sphinx_directive.py @@ -11,16 +11,16 @@ from sphinx.util.docutils import SphinxDirective, new_document def make_directive(*, env: SimpleNamespace, input_lines: StringList | None = None) -> SphinxDirective: - state, directive = make_directive_and_state(env=env, input_lines=input_lines) + _, directive = make_directive_and_state(env=env, input_lines=input_lines) return directive -def make_directive_and_state(*, env: SimpleNamespace, input_lines: StringList | None = None) -> tuple[RSTState, SphinxDirective]: +def make_directive_and_state(*, env: SimpleNamespace, input_lines: StringList | None = None) -> tuple[RSTState[list[str]], SphinxDirective]: sm = RSTStateMachine(state_classes, initial_state='Body') sm.reporter = object() if input_lines is not None: sm.input_lines = input_lines - state = RSTState(sm) + state: RSTState[list[str]] = RSTState(sm) state.document = new_document('') state.document.settings.env = env state.document.settings.tab_width = 4