mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Do not emit type arguments twice
Fixes gh-7567
This commit is contained in:
parent
21ca43719a
commit
46372726de
@ -75,8 +75,13 @@ def _stringify_py37(annotation: Any) -> str:
|
||||
qualname = stringify(annotation.__origin__) # ex. Union
|
||||
elif hasattr(annotation, '__qualname__'):
|
||||
qualname = '%s.%s' % (module, annotation.__qualname__)
|
||||
elif hasattr(annotation, '__origin__'):
|
||||
# instantiated generic provided by a user
|
||||
qualname = stringify(annotation.__origin__)
|
||||
else:
|
||||
qualname = repr(annotation)
|
||||
# we weren't able to extract the base type, appending arguments would
|
||||
# only make them appear twice
|
||||
return repr(annotation)
|
||||
|
||||
if getattr(annotation, '__args__', None):
|
||||
if qualname == 'Union':
|
||||
@ -91,7 +96,7 @@ def _stringify_py37(annotation: Any) -> str:
|
||||
return '%s[[%s], %s]' % (qualname, args, returns)
|
||||
elif str(annotation).startswith('typing.Annotated'): # for py39+
|
||||
return stringify(annotation.__args__[0])
|
||||
elif annotation._special:
|
||||
elif getattr(annotation, '_special', False):
|
||||
return qualname
|
||||
else:
|
||||
args = ', '.join(stringify(a) for a in annotation.__args__)
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
import sys
|
||||
from numbers import Integral
|
||||
from typing import Any, Dict, List, TypeVar, Union, Callable, Tuple, Optional
|
||||
from typing import Any, Dict, List, TypeVar, Union, Callable, Tuple, Optional, Generic
|
||||
|
||||
import pytest
|
||||
|
||||
@ -24,6 +24,11 @@ class MyClass1:
|
||||
class MyClass2(MyClass1):
|
||||
__qualname__ = '<MyClass2>'
|
||||
|
||||
T = TypeVar('T')
|
||||
|
||||
class MyList(List[T]):
|
||||
pass
|
||||
|
||||
|
||||
def test_stringify():
|
||||
assert stringify(int) == "int"
|
||||
@ -42,6 +47,7 @@ def test_stringify_type_hints_containers():
|
||||
assert stringify(Tuple[str, str, str]) == "Tuple[str, str, str]"
|
||||
assert stringify(Tuple[str, ...]) == "Tuple[str, ...]"
|
||||
assert stringify(List[Dict[str, Tuple]]) == "List[Dict[str, Tuple]]"
|
||||
assert stringify(MyList[Tuple[int, int]]) == "test_util_typing.MyList[Tuple[int, int]]"
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.version_info < (3, 9), reason='python 3.9+ is required.')
|
||||
|
Loading…
Reference in New Issue
Block a user