From 59a766d7d69d072ee5cf90455f52ff0d169b4442 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 21 Aug 2018 20:05:17 +0900 Subject: [PATCH] Fix #5322: autodoc: ``Any`` typehint causes formatting error --- CHANGES | 2 ++ sphinx/util/inspect.py | 4 +++- tests/test_util_inspect.py | 6 +++++- tests/typing_test_data.py | 6 +++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 5f6bbaf8d..798187983 100644 --- a/CHANGES +++ b/CHANGES @@ -16,6 +16,8 @@ Features added Bugs fixed ---------- +* #5322: autodoc: ``Any`` typehint causes formatting error + Testing -------- diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index 3b5d48e2a..bab88eb88 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -531,8 +531,10 @@ class Signature(object): qualname = annotation.__qualname__ elif getattr(annotation, '__forward_arg__', None): qualname = annotation.__forward_arg__ - else: + elif getattr(annotation, '__origin__', None): qualname = self.format_annotation(annotation.__origin__) # ex. Union + else: + qualname = repr(annotation).replace('typing.', '') elif hasattr(annotation, '__qualname__'): qualname = '%s.%s' % (module, annotation.__qualname__) else: diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py index a48aedcf0..928a45621 100644 --- a/tests/test_util_inspect.py +++ b/tests/test_util_inspect.py @@ -232,7 +232,7 @@ def test_Signature_partialmethod(): reason='type annotation test is available on py34 or above') def test_Signature_annotations(): from typing_test_data import ( - f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, Node) + f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, Node) # Class annotations sig = inspect.Signature(f0).format_args() @@ -293,6 +293,10 @@ def test_Signature_annotations(): sig = inspect.Signature(f13).format_args() assert sig == '() -> Optional[str]' + # Any + sig = inspect.Signature(f14).format_args() + assert sig == '() -> Any' + # type hints by string sig = inspect.Signature(Node.children).format_args() assert sig == '(self) -> List[typing_test_data.Node]' diff --git a/tests/typing_test_data.py b/tests/typing_test_data.py index 5b161eac4..4dc2d06f5 100644 --- a/tests/typing_test_data.py +++ b/tests/typing_test_data.py @@ -1,5 +1,5 @@ from numbers import Integral -from typing import List, TypeVar, Union, Callable, Tuple, Optional +from typing import Any, List, TypeVar, Union, Callable, Tuple, Optional def f0(x: int, y: Integral) -> None: @@ -72,6 +72,10 @@ def f13() -> Optional[str]: pass +def f14() -> Any: + pass + + class Node: def __init__(self, parent: Optional['Node']) -> None: pass