diff --git a/CHANGES b/CHANGES index 1f33b88a890..5900b031da5 100644 --- a/CHANGES +++ b/CHANGES @@ -21,6 +21,7 @@ Bugs fixed * #9630: autodoc: Failed to build cross references if :confval:`primary_domain` is not 'py' * #9644: autodoc: Crashed on getting source info from problematic object +* #9655: autodoc: mocked object having doc comment is warned unexpectedly * #9630: autosummary: Failed to build summary table if :confval:`primary_domain` is not 'py' diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index 581de182918..a255c069144 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -913,10 +913,6 @@ def generate(self, more_content: Optional[StringList] = None, real_modname: str if not self.import_object(): return - if ismock(self.object): - logger.warning(__('A mocked object is detected: %r'), - self.name, type='autodoc') - # If there is no real module defined, figure out which to use. # The real module is used in the module analyzer to look up the module # where the attribute documentation would actually be found in. @@ -949,6 +945,11 @@ def generate(self, more_content: Optional[StringList] = None, real_modname: str except PycodeError: pass + docstrings: List[str] = sum(self.get_doc() or [], []) + if ismock(self.object) and not docstrings: + logger.warning(__('A mocked object is detected: %r'), + self.name, type='autodoc') + # check __module__ of object (for members not given explicitly) if check_module: if not self.check_module():