Skip to content

Commit

Permalink
Merge pull request #9876 from tk0miya/9866_doccoment_for_imported_cla…
Browse files Browse the repository at this point in the history
…sses

Fix #9866: autodoc: doccoment for the imported class was ignored
  • Loading branch information
tk0miya committed Nov 22, 2021
2 parents a63fb55 + fb92547 commit 054276c
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -19,6 +19,7 @@ Features added
Bugs fixed
----------

* #9866: autodoc: doccoment for the imported class was ignored
* #9857: Generated RFC links use outdated base url

Testing
Expand Down
12 changes: 10 additions & 2 deletions sphinx/ext/autodoc/__init__.py
Expand Up @@ -1743,14 +1743,22 @@ def get_doc(self, ignore: int = None) -> Optional[List[List[str]]]:
def get_variable_comment(self) -> Optional[List[str]]:
try:
key = ('', '.'.join(self.objpath))
analyzer = ModuleAnalyzer.for_module(self.get_real_modname())
if self.doc_as_attr:
analyzer = ModuleAnalyzer.for_module(self.modname)
else:
analyzer = ModuleAnalyzer.for_module(self.get_real_modname())
analyzer.analyze()
return list(self.analyzer.attr_docs.get(key, []))
return list(analyzer.attr_docs.get(key, []))
except PycodeError:
return None

def add_content(self, more_content: Optional[StringList], no_docstring: bool = False
) -> None:
if self.doc_as_attr and self.modname != self.get_real_modname():
# override analyzer to obtain doccomment around its definition.
self.analyzer = ModuleAnalyzer.for_module(self.modname)
self.analyzer.analyze()

if self.doc_as_attr and not self.get_variable_comment():
try:
more_content = StringList([_('alias of %s') % restify(self.object)], source='')
Expand Down
3 changes: 3 additions & 0 deletions tests/roots/test-ext-autodoc/target/classes.py
Expand Up @@ -37,3 +37,6 @@ class Corge(Quux):

#: docstring
OtherAlias = Bar

#: docstring
IntAlias = int
5 changes: 4 additions & 1 deletion tests/test_ext_autodoc.py
Expand Up @@ -1870,12 +1870,15 @@ def test_autodoc_GenericAlias(app):
' .. py:attribute:: Class.T',
' :module: target.genericalias',
'',
' A list of int',
'',
' alias of :py:class:`~typing.List`\\ [:py:class:`int`]',
'',
'.. py:attribute:: T',
' :module: target.genericalias',
'',
' alias of :py:class:`~typing.List`\\ [:py:class:`int`]',
' A list of int',
'',
]
else:
assert list(actual) == [
Expand Down
12 changes: 12 additions & 0 deletions tests/test_ext_autodoc_autoclass.py
Expand Up @@ -407,6 +407,18 @@ def test_class_alias_having_doccomment(app):
]


def test_class_alias_for_imported_object_having_doccomment(app):
actual = do_autodoc(app, 'class', 'target.classes.IntAlias')
assert list(actual) == [
'',
'.. py:attribute:: IntAlias',
' :module: target.classes',
'',
' docstring',
'',
]


@pytest.mark.sphinx('html', testroot='ext-autodoc')
def test_coroutine(app):
options = {"members": None}
Expand Down

0 comments on commit 054276c

Please sign in to comment.