mirror of
https://github.com/python/cpython.git
synced 2025-01-09 10:04:54 +08:00
Issue #27989: Tweak inspect.formatannotation() to improve pydoc rendering of function annotations. Ivan L. (3.6->3.7)
This commit is contained in:
commit
f25bf43d16
@ -1140,6 +1140,8 @@ def getargvalues(frame):
|
|||||||
return ArgInfo(args, varargs, varkw, frame.f_locals)
|
return ArgInfo(args, varargs, varkw, frame.f_locals)
|
||||||
|
|
||||||
def formatannotation(annotation, base_module=None):
|
def formatannotation(annotation, base_module=None):
|
||||||
|
if getattr(annotation, '__module__', None) == 'typing':
|
||||||
|
return repr(annotation).replace('typing.', '')
|
||||||
if isinstance(annotation, type):
|
if isinstance(annotation, type):
|
||||||
if annotation.__module__ in ('builtins', base_module):
|
if annotation.__module__ in ('builtins', base_module):
|
||||||
return annotation.__qualname__
|
return annotation.__qualname__
|
||||||
|
@ -15,6 +15,7 @@ import string
|
|||||||
import test.support
|
import test.support
|
||||||
import time
|
import time
|
||||||
import types
|
import types
|
||||||
|
import typing
|
||||||
import unittest
|
import unittest
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import xml.etree
|
import xml.etree
|
||||||
@ -820,6 +821,18 @@ class TestDescriptions(unittest.TestCase):
|
|||||||
expected = 'C in module %s object' % __name__
|
expected = 'C in module %s object' % __name__
|
||||||
self.assertIn(expected, pydoc.render_doc(c))
|
self.assertIn(expected, pydoc.render_doc(c))
|
||||||
|
|
||||||
|
def test_typing_pydoc(self):
|
||||||
|
def foo(data: typing.List[typing.Any],
|
||||||
|
x: int) -> typing.Iterator[typing.Tuple[int, typing.Any]]:
|
||||||
|
...
|
||||||
|
T = typing.TypeVar('T')
|
||||||
|
class C(typing.Generic[T], typing.Mapping[int, str]): ...
|
||||||
|
self.assertEqual(pydoc.render_doc(foo).splitlines()[-1],
|
||||||
|
'f\x08fo\x08oo\x08o(data:List[Any], x:int)'
|
||||||
|
' -> Iterator[Tuple[int, Any]]')
|
||||||
|
self.assertEqual(pydoc.render_doc(C).splitlines()[2],
|
||||||
|
'class C\x08C(typing.Mapping)')
|
||||||
|
|
||||||
def test_builtin(self):
|
def test_builtin(self):
|
||||||
for name in ('str', 'str.translate', 'builtins.str',
|
for name in ('str', 'str.translate', 'builtins.str',
|
||||||
'builtins.str.translate'):
|
'builtins.str.translate'):
|
||||||
|
Loading…
Reference in New Issue
Block a user