mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
autodoc: blacklist typing.Generic.__new__
When documenting classes derived from typing.Generic (essentially all classes in the typing module) the constructor signature would show an unhelpful (*args, **kwds). typing.Generic has a __new__ method which was picked up by sphinx. With this patch it is skipped and constructor signatures for generic classes are shown as they should.
This commit is contained in:
parent
642686159f
commit
740be7f2a5
@ -1317,6 +1317,12 @@ _METACLASS_CALL_BLACKLIST = [
|
||||
]
|
||||
|
||||
|
||||
# Types whose __new__ signature is a pass-thru.
|
||||
_CLASS_NEW_BLACKLIST = [
|
||||
'typing.Generic.__new__',
|
||||
]
|
||||
|
||||
|
||||
class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type: ignore
|
||||
"""
|
||||
Specialized Documenter subclass for classes.
|
||||
@ -1385,6 +1391,11 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
|
||||
|
||||
# Now we check if the 'obj' class has a '__new__' method
|
||||
new = get_user_defined_function_or_method(self.object, '__new__')
|
||||
|
||||
if new is not None:
|
||||
if "{0.__module__}.{0.__qualname__}".format(new) in _CLASS_NEW_BLACKLIST:
|
||||
new = None
|
||||
|
||||
if new is not None:
|
||||
self.env.app.emit('autodoc-before-process-signature', new, True)
|
||||
try:
|
||||
|
@ -291,7 +291,6 @@ def test_format_signature(app):
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.version_info < (3, 5), reason='typing is available since python3.5.')
|
||||
@pytest.mark.xfail
|
||||
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
||||
def test_autodoc_process_signature_typing_generic(app):
|
||||
actual = do_autodoc(app, 'class', 'target.generic_class.A', {})
|
||||
|
Loading…
Reference in New Issue
Block a user