mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix autoclass signature parsing
This fixes: * Signatures defined by __new__ * Signatures defined by metaclasses * Signatures defined by builtin base classes All of these changes bring the sphinx docs inline with the behavior of `inspect.signature`. Note that this changes autodoc to output `.. py:class: MyClass()` with parentheses even if no user-defined __init__ is present. This is quite deliberate, as if no user-defined `__init__` is present the default is `object.__init__`, which indeed does not take arguments.
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
"""
|
||||
|
||||
import platform
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -27,7 +28,7 @@ def test_autoclass_content_class(app):
|
||||
'.. py:module:: target.autoclass_content',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: A',
|
||||
'.. py:class:: A()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, no __new__',
|
||||
@@ -45,13 +46,13 @@ def test_autoclass_content_class(app):
|
||||
' A class having __init__, no __new__',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: D',
|
||||
'.. py:class:: D()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, __new__(no docstring)',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: E',
|
||||
'.. py:class:: E()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, __new__',
|
||||
@@ -87,7 +88,7 @@ def test_autoclass_content_init(app):
|
||||
'.. py:module:: target.autoclass_content',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: A',
|
||||
'.. py:class:: A()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, no __new__',
|
||||
@@ -105,13 +106,13 @@ def test_autoclass_content_init(app):
|
||||
' __init__ docstring',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: D',
|
||||
'.. py:class:: D()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, __new__(no docstring)',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: E',
|
||||
'.. py:class:: E()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' __new__ docstring',
|
||||
@@ -147,7 +148,7 @@ def test_autoclass_content_both(app):
|
||||
'.. py:module:: target.autoclass_content',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: A',
|
||||
'.. py:class:: A()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, no __new__',
|
||||
@@ -167,13 +168,13 @@ def test_autoclass_content_both(app):
|
||||
' __init__ docstring',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: D',
|
||||
'.. py:class:: D()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, __new__(no docstring)',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: E',
|
||||
'.. py:class:: E()',
|
||||
' :module: target.autoclass_content',
|
||||
'',
|
||||
' A class having no __init__, __new__',
|
||||
@@ -237,7 +238,7 @@ def test_autodoc_docstring_signature(app):
|
||||
actual = do_autodoc(app, 'class', 'target.DocstringSig', options)
|
||||
assert list(actual) == [
|
||||
'',
|
||||
'.. py:class:: DocstringSig',
|
||||
'.. py:class:: DocstringSig()',
|
||||
' :module: target',
|
||||
'',
|
||||
'',
|
||||
@@ -279,7 +280,7 @@ def test_autodoc_docstring_signature(app):
|
||||
actual = do_autodoc(app, 'class', 'target.DocstringSig', options)
|
||||
assert list(actual) == [
|
||||
'',
|
||||
'.. py:class:: DocstringSig',
|
||||
'.. py:class:: DocstringSig()',
|
||||
' :module: target',
|
||||
'',
|
||||
'',
|
||||
@@ -435,7 +436,7 @@ def test_mocked_module_imports(app, warning):
|
||||
'.. py:module:: target.need_mocks',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: TestAutodoc',
|
||||
'.. py:class:: TestAutodoc()',
|
||||
' :module: target.need_mocks',
|
||||
'',
|
||||
' TestAutodoc docstring.',
|
||||
@@ -493,6 +494,18 @@ def test_autodoc_typehints_signature(app):
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: NewAnnotation(i: int)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: NewComment(i: int)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: SignatureFromMetaclass(a: int)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:function:: complex_func(arg1: str, arg2: List[int], arg3: Tuple[int, '
|
||||
'Union[str, Unknown]] = None, *args: str, **kwargs: str) -> None',
|
||||
' :module: target.typehints',
|
||||
@@ -547,6 +560,18 @@ def test_autodoc_typehints_none(app):
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: NewAnnotation(i)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: NewComment(i)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:class:: SignatureFromMetaclass(a)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
'',
|
||||
'.. py:function:: complex_func(arg1, arg2, arg3=None, *args, **kwargs)',
|
||||
' :module: target.typehints',
|
||||
'',
|
||||
|
Reference in New Issue
Block a user