Skip to content

Commit 7ba7628

Browse files
authored
Napoleon: Fix valid types for configuration values (#13382)
1 parent 8ef0708 commit 7ba7628

File tree

3 files changed

+26
-25
lines changed

3 files changed

+26
-25
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Bugs fixed
2121
Patch by Kazuya Takei.
2222
* #13380: viewcode: Fix importing modules more than once.
2323
Patch by Dave Hoese.
24+
* #13382: Napoleon: Use the right valid types for configuration values.
25+
Patch by Adam Turner.
2426

2527
Testing
2628
-------

sphinx/ext/napoleon/__init__.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from sphinx.util import inspect
1212

1313
if TYPE_CHECKING:
14+
from collections.abc import Sequence, Set
1415
from typing import Any
1516

1617
from sphinx.config import _ConfigRebuild
@@ -270,27 +271,27 @@ def __unicode__(self):
270271
271272
"""
272273

273-
_config_values: dict[str, tuple[Any, _ConfigRebuild]] = {
274-
'napoleon_google_docstring': (True, 'env'),
275-
'napoleon_numpy_docstring': (True, 'env'),
276-
'napoleon_include_init_with_doc': (False, 'env'),
277-
'napoleon_include_private_with_doc': (False, 'env'),
278-
'napoleon_include_special_with_doc': (False, 'env'),
279-
'napoleon_use_admonition_for_examples': (False, 'env'),
280-
'napoleon_use_admonition_for_notes': (False, 'env'),
281-
'napoleon_use_admonition_for_references': (False, 'env'),
282-
'napoleon_use_ivar': (False, 'env'),
283-
'napoleon_use_param': (True, 'env'),
284-
'napoleon_use_rtype': (True, 'env'),
285-
'napoleon_use_keyword': (True, 'env'),
286-
'napoleon_preprocess_types': (False, 'env'),
287-
'napoleon_type_aliases': (None, 'env'),
288-
'napoleon_custom_sections': (None, 'env'),
289-
'napoleon_attr_annotations': (True, 'env'),
290-
}
274+
_config_values: Sequence[tuple[str, bool | None, _ConfigRebuild, Set[type]]] = (
275+
('napoleon_google_docstring', True, 'env', frozenset({bool})),
276+
('napoleon_numpy_docstring', True, 'env', frozenset({bool})),
277+
('napoleon_include_init_with_doc', False, 'env', frozenset({bool})),
278+
('napoleon_include_private_with_doc', False, 'env', frozenset({bool})),
279+
('napoleon_include_special_with_doc', False, 'env', frozenset({bool})),
280+
('napoleon_use_admonition_for_examples', False, 'env', frozenset({bool})),
281+
('napoleon_use_admonition_for_notes', False, 'env', frozenset({bool})),
282+
('napoleon_use_admonition_for_references', False, 'env', frozenset({bool})),
283+
('napoleon_use_ivar', False, 'env', frozenset({bool})),
284+
('napoleon_use_param', True, 'env', frozenset({bool})),
285+
('napoleon_use_rtype', True, 'env', frozenset({bool})),
286+
('napoleon_use_keyword', True, 'env', frozenset({bool})),
287+
('napoleon_preprocess_types', False, 'env', frozenset({bool})),
288+
('napoleon_type_aliases', None, 'env', frozenset({dict, NoneType})),
289+
('napoleon_custom_sections', None, 'env', frozenset({list, tuple, NoneType})),
290+
('napoleon_attr_annotations', True, 'env', frozenset({bool})),
291+
)
291292

292293
def __init__(self, **settings: Any) -> None:
293-
for name, (default, _rebuild) in self._config_values.items():
294+
for name, default, _rebuild, _types in self._config_values:
294295
setattr(self, name, default)
295296
for name, value in settings.items():
296297
setattr(self, name, value)
@@ -331,11 +332,9 @@ def setup(app: Sphinx) -> ExtensionMetadata:
331332
app.connect('autodoc-process-docstring', _process_docstring)
332333
app.connect('autodoc-skip-member', _skip_member)
333334

334-
for name, (default, rebuild) in Config._config_values.items():
335-
if isinstance(default, bool):
336-
app.add_config_value(name, default, rebuild, types=frozenset({bool}))
337-
else:
338-
app.add_config_value(name, default, rebuild, types=frozenset({NoneType}))
335+
for name, default, rebuild, types in Config._config_values:
336+
app.add_config_value(name, default, rebuild, types=types)
337+
339338
return {
340339
'version': sphinx.__display_version__,
341340
'parallel_read_safe': True,

tests/test_extensions/test_ext_napoleon.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def test_unknown_app_type(self):
115115
def test_add_config_values(self):
116116
app = mock.Mock(Sphinx)
117117
setup(app)
118-
for name in Config._config_values:
118+
for name, _default, _rebuild, _types in Config._config_values:
119119
has_config = False
120120
for method_name, args, _kwargs in app.method_calls:
121121
if method_name == 'add_config_value' and args[0] == name:

0 commit comments

Comments
 (0)