Skip to content

Commit 2b5c693

Browse files
bsipoczAA-Turner
andauthored
Use normalize_options() from Docutils in preference to set_classes() (#13844)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
1 parent 44a9896 commit 2b5c693

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

sphinx/directives/patches.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99
from docutils.parsers.rst import directives
1010
from docutils.parsers.rst.directives import images, tables
1111
from docutils.parsers.rst.directives.misc import Meta
12-
from docutils.parsers.rst.roles import set_classes
1312

1413
from sphinx.directives import optional_int
1514
from sphinx.locale import __
1615
from sphinx.util import logging
17-
from sphinx.util.docutils import SphinxDirective
16+
from sphinx.util.docutils import SphinxDirective, _normalize_options
1817
from sphinx.util.nodes import set_source_info
1918
from sphinx.util.osutil import SEP, relpath
2019

@@ -100,7 +99,7 @@ class Code(SphinxDirective):
10099
def run(self) -> list[Node]:
101100
self.assert_has_content()
102101

103-
set_classes(self.options)
102+
self.options = _normalize_options(self.options)
104103
code = '\n'.join(self.content)
105104
node = nodes.literal_block(
106105
code,
@@ -215,7 +214,7 @@ class Rubric(SphinxDirective):
215214
}
216215

217216
def run(self) -> list[nodes.rubric | nodes.system_message]:
218-
set_classes(self.options)
217+
self.options = _normalize_options(self.options)
219218
rubric_text = self.arguments[0]
220219
textnodes, messages = self.parse_inline(rubric_text, lineno=self.lineno)
221220
if 'heading-level' in self.options:

sphinx/roles.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@
66
from typing import TYPE_CHECKING
77

88
import docutils.parsers.rst.directives
9-
import docutils.parsers.rst.roles
109
import docutils.parsers.rst.states
1110
from docutils import nodes, utils
1211

1312
from sphinx import addnodes
1413
from sphinx.locale import _, __
1514
from sphinx.util import ws_re
16-
from sphinx.util.docutils import ReferenceRole, SphinxRole
15+
from sphinx.util.docutils import ReferenceRole, SphinxRole, _normalize_options
1716

1817
if TYPE_CHECKING:
1918
from collections.abc import Sequence
@@ -584,10 +583,7 @@ def code_role(
584583
options: dict[str, Any] | None = None,
585584
content: Sequence[str] = (),
586585
) -> tuple[list[Node], list[system_message]]:
587-
if options is None:
588-
options = {}
589-
options = options.copy()
590-
docutils.parsers.rst.roles.set_classes(options)
586+
options = _normalize_options(options)
591587
language = options.get('language', '')
592588
classes = ['code']
593589
if language:

sphinx/util/docutils.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,3 +912,19 @@ def _get_settings(
912912
read_config_files=read_config_files,
913913
)
914914
return option_parser.get_default_values() # type: ignore[return-value]
915+
916+
917+
if docutils.__version_info__[:2] < (0, 22):
918+
from docutils.parsers.rst.roles import set_classes
919+
920+
def _normalize_options(options: dict[str, Any] | None) -> dict[str, Any]:
921+
if options is None:
922+
return {}
923+
n_options = options.copy()
924+
set_classes(n_options)
925+
return n_options
926+
927+
else:
928+
from docutils.parsers.rst.roles import ( # type: ignore[attr-defined, no-redef]
929+
normalize_options as _normalize_options, # NoQA: F401
930+
)

0 commit comments

Comments
 (0)