diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pydoc.py | 18 | ||||
-rw-r--r-- | Lib/test/test_pydoc.py | 23 |
2 files changed, 38 insertions, 3 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 679a596821..9a22e56686 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 = '<a name="%s"><strong>%s</strong></a>' % (anchor, realname) else: @@ -979,8 +985,8 @@ class HTMLDoc(Doc): if not argspec: argspec = '(...)' - decl = title + self.escape(argspec) + (note and self.grey( - '<font face="helvetica, arial">%s</font>' % note)) + decl = asyncqualifier + title + self.escape(argspec) + (note and + self.grey('<font face="helvetica, arial">%s</font>' % note)) if skipdocs: return '<dl><dt>%s</dt></dl>\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 67c6c5d42d..6efdeb047c 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 <a name="-coro_function"><strong>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 <a name="-an_async_generator"><strong>an_async_generator', + html) class PydocServerTest(unittest.TestCase): """Tests for pydoc._start_server""" |