Skip to content

Commit bfefd59

Browse files
committed
Remove member_order attributes
1 parent c58caef commit bfefd59

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

sphinx/ext/autodoc/_documenters.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ class Documenter:
7979
#: name by which the directive is called (auto...) and the default
8080
#: generated directive name
8181
objtype: ClassVar = 'object'
82-
#: order if autodoc_member_order is set to 'groupwise'
83-
member_order: ClassVar = 0
8482
#: true if the generated content may contain titles
8583
titles_allowed: ClassVar = True
8684

@@ -174,14 +172,6 @@ def _load_object_by_name(self) -> Literal[True] | None:
174172
self.parent = parent
175173
self.object_name = props.object_name
176174
self.object = props._obj
177-
if self.objtype == 'method':
178-
if 'staticmethod' in props.properties: # type: ignore[attr-defined]
179-
# document static members before regular methods
180-
self.member_order -= 1 # type: ignore[misc]
181-
elif 'classmethod' in props.properties: # type: ignore[attr-defined]
182-
# document class methods before static methods as
183-
# they usually behave as alternative constructors
184-
self.member_order -= 2 # type: ignore[misc]
185175
self._load_object_has_been_called = True
186176
return True
187177

@@ -497,7 +487,39 @@ def sort_members(
497487
"""Sort the given member list."""
498488
if order == 'groupwise':
499489
# sort by group; alphabetically within groups
500-
documenters.sort(key=lambda e: (e[0].member_order, e[0].name))
490+
491+
def key_func(entry: tuple[Documenter, bool]) -> tuple[int, str]:
492+
documenter, _ = entry
493+
props = documenter.props
494+
495+
if props.obj_type == 'exception':
496+
group_key = 10
497+
elif props.obj_type == 'class':
498+
group_key = 20
499+
elif props.obj_type in {'function', 'decorator'}:
500+
group_key = 30
501+
elif props.obj_type == 'data':
502+
group_key = 40
503+
elif props.obj_type == 'method':
504+
if props.is_classmethod: # type: ignore[attr-defined]
505+
# document class methods before static methods as
506+
# they usually behave as alternative constructors
507+
group_key = 48
508+
elif props.is_staticmethod: # type: ignore[attr-defined]
509+
# document static members before regular methods
510+
group_key = 49
511+
else:
512+
group_key = 50
513+
elif props.obj_type in {'attribute', 'property'}:
514+
group_key = 60
515+
elif props.obj_type == 'type':
516+
group_key = 70
517+
else:
518+
group_key = 0
519+
520+
return group_key, documenter.name
521+
522+
documenters.sort(key=key_func)
501523
elif order == 'bysource':
502524
if (
503525
isinstance(self, ModuleDocumenter)
@@ -780,7 +802,6 @@ class FunctionDocumenter(Documenter):
780802
props: _FunctionDefProperties
781803

782804
objtype = 'function'
783-
member_order = 30
784805

785806

786807
class DecoratorDocumenter(FunctionDocumenter):
@@ -797,7 +818,6 @@ class ClassDocumenter(Documenter):
797818
props: _ClassDefProperties
798819

799820
objtype = 'class'
800-
member_order = 20
801821
option_spec: ClassVar[OptionSpec] = {
802822
'members': members_option,
803823
'undoc-members': bool_option,
@@ -836,7 +856,6 @@ class ExceptionDocumenter(ClassDocumenter):
836856
props: _ClassDefProperties
837857

838858
objtype = 'exception'
839-
member_order = 10
840859

841860

842861
class DataDocumenter(Documenter):
@@ -847,7 +866,6 @@ class DataDocumenter(Documenter):
847866
__uninitialized_global_variable__ = True
848867

849868
objtype = 'data'
850-
member_order = 40
851869
option_spec: ClassVar[OptionSpec] = dict(Documenter.option_spec)
852870
option_spec['annotation'] = annotation_option
853871
option_spec['no-value'] = bool_option
@@ -860,7 +878,6 @@ class MethodDocumenter(Documenter):
860878

861879
objtype = 'method'
862880
directivetype = 'method'
863-
member_order = 50
864881

865882

866883
class AttributeDocumenter(Documenter):
@@ -869,7 +886,6 @@ class AttributeDocumenter(Documenter):
869886
props: _AssignStatementProperties
870887

871888
objtype = 'attribute'
872-
member_order = 60
873889
option_spec: ClassVar[OptionSpec] = dict(Documenter.option_spec)
874890
option_spec['annotation'] = annotation_option
875891
option_spec['no-value'] = bool_option
@@ -887,7 +903,6 @@ class PropertyDocumenter(Documenter):
887903
props: _FunctionDefProperties
888904

889905
objtype = 'property'
890-
member_order = 60
891906

892907

893908
class TypeAliasDocumenter(Documenter):
@@ -896,7 +911,6 @@ class TypeAliasDocumenter(Documenter):
896911
props: _TypeStatementProperties
897912

898913
objtype = 'type'
899-
member_order = 70
900914
option_spec: ClassVar[OptionSpec] = {
901915
'no-index': bool_option,
902916
'no-index-entry': bool_option,

0 commit comments

Comments
 (0)