Skip to content

Commit ff3e1d2

Browse files
authored
Use _AutodocObjType more consistently (#13970)
1 parent a4a8acc commit ff3e1d2

File tree

7 files changed

+40
-52
lines changed

7 files changed

+40
-52
lines changed

sphinx/ext/autodoc/_member_finder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from sphinx.events import EventManager
3737
from sphinx.ext.autodoc import Documenter
3838
from sphinx.ext.autodoc._directive_options import _AutoDocumenterOptions
39-
from sphinx.ext.autodoc._property_types import _ItemProperties
39+
from sphinx.ext.autodoc._property_types import _AutodocObjType, _ItemProperties
4040
from sphinx.ext.autodoc._sentinels import (
4141
ALL_T,
4242
EMPTY_T,
@@ -553,7 +553,7 @@ def _best_object_type_for_member(
553553
*,
554554
parent_obj_type: str,
555555
parent_props: _ItemProperties | None,
556-
) -> str | None:
556+
) -> _AutodocObjType | None:
557557
"""Return the best object type that supports documenting *member*."""
558558
filtered = []
559559

@@ -618,7 +618,7 @@ def _best_object_type_for_member(
618618

619619
if filtered:
620620
# return the highest priority object type
621-
return max(filtered, key=operator.itemgetter(0))[1]
621+
return max(filtered, key=operator.itemgetter(0))[1] # type: ignore[return-value]
622622
return None
623623

624624

sphinx/ext/autodoc/importer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,7 @@ def _parse_name(
999999

10001000
def _resolve_name(
10011001
*,
1002-
objtype: str,
1002+
objtype: _AutodocObjType,
10031003
module_name: str | None,
10041004
path: str | None,
10051005
base: str,

sphinx/ext/autodoc/typehints.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@
2020

2121
from sphinx.application import Sphinx
2222
from sphinx.ext.autodoc._directive_options import _AutoDocumenterOptions
23+
from sphinx.ext.autodoc._property_types import _AutodocObjType
2324
from sphinx.util.typing import ExtensionMetadata, _StringifyMode
2425

2526

2627
def record_typehints(
2728
app: Sphinx,
28-
objtype: str,
29+
obj_type: _AutodocObjType,
2930
name: str,
3031
obj: Any,
3132
options: _AutoDocumenterOptions,
@@ -60,7 +61,7 @@ def record_typehints(
6061

6162

6263
def merge_typehints(
63-
app: Sphinx, domain: str, objtype: str, contentnode: Element
64+
app: Sphinx, domain: str, obj_type: _AutodocObjType, contentnode: Element
6465
) -> None:
6566
if domain != 'py':
6667
return
@@ -86,7 +87,7 @@ def merge_typehints(
8687

8788
for field_list in field_lists:
8889
if app.config.autodoc_typehints_description_target == 'all':
89-
if objtype == 'class':
90+
if obj_type == 'class':
9091
modify_field_list(
9192
field_list, annotations[fullname], suppress_rtype=True
9293
)

sphinx/ext/autosummary/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
from sphinx.application import Sphinx
9696
from sphinx.environment import BuildEnvironment
9797
from sphinx.ext.autodoc import Documenter
98+
from sphinx.ext.autodoc._property_types import _AutodocObjType
9899
from sphinx.registry import SphinxComponentRegistry
99100
from sphinx.util.typing import ExtensionMetadata, OptionSpec
100101
from sphinx.writers.html5 import HTML5Translator
@@ -166,7 +167,7 @@ def get_documenter(app: Sphinx, obj: Any, parent: Any) -> type[Documenter]:
166167
return app.registry.documenters[obj_type]
167168

168169

169-
def _get_documenter(obj: Any, parent: Any) -> str:
170+
def _get_documenter(obj: Any, parent: Any) -> _AutodocObjType:
170171
"""Get an autodoc.Documenter class suitable for documenting the given
171172
object.
172173

sphinx/ext/autosummary/generate.py

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
from sphinx.application import Sphinx
6969
from sphinx.events import EventManager
7070
from sphinx.ext.autodoc import Documenter
71+
from sphinx.ext.autodoc._property_types import _AutodocObjType
7172

7273
logger = logging.getLogger(__name__)
7374

@@ -223,20 +224,18 @@ def __init__(
223224
*,
224225
config: Config,
225226
events: EventManager,
226-
registry: SphinxComponentRegistry,
227227
) -> None:
228228
self.config = config
229229
self.events = events
230-
self.registry = registry
231230
self.object = obj
232231

233232
def get_object_type(self, name: str, value: Any) -> str:
234233
return _get_documenter(value, self.object)
235234

236-
def is_skipped(self, name: str, value: Any, objtype: str) -> bool:
235+
def is_skipped(self, name: str, value: Any, obj_type: _AutodocObjType) -> bool:
237236
try:
238237
return self.events.emit_firstresult(
239-
'autodoc-skip-member', objtype, name, value, False, {}
238+
'autodoc-skip-member', obj_type, name, value, False, {}
240239
)
241240
except Exception as exc:
242241
logger.warning(
@@ -323,16 +322,14 @@ def generate_autosummary_content(
323322
*,
324323
config: Config,
325324
events: EventManager,
326-
registry: SphinxComponentRegistry,
327325
) -> str:
328326
obj_type = _get_documenter(obj, parent)
329-
doc = registry.documenters[obj_type]
330327

331328
ns: dict[str, Any] = {}
332329
ns.update(context)
333330

334-
if doc.objtype == 'module':
335-
scanner = ModuleScanner(obj, config=config, events=events, registry=registry)
331+
if obj_type == 'module':
332+
scanner = ModuleScanner(obj, config=config, events=events)
336333
ns['members'] = scanner.scan(imported_members)
337334

338335
respect_module_all = not config.autosummary_ignore_module_all
@@ -341,30 +338,27 @@ def generate_autosummary_content(
341338
)
342339

343340
ns['functions'], ns['all_functions'] = _get_members(
344-
doc,
341+
obj_type,
345342
obj,
346343
{'function'},
347344
config=config,
348345
events=events,
349-
registry=registry,
350346
imported=imported_members,
351347
)
352348
ns['classes'], ns['all_classes'] = _get_members(
353-
doc,
349+
obj_type,
354350
obj,
355351
{'class'},
356352
config=config,
357353
events=events,
358-
registry=registry,
359354
imported=imported_members,
360355
)
361356
ns['exceptions'], ns['all_exceptions'] = _get_members(
362-
doc,
357+
obj_type,
363358
obj,
364359
{'exception'},
365360
config=config,
366361
events=events,
367-
registry=registry,
368362
imported=imported_members,
369363
)
370364
ns['attributes'], ns['all_attributes'] = _get_module_attrs(name, ns['members'])
@@ -387,12 +381,11 @@ def generate_autosummary_content(
387381
# Otherwise, use get_modules method normally
388382
if respect_module_all and '__all__' in dir(obj):
389383
imported_modules, all_imported_modules = _get_members(
390-
doc,
384+
obj_type,
391385
obj,
392386
{'module'},
393387
config=config,
394388
events=events,
395-
registry=registry,
396389
imported=True,
397390
)
398391
skip += all_imported_modules
@@ -406,34 +399,32 @@ def generate_autosummary_content(
406399
)
407400
ns['modules'] = imported_modules + modules
408401
ns['all_modules'] = all_imported_modules + all_modules
409-
elif doc.objtype == 'class':
402+
elif obj_type == 'class':
410403
ns['members'] = dir(obj)
411404
ns['inherited_members'] = set(dir(obj)) - set(obj.__dict__.keys())
412405
ns['methods'], ns['all_methods'] = _get_members(
413-
doc,
406+
obj_type,
414407
obj,
415408
{'method'},
416409
config=config,
417410
events=events,
418-
registry=registry,
419411
include_public={'__init__'},
420412
)
421413
ns['attributes'], ns['all_attributes'] = _get_members(
422-
doc,
414+
obj_type,
423415
obj,
424416
{'attribute', 'property'},
425417
config=config,
426418
events=events,
427-
registry=registry,
428419
)
429420

430421
if modname is None or qualname is None:
431422
modname, qualname = _split_full_qualified_name(name)
432423

433-
if doc.objtype in {'method', 'attribute', 'property'}:
424+
if obj_type in {'method', 'attribute', 'property'}:
434425
ns['class'] = qualname.rsplit('.', 1)[0]
435426

436-
if doc.objtype == 'class':
427+
if obj_type == 'class':
437428
shortname = qualname
438429
else:
439430
shortname = qualname.rsplit('.', 1)[-1]
@@ -443,19 +434,21 @@ def generate_autosummary_content(
443434
ns['objname'] = qualname
444435
ns['name'] = shortname
445436

446-
ns['objtype'] = doc.objtype
437+
ns['objtype'] = obj_type
447438
ns['underline'] = len(name) * '='
448439

449440
if template_name:
450441
return template.render(template_name, ns)
451442
else:
452-
return template.render(doc.objtype, ns)
443+
return template.render(obj_type, ns)
453444

454445

455-
def _skip_member(obj: Any, name: str, objtype: str, *, events: EventManager) -> bool:
446+
def _skip_member(
447+
obj: Any, name: str, obj_type: _AutodocObjType, *, events: EventManager
448+
) -> bool:
456449
try:
457450
return events.emit_firstresult(
458-
'autodoc-skip-member', objtype, name, obj, False, {}
451+
'autodoc-skip-member', obj_type, name, obj, False, {}
459452
)
460453
except Exception as exc:
461454
logger.warning(
@@ -554,37 +547,35 @@ def _get_module_members(obj: Any, *, config: Config) -> dict[str, Any]:
554547

555548

556549
def _get_all_members(
557-
doc: type[Documenter], obj: Any, *, config: Config
550+
obj_type: _AutodocObjType, obj: Any, *, config: Config
558551
) -> dict[str, Any]:
559-
if doc.objtype == 'module':
552+
if obj_type == 'module':
560553
return _get_module_members(obj, config=config)
561-
elif doc.objtype == 'class':
554+
elif obj_type == 'class':
562555
return _get_class_members(obj)
563556
return {}
564557

565558

566559
def _get_members(
567-
doc: type[Documenter],
560+
obj_type: _AutodocObjType,
568561
obj: Any,
569562
types: set[str],
570563
*,
571564
config: Config,
572565
events: EventManager,
573-
registry: SphinxComponentRegistry,
574566
include_public: Set[str] = frozenset(),
575567
imported: bool = True,
576568
) -> tuple[list[str], list[str]]:
577569
items: list[str] = []
578570
public: list[str] = []
579571

580-
all_members = _get_all_members(doc, obj, config=config)
572+
all_members = _get_all_members(obj_type, obj, config=config)
581573
for name, value in all_members.items():
582574
obj_type = _get_documenter(value, obj)
583-
documenter = registry.documenters[obj_type]
584-
if documenter.objtype in types:
575+
if obj_type in types:
585576
# skip imported members if expected
586577
if imported or getattr(value, '__module__', None) == obj.__name__:
587-
skipped = _skip_member(value, name, documenter.objtype, events=events)
578+
skipped = _skip_member(value, name, obj_type, events=events)
588579
if skipped is True:
589580
pass
590581
elif skipped is False:
@@ -737,7 +728,6 @@ def generate_autosummary_docs(
737728
qualname,
738729
config=app.config,
739730
events=app.events,
740-
registry=app.registry,
741731
)
742732

743733
file_path = Path(path, filename_map.get(name, name) + suffix)

tests/test_ext_autodoc/autodoc_util.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,19 @@
1818
from docutils.statemachine import StringList
1919

2020
from sphinx.application import Sphinx
21+
from sphinx.ext.autodoc._property_types import _AutodocObjType
2122

2223

2324
def do_autodoc(
2425
app: Sphinx,
25-
objtype: str,
26+
obj_type: _AutodocObjType,
2627
name: str,
2728
options: dict[str, Any] | None = None,
2829
) -> StringList:
2930
options = {} if options is None else options.copy()
3031
if not app.env.current_document.docname:
3132
app.env.current_document.docname = 'index' # set dummy docname
32-
doccls = app.registry.documenters[objtype]
33+
doccls = app.registry.documenters[obj_type]
3334
opts = _process_documenter_options(
3435
option_spec=doccls.option_spec,
3536
default_options=app.config.autodoc_default_options,

tests/test_ext_autosummary/test_ext_autosummary.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,6 @@ def test_autosummary_generate_content_for_module(app):
257257
{},
258258
config=app.config,
259259
events=app.events,
260-
registry=app.registry,
261260
)
262261
assert template.render.call_args[0][0] == 'module'
263262

@@ -320,7 +319,6 @@ def test_autosummary_generate_content_for_module___all__(app):
320319
{},
321320
config=app.config,
322321
events=app.events,
323-
registry=app.registry,
324322
)
325323
assert template.render.call_args[0][0] == 'module'
326324

@@ -372,7 +370,6 @@ def skip_member(app, what, name, obj, skip, options):
372370
{},
373371
config=app.config,
374372
events=app.events,
375-
registry=app.registry,
376373
)
377374
context = template.render.call_args[0][1]
378375
assert context['members'] == [
@@ -414,7 +411,6 @@ def test_autosummary_generate_content_for_module_imported_members(app):
414411
{},
415412
config=app.config,
416413
events=app.events,
417-
registry=app.registry,
418414
)
419415
assert template.render.call_args[0][0] == 'module'
420416

@@ -486,7 +482,6 @@ def test_autosummary_generate_content_for_module_imported_members_inherited_modu
486482
{},
487483
config=app.config,
488484
events=app.events,
489-
registry=app.registry,
490485
)
491486
assert template.render.call_args[0][0] == 'module'
492487

0 commit comments

Comments
 (0)