Skip to content

Commit

Permalink
Merge pull request #10320 from tk0miya/10280_return_typehints_in_docs…
Browse files Browse the repository at this point in the history
…trings

Fix #10280: autodoc_docstring_signature generates needless return typehint
  • Loading branch information
tk0miya committed Apr 3, 2022
2 parents 3361020 + a78c07c commit 4689ec6
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 10 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Expand Up @@ -67,6 +67,8 @@ Bugs fixed

* #10279: autodoc: Default values for keyword only arguments in overloaded
functions are rendered as a string literal
* #10280: autodoc: :confval:`autodoc_docstring_signature` unexpectedly generates
return value typehint for constructors if docstring has multiple signatures
* #10214: html: invalid language tag was generated if :confval:`language`
contains a country code (ex. zh_CN)
* #10236: html search: objects are duplicated in search result
Expand Down
14 changes: 14 additions & 0 deletions sphinx/ext/autodoc/__init__.py
Expand Up @@ -1580,6 +1580,20 @@ def format_args(self, **kwargs: Any) -> str:

return stringify_signature(sig, show_return_annotation=False, **kwargs)

def _find_signature(self) -> Tuple[str, str]:
result = super()._find_signature()
if result is not None:
# Strip a return value from signature of constructor in docstring (first entry)
result = (result[0], None)

for i, sig in enumerate(self._signatures):
if sig.endswith(' -> None'):
# Strip a return value from signatures of constructor in docstring (subsequent
# entries)
self._signatures[i] = sig[:-8]

return result

def format_signature(self, **kwargs: Any) -> str:
if self.doc_as_attr:
return ''
Expand Down
6 changes: 4 additions & 2 deletions tests/roots/test-ext-autodoc/target/docstring_signature.py
Expand Up @@ -22,10 +22,12 @@ def __init__(self):
class E:
def __init__(self):
"""E(foo: int, bar: int, baz: int) -> None \\
E(foo: str, bar: str, baz: str) -> None"""
E(foo: str, bar: str, baz: str) -> None \\
E(foo: float, bar: float, baz: float)"""


class F:
def __init__(self):
"""F(foo: int, bar: int, baz: int) -> None
F(foo: str, bar: str, baz: str) -> None"""
F(foo: str, bar: str, baz: str) -> None
F(foo: float, bar: float, baz: float)"""
20 changes: 12 additions & 8 deletions tests/test_ext_autodoc_configs.py
Expand Up @@ -467,13 +467,15 @@ def test_autoclass_content_and_docstring_signature_init(app):
' :module: target.docstring_signature',
'',
'',
'.. py:class:: E(foo: int, bar: int, baz: int) -> None',
' E(foo: str, bar: str, baz: str) -> None',
'.. py:class:: E(foo: int, bar: int, baz: int)',
' E(foo: str, bar: str, baz: str)',
' E(foo: float, bar: float, baz: float)',
' :module: target.docstring_signature',
'',
'',
'.. py:class:: F(foo: int, bar: int, baz: int) -> None',
' F(foo: str, bar: str, baz: str) -> None',
'.. py:class:: F(foo: int, bar: int, baz: int)',
' F(foo: str, bar: str, baz: str)',
' F(foo: float, bar: float, baz: float)',
' :module: target.docstring_signature',
'',
]
Expand Down Expand Up @@ -510,13 +512,15 @@ def test_autoclass_content_and_docstring_signature_both(app):
' :module: target.docstring_signature',
'',
'',
'.. py:class:: E(foo: int, bar: int, baz: int) -> None',
' E(foo: str, bar: str, baz: str) -> None',
'.. py:class:: E(foo: int, bar: int, baz: int)',
' E(foo: str, bar: str, baz: str)',
' E(foo: float, bar: float, baz: float)',
' :module: target.docstring_signature',
'',
'',
'.. py:class:: F(foo: int, bar: int, baz: int) -> None',
' F(foo: str, bar: str, baz: str) -> None',
'.. py:class:: F(foo: int, bar: int, baz: int)',
' F(foo: str, bar: str, baz: str)',
' F(foo: float, bar: float, baz: float)',
' :module: target.docstring_signature',
'',
]
Expand Down

0 comments on commit 4689ec6

Please sign in to comment.