autodoc: Add Optional[t] to annotation of function and method

As typing.get_type_hints() doing, this adds Optional[t] to type
annotations if a default value equal to None is set.

Note: this is default behavior of inspect.signature() since Python 3.10.
This commit is contained in:
Takeshi KOMIYA
2020-11-08 13:17:28 +09:00
parent e2c969c495
commit 6d1cafe7bd
4 changed files with 8 additions and 6 deletions

View File

@@ -490,7 +490,7 @@ def test_autodoc_typehints_signature(app):
'.. py:module:: target.typehints',
'',
'',
'.. py:class:: Math(s: str, o: Any = None)',
'.. py:class:: Math(s: str, o: Optional[Any] = None)',
' :module: target.typehints',
'',
'',

View File

@@ -162,7 +162,7 @@ def test_signature_annotations():
# Space around '=' for defaults
sig = inspect.signature(f7)
assert stringify_signature(sig) == '(x: int = None, y: dict = {}) -> None'
assert stringify_signature(sig) == '(x: Optional[int] = None, y: dict = {}) -> None'
# Callable types
sig = inspect.signature(f8)
@@ -226,7 +226,7 @@ def test_signature_annotations():
assert stringify_signature(sig) == '(self) -> List[typing_test_data.Node]'
sig = inspect.signature(Node.__init__)
assert stringify_signature(sig) == '(self, parent: Optional[Node]) -> None'
assert stringify_signature(sig) == '(self, parent: Optional[typing_test_data.Node]) -> None'
# show_annotation is False
sig = inspect.signature(f7)
@@ -234,7 +234,7 @@ def test_signature_annotations():
# show_return_annotation is False
sig = inspect.signature(f7)
assert stringify_signature(sig, show_return_annotation=False) == '(x: int = None, y: dict = {})'
assert stringify_signature(sig, show_return_annotation=False) == '(x: Optional[int] = None, y: dict = {})'
@pytest.mark.skipif(sys.version_info < (3, 8), reason='python 3.8+ is required.')