Merge pull request #9180 from tk0miya/9175_special_member_for_module

Fix #9175: autodoc: Special member is not documented in the module
This commit is contained in:
Takeshi KOMIYA 2021-05-10 01:49:36 +09:00 committed by GitHub
commit 98c756b33f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 106 additions and 1 deletions

View File

@ -23,6 +23,7 @@ Features added
* #8588: autodoc: :confval:`autodoc_type_aliases` now supports dotted name. It
allows you to define an alias for a class with module name like
``foo.bar.BazClass``
* #9175: autodoc: Special member is not documented in the module
* #3257: autosummary: Support instance attributes for classes
* #9129: html search: Show search summaries when html_copy_source = False
* #9120: html theme: Eliminate prompt characters of code-block from copyable

View File

@ -709,6 +709,8 @@ class Documenter:
# if isattr is True, the member is documented as an attribute
if member is INSTANCEATTR:
isattr = True
elif (namespace, membername) in attr_docs:
isattr = True
else:
isattr = False
@ -769,7 +771,6 @@ class Documenter:
else:
# keep documented attributes
keep = True
isattr = True
elif want_all and isprivate:
if has_doc or self.options.undoc_members:
if self.options.private_members is None:

View File

@ -0,0 +1,14 @@
undocumented = 1
#: docstring
documented = 1
undoc_annotated: int
#: docstring
annotated: int
__special__ = 1
#: docstring
__documented_special__ = 1

View File

@ -29,6 +29,95 @@ def test_empty_all(app):
]
@pytest.mark.sphinx('html', testroot='ext-autodoc')
def test_automodule(app):
options = {'members': None}
actual = do_autodoc(app, 'module', 'target.module', options)
assert list(actual) == [
'',
'.. py:module:: target.module',
'',
'',
'.. py:data:: annotated',
' :module: target.module',
' :type: int',
'',
' docstring',
'',
'',
'.. py:data:: documented',
' :module: target.module',
' :value: 1',
'',
' docstring',
'',
]
@pytest.mark.sphinx('html', testroot='ext-autodoc')
def test_automodule_undoc_members(app):
options = {'members': None,
'undoc-members': None}
actual = do_autodoc(app, 'module', 'target.module', options)
assert list(actual) == [
'',
'.. py:module:: target.module',
'',
'',
'.. py:data:: annotated',
' :module: target.module',
' :type: int',
'',
' docstring',
'',
'',
'.. py:data:: documented',
' :module: target.module',
' :value: 1',
'',
' docstring',
'',
'',
'.. py:data:: undoc_annotated',
' :module: target.module',
' :type: int',
'',
]
@pytest.mark.sphinx('html', testroot='ext-autodoc')
def test_automodule_special_members(app):
options = {'members': None,
'special-members': None}
actual = do_autodoc(app, 'module', 'target.module', options)
assert list(actual) == [
'',
'.. py:module:: target.module',
'',
'',
'.. py:data:: __documented_special__',
' :module: target.module',
' :value: 1',
'',
' docstring',
'',
'',
'.. py:data:: annotated',
' :module: target.module',
' :type: int',
'',
' docstring',
'',
'',
'.. py:data:: documented',
' :module: target.module',
' :value: 1',
'',
' docstring',
'',
]
@pytest.mark.sphinx('html', testroot='ext-autodoc',
confoverrides={'autodoc_mock_imports': ['missing_module',
'missing_package1',