mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #9866: autodoc: doccoment for the imported class was ignored
Autodoc tried to scan doccomment on the module where the class defined. But it failed to get it if the class is imported from other module. This analyzes the target module to obtain the doccomment.
This commit is contained in:
parent
647314133d
commit
fb92547b91
1
CHANGES
1
CHANGES
@ -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
|
||||
|
@ -1743,14 +1743,22 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
|
||||
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='')
|
||||
|
@ -37,3 +37,6 @@ Alias = Foo
|
||||
|
||||
#: docstring
|
||||
OtherAlias = Bar
|
||||
|
||||
#: docstring
|
||||
IntAlias = int
|
||||
|
@ -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) == [
|
||||
|
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user