Skip to content

Commit 753c2b8

Browse files
committed
_sort_members() improvements
1 parent 0a0250d commit 753c2b8

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

sphinx/ext/autodoc/_documenters.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -434,8 +434,8 @@ def _generate(
434434
if self.real_modname != guess_modname:
435435
# Add module to dependency list if target object is defined in other module.
436436
try:
437-
analyzer = ModuleAnalyzer.for_module(guess_modname)
438-
self.directive.record_dependencies.add(analyzer.srcname)
437+
srcname = ModuleAnalyzer.for_module(guess_modname).srcname
438+
self.directive.record_dependencies.add(srcname)
439439
except PycodeError:
440440
pass
441441

@@ -480,10 +480,14 @@ def _generate(
480480
or self.options.inherited_members
481481
or self.options.members is ALL
482482
)
483+
analyzer = self.analyzer
484+
if analyzer is not None:
485+
analyzer.analyze()
483486
member_documenters = _gather_members(
484487
want_all=want_all,
485488
indent=indent,
486-
analyzer=self.analyzer,
489+
analyzer_order=analyzer.tagorder if analyzer is not None else {},
490+
attr_docs=analyzer.attr_docs if analyzer is not None else {},
487491
config=self.config,
488492
current_document=self._current_document,
489493
directive=self.directive,

sphinx/ext/autodoc/_member_finder.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ def _gather_members(
9494
*,
9595
want_all: bool,
9696
indent: str,
97-
analyzer: ModuleAnalyzer | None,
97+
analyzer_order: dict[str, int],
98+
attr_docs: dict[tuple[str, str], list[str]],
9899
config: Config,
99100
current_document: _CurrentDocument,
100101
directive: DocumenterBridge,
@@ -123,11 +124,6 @@ def _gather_members(
123124
current_document.autodoc_class = props.parts[0]
124125

125126
inherited_members = frozenset(options.inherited_members or ())
126-
if analyzer is not None:
127-
analyzer.analyze()
128-
attr_docs = analyzer.attr_docs
129-
else:
130-
attr_docs = {}
131127
found_members = _get_members_to_document(
132128
want_all=want_all,
133129
get_attr=get_attr,
@@ -187,8 +183,8 @@ def _gather_members(
187183
member_documenters = _sort_members(
188184
member_documenters,
189185
member_order,
190-
analyzer=analyzer,
191-
options=options,
186+
ignore_module_all=bool(options.ignore_module_all),
187+
analyzer_order=analyzer_order,
192188
props=props,
193189
)
194190

@@ -562,10 +558,10 @@ def _best_object_type_for_member(
562558

563559
def _sort_members(
564560
documenters: list[tuple[Documenter, bool]],
565-
order: str,
561+
order: Literal['alphabetical', 'bysource', 'groupwise'],
566562
*,
567-
analyzer: ModuleAnalyzer | None,
568-
options: _AutoDocumenterOptions,
563+
ignore_module_all: bool,
564+
analyzer_order: dict[str, int],
569565
props: _ItemProperties,
570566
) -> list[tuple[Documenter, bool]]:
571567
"""Sort the given member list."""
@@ -575,7 +571,7 @@ def _sort_members(
575571
elif order == 'bysource':
576572
if (
577573
isinstance(props, _ModuleProperties)
578-
and not options.ignore_module_all
574+
and not ignore_module_all
579575
and (module_all := props.all)
580576
):
581577
# Sort by __all__
@@ -590,14 +586,13 @@ def key_func(entry: tuple[Documenter, bool]) -> int:
590586

591587
# By default, member discovery order matches source order,
592588
# as dicts are insertion-ordered from Python 3.7.
593-
elif analyzer is not None:
589+
elif analyzer_order:
594590
# sort by source order, by virtue of the module analyzer
595-
tagorder = analyzer.tagorder
596-
tagorder_len = len(tagorder)
591+
order_len = len(analyzer_order)
597592

598593
def key_func(entry: tuple[Documenter, bool]) -> int:
599594
fullname = entry[0].name.split('::')[1]
600-
return tagorder.get(fullname, tagorder_len)
595+
return analyzer_order.get(fullname, order_len)
601596

602597
documenters.sort(key=key_func)
603598
else: # alphabetical

0 commit comments

Comments
 (0)