Skip to content

Commit dda93d4

Browse files
committed
Move _document_members()
1 parent 753c2b8 commit dda93d4

File tree

2 files changed

+85
-66
lines changed

2 files changed

+85
-66
lines changed

sphinx/ext/autodoc/_documenters.py

Lines changed: 19 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@
1515
member_order_option,
1616
members_option,
1717
)
18-
from sphinx.ext.autodoc._member_finder import _gather_members
18+
from sphinx.ext.autodoc._member_finder import _document_members
1919
from sphinx.ext.autodoc._renderer import _add_content, _directive_header_lines
20-
from sphinx.ext.autodoc._sentinels import ALL
2120
from sphinx.ext.autodoc.importer import _load_object_by_name
2221
from sphinx.ext.autodoc.mock import ismock
2322
from sphinx.locale import _, __
@@ -471,46 +470,25 @@ def _generate(
471470
self.add_content(more_content, indent=indent)
472471

473472
# document members, if possible
474-
has_members = isinstance(self, ModuleDocumenter) or (
475-
isinstance(self, ClassDocumenter) and not self.props.doc_as_attr
473+
analyzer = self.analyzer
474+
if analyzer is not None:
475+
analyzer.analyze()
476+
_document_members(
477+
all_members=all_members,
478+
analyzer_order=analyzer.tagorder if analyzer is not None else {},
479+
attr_docs=analyzer.attr_docs if analyzer is not None else {},
480+
config=self.config,
481+
current_document=self._current_document,
482+
directive=self.directive,
483+
events=self._events,
484+
get_attr=self.get_attr,
485+
indent=indent,
486+
name=self.name,
487+
options=self.options,
488+
props=self.props,
489+
real_modname=self.real_modname,
490+
registry=self.env._registry,
476491
)
477-
if has_members:
478-
want_all = bool(
479-
all_members
480-
or self.options.inherited_members
481-
or self.options.members is ALL
482-
)
483-
analyzer = self.analyzer
484-
if analyzer is not None:
485-
analyzer.analyze()
486-
member_documenters = _gather_members(
487-
want_all=want_all,
488-
indent=indent,
489-
analyzer_order=analyzer.tagorder if analyzer is not None else {},
490-
attr_docs=analyzer.attr_docs if analyzer is not None else {},
491-
config=self.config,
492-
current_document=self._current_document,
493-
directive=self.directive,
494-
events=self._events,
495-
get_attr=self.get_attr,
496-
name=self.name,
497-
options=self.options,
498-
props=self.props,
499-
registry=self.env._registry,
500-
)
501-
502-
# for implicit module members, check __module__ to avoid
503-
# documenting imported objects
504-
members_check_module = bool(
505-
isinstance(self, ModuleDocumenter)
506-
and want_all
507-
and (self.options.ignore_module_all or self.props.all is None)
508-
)
509-
_document_members(
510-
member_documenters=member_documenters,
511-
real_modname=self.real_modname,
512-
members_check_module=members_check_module,
513-
)
514492

515493

516494
class ModuleDocumenter(Documenter):
@@ -649,28 +627,3 @@ def autodoc_attrgetter(
649627
return func(obj, name, *defargs)
650628

651629
return safe_getattr(obj, name, *defargs)
652-
653-
654-
def _document_members(
655-
*,
656-
member_documenters: list[tuple[Documenter, bool]],
657-
real_modname: str,
658-
members_check_module: bool,
659-
) -> None:
660-
"""Generate reST for member documentation.
661-
662-
If *all_members* is True, document all members, else those given by
663-
*self.options.members*.
664-
"""
665-
for documenter, is_attr in member_documenters:
666-
assert documenter.props.module_name
667-
# We can directly call ._generate() since the documenters
668-
# already called ``_load_object_by_name()`` before.
669-
#
670-
# Note that those two methods above do not emit events, so
671-
# whatever objects we deduced should not have changed.
672-
documenter._generate(
673-
all_members=True,
674-
real_modname=real_modname,
675-
check_module=members_check_module and not is_attr,
676-
)

sphinx/ext/autodoc/_member_finder.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,72 @@ def __repr__(self) -> str:
9090
)
9191

9292

93+
def _document_members(
94+
*,
95+
all_members: bool,
96+
analyzer_order: dict[str, int],
97+
attr_docs: dict[tuple[str, str], list[str]],
98+
config: Config,
99+
current_document: _CurrentDocument,
100+
directive: DocumenterBridge,
101+
events: EventManager,
102+
get_attr: _AttrGetter,
103+
indent: str,
104+
name: str,
105+
options: _AutoDocumenterOptions,
106+
props: _ItemProperties,
107+
real_modname: str,
108+
registry: SphinxComponentRegistry,
109+
) -> None:
110+
"""Generate reST for member documentation.
111+
112+
If *all_members* is True, document all members, else those given by
113+
*self.options.members*.
114+
"""
115+
has_members = props.obj_type == 'module' or (
116+
props.obj_type in {'class', 'exception'} and not props.doc_as_attr # type: ignore[attr-defined]
117+
)
118+
if not has_members:
119+
return
120+
121+
want_all = bool(all_members or options.inherited_members or options.members is ALL)
122+
member_documenters = _gather_members(
123+
want_all=want_all,
124+
indent=indent,
125+
analyzer_order=analyzer_order,
126+
attr_docs=attr_docs,
127+
config=config,
128+
current_document=current_document,
129+
directive=directive,
130+
events=events,
131+
get_attr=get_attr,
132+
name=name,
133+
options=options,
134+
props=props,
135+
registry=registry,
136+
)
137+
138+
# for implicit module members, check __module__ to avoid
139+
# documenting imported objects
140+
members_check_module = bool(
141+
props.obj_type == 'module'
142+
and want_all
143+
and (options.ignore_module_all or props.all is None) # type: ignore[attr-defined]
144+
)
145+
for documenter, is_attr in member_documenters:
146+
assert documenter.props.module_name
147+
# We can directly call ._generate() since the documenters
148+
# already called ``_load_object_by_name()`` before.
149+
#
150+
# Note that those two methods above do not emit events, so
151+
# whatever objects we deduced should not have changed.
152+
documenter._generate(
153+
all_members=True,
154+
real_modname=real_modname,
155+
check_module=members_check_module and not is_attr,
156+
)
157+
158+
93159
def _gather_members(
94160
*,
95161
want_all: bool,

0 commit comments

Comments
 (0)