Skip to content

Commit

Permalink
Fix sphinx-doc#8164: autodoc: Classes that inherit mocked class are n…
Browse files Browse the repository at this point in the history
…ot documented
  • Loading branch information
tk0miya committed Dec 28, 2020
1 parent df8eea8 commit 006e0e3
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -18,6 +18,7 @@ Features added
* #8022: autodoc: autodata and autoattribute directives does not show right-hand
value of the variable if docstring contains ``:meta hide-value:`` in
info-field-list
* #8164: autodoc: Classes that inherit mocked class are not documented
* #8132: Add :confval:`project_copyright` as an alias of :confval:`copyright`

Bugs fixed
Expand Down
4 changes: 2 additions & 2 deletions sphinx/ext/autodoc/__init__.py
Expand Up @@ -27,7 +27,7 @@
from sphinx.environment import BuildEnvironment
from sphinx.ext.autodoc.importer import (ClassAttribute, get_class_members, get_object_members,
import_module, import_object)
from sphinx.ext.autodoc.mock import mock
from sphinx.ext.autodoc.mock import ismock, mock
from sphinx.locale import _, __
from sphinx.pycode import ModuleAnalyzer, PycodeError
from sphinx.util import inspect, logging
Expand Down Expand Up @@ -739,7 +739,7 @@ def is_filtered_inherited_member(name: str, obj: Any) -> bool:
isprivate = membername.startswith('_')

keep = False
if safe_getattr(member, '__sphinx_mock__', None) is not None:
if ismock(member):
# mocked module or object
pass
elif self.options.exclude_members and membername in self.options.exclude_members:
Expand Down
5 changes: 5 additions & 0 deletions tests/roots/test-ext-autodoc/target/need_mocks.py
Expand Up @@ -28,4 +28,9 @@ def decoratedMethod(self):
return None


class Inherited(missing_module.Class):
"""docstring"""
pass


sphinx.missing_module4.missing_function(len(missing_name2))
12 changes: 12 additions & 0 deletions tests/test_ext_autodoc_automodule.py
Expand Up @@ -25,3 +25,15 @@ def test_empty_all(app):
'docsting of empty_all module.',
'',
]


@pytest.mark.sphinx('html', testroot='ext-autodoc',
confoverrides={'autodoc_mock_imports': ['missing_module',
'missing_package1',
'missing_package2',
'missing_package3',
'sphinx.missing_module4']})
def test_subclass_of_mocked_object(app):
options = {'members': True}
actual = do_autodoc(app, 'module', 'target.need_mocks', options)
assert '.. py:class:: Inherited(*args: Any, **kwargs: Any)' in actual

0 comments on commit 006e0e3

Please sign in to comment.