Skip to content

Commit 3e9dc0f

Browse files
committed
Remove merge_member_options()
1 parent 90192fc commit 3e9dc0f

File tree

3 files changed

+28
-29
lines changed

3 files changed

+28
-29
lines changed

sphinx/ext/autodoc/_directive_options.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,20 +89,6 @@ def copy(self) -> Self:
8989
def from_directive_options(cls, opts: Mapping[str, Any], /) -> Self:
9090
return cls(**{k.replace('-', '_'): v for k, v in opts.items() if v is not None})
9191

92-
def merge_member_options(self) -> Self:
93-
"""Merge :private-members: and :special-members: into :members:"""
94-
if self.members is ALL:
95-
# merging is not needed when members: ALL
96-
return self
97-
98-
members = self.members or []
99-
for others in self.private_members, self.special_members:
100-
if others is not None and others is not ALL:
101-
members.extend(others)
102-
new = self.copy()
103-
new.members = list(dict.fromkeys(members)) # deduplicate; preserve order
104-
return new
105-
10692

10793
def identity(x: Any) -> Any:
10894
return x

sphinx/ext/autodoc/_documenters.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,6 @@ def __init__(
100100
# the module analyzer to get at attribute docs, or None
101101
self.analyzer: ModuleAnalyzer | None = None
102102

103-
if isinstance(self, ModuleDocumenter):
104-
self.options = self.options.merge_member_options()
105-
elif isinstance(self, ClassDocumenter):
106-
if self.config.autodoc_class_signature == 'separated':
107-
# show __init__() method
108-
if self.options.special_members is None:
109-
self.options.special_members = []
110-
self.options.special_members += ['__new__', '__init__']
111-
self.options = self.options.merge_member_options()
112-
113103
def add_line(self, line: str, source: str, *lineno: int, indent: str) -> None:
114104
"""Append one line of generated reST to the output."""
115105
if line.strip(): # not a blank line

sphinx/ext/autodoc/_member_finder.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,13 @@ def _gather_members(
193193
found_members = _get_members_to_document(
194194
want_all=want_all,
195195
get_attr=get_attr,
196+
class_signature=config.autodoc_class_signature,
196197
inherit_docstrings=config.autodoc_inherit_docstrings,
197198
props=props,
198199
opt_members=options.members or (),
199200
inherited_members=inherited_members,
201+
opt_private_members=options.private_members,
202+
opt_special_members=options.special_members,
200203
ignore_module_all=bool(options.ignore_module_all),
201204
attr_docs=attr_docs,
202205
)
@@ -205,6 +208,7 @@ def _gather_members(
205208
want_all=want_all,
206209
events=events,
207210
get_attr=get_attr,
211+
class_signature=config.autodoc_class_signature,
208212
inherit_docstrings=config.autodoc_inherit_docstrings,
209213
options=options,
210214
props=props,
@@ -277,10 +281,13 @@ def _get_members_to_document(
277281
*,
278282
want_all: bool,
279283
get_attr: _AttrGetter,
284+
class_signature: Literal['mixed', 'separated'],
280285
inherit_docstrings: bool,
281286
props: _ModuleProperties | _ClassDefProperties,
282287
opt_members: ALL_T | Sequence[str],
283288
inherited_members: Set[str],
289+
opt_private_members: ALL_T | Sequence[str] | None,
290+
opt_special_members: ALL_T | Sequence[str] | None,
284291
ignore_module_all: bool,
285292
attr_docs: dict[tuple[str, str], list[str]],
286293
) -> list[ObjectMember]:
@@ -315,7 +322,16 @@ def _get_members_to_document(
315322
else:
316323
# specific members given
317324
assert opt_members is not ALL
318-
wanted_members = frozenset(opt_members)
325+
326+
# Merge :private-members: and :special-members: into :members:
327+
combined_members = set(opt_members)
328+
if opt_private_members is not None and opt_private_members is not ALL:
329+
combined_members.update(opt_private_members)
330+
if opt_special_members is not None and opt_special_members is not ALL:
331+
combined_members.update(opt_special_members)
332+
if class_signature == 'separated' and props.obj_type in {'class', 'exception'}:
333+
combined_members |= {'__new__', '__init__'} # show __init__() method
334+
wanted_members = frozenset(combined_members)
319335

320336
object_members_map: dict[str, ObjectMember] = {}
321337
if props.obj_type == 'module':
@@ -489,6 +505,7 @@ def _filter_members(
489505
get_attr: _AttrGetter,
490506
options: _AutoDocumenterOptions,
491507
props: _ModuleProperties | _ClassDefProperties,
508+
class_signature: Literal['mixed', 'separated'],
492509
inherit_docstrings: bool,
493510
inherited_members: Set[str],
494511
exclude_members: EMPTY_T | Set[str] | None,
@@ -513,6 +530,7 @@ def _filter_members(
513530
member_cls=obj.class_,
514531
get_attr=get_attr,
515532
has_attr_doc=has_attr_doc,
533+
class_signature=class_signature,
516534
inherit_docstrings=inherit_docstrings,
517535
inherited_members=inherited_members,
518536
parent=props._obj,
@@ -793,6 +811,7 @@ def _should_keep_member(
793811
member_cls: Any,
794812
get_attr: _AttrGetter,
795813
has_attr_doc: bool,
814+
class_signature: Literal['mixed', 'separated'],
796815
inherit_docstrings: bool,
797816
inherited_members: Set[str],
798817
parent: Any,
@@ -862,12 +881,16 @@ def _should_keep_member(
862881

863882
if special_member_re.match(member_name):
864883
# special __methods__
884+
if member_name == '__doc__' or is_filtered_inherited_member:
885+
return False
865886
if special_members and member_name in special_members:
866-
if member_name == '__doc__': # NoQA: SIM114
867-
return False
868-
elif is_filtered_inherited_member:
869-
return False
870887
return has_doc
888+
if (
889+
class_signature == 'separated'
890+
and member_name in {'__new__', '__init__'}
891+
and inspect.isclass(parent)
892+
):
893+
return has_doc # show __init__() method
871894
return False
872895

873896
if is_private:

0 commit comments

Comments
 (0)