diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 679a596821f..9a22e56686f 100644 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -951,6 +951,12 @@ class HTMLDoc(Doc): else: note = ' unbound %s method' % self.classlink(imclass,mod) + if (inspect.iscoroutinefunction(object) or + inspect.isasyncgenfunction(object)): + asyncqualifier = 'async ' + else: + asyncqualifier = '' + if name == realname: title = '%s' % (anchor, realname) else: @@ -979,8 +985,8 @@ class HTMLDoc(Doc): if not argspec: argspec = '(...)' - decl = title + self.escape(argspec) + (note and self.grey( - '%s' % note)) + decl = asyncqualifier + title + self.escape(argspec) + (note and + self.grey('%s' % note)) if skipdocs: return '
%s
\n' % decl @@ -1382,6 +1388,12 @@ location listed above. else: note = ' unbound %s method' % classname(imclass,mod) + if (inspect.iscoroutinefunction(object) or + inspect.isasyncgenfunction(object)): + asyncqualifier = 'async ' + else: + asyncqualifier = '' + if name == realname: title = self.bold(realname) else: @@ -1405,7 +1417,7 @@ location listed above. argspec = argspec[1:-1] # remove parentheses if not argspec: argspec = '(...)' - decl = title + argspec + note + decl = asyncqualifier + title + argspec + note if skipdocs: return decl + '\n' diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 67c6c5d42d4..6efdeb047c2 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -1288,6 +1288,29 @@ foo Custom descriptor """) + def test_async_annotation(self): + async def coro_function(ign) -> int: + return 1 + + text = pydoc.plain(pydoc.plaintext.document(coro_function)) + self.assertIn('async coro_function', text) + + html = pydoc.HTMLDoc().document(coro_function) + self.assertIn( + 'async coro_function', + html) + + def test_async_generator_annotation(self): + async def an_async_generator(): + yield 1 + + text = pydoc.plain(pydoc.plaintext.document(an_async_generator)) + self.assertIn('async an_async_generator', text) + + html = pydoc.HTMLDoc().document(an_async_generator) + self.assertIn( + 'async an_async_generator', + html) class PydocServerTest(unittest.TestCase): """Tests for pydoc._start_server""" diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-02-24-12-44-46.bpo-36045.RO20OV.rst b/Misc/NEWS.d/next/Core and Builtins/2019-02-24-12-44-46.bpo-36045.RO20OV.rst new file mode 100644 index 00000000000..7cab3ea8409 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-02-24-12-44-46.bpo-36045.RO20OV.rst @@ -0,0 +1 @@ +builtins.help() now prefixes `async` for async functions