mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
gh-107155: Fix help() for lambda function with return annotation (GH-107401)
This commit is contained in:
parent
664965a1c1
commit
b9a9e3dd62
3 changed files with 31 additions and 2 deletions
|
@ -1144,6 +1144,7 @@ class HTMLDoc(Doc):
|
|||
# XXX lambda's won't usually have func_annotations['return']
|
||||
# since the syntax doesn't support but it is possible.
|
||||
# So removing parentheses isn't truly safe.
|
||||
if not object.__annotations__:
|
||||
argspec = argspec[1:-1] # remove parentheses
|
||||
if not argspec:
|
||||
argspec = '(...)'
|
||||
|
@ -1586,7 +1587,8 @@ location listed above.
|
|||
# XXX lambda's won't usually have func_annotations['return']
|
||||
# since the syntax doesn't support but it is possible.
|
||||
# So removing parentheses isn't truly safe.
|
||||
argspec = argspec[1:-1] # remove parentheses
|
||||
if not object.__annotations__:
|
||||
argspec = argspec[1:-1]
|
||||
if not argspec:
|
||||
argspec = '(...)'
|
||||
decl = asyncqualifier + title + argspec + note
|
||||
|
|
|
@ -693,6 +693,30 @@ class PydocDocTest(unittest.TestCase):
|
|||
finally:
|
||||
pydoc.getpager = getpager_old
|
||||
|
||||
def test_lambda_with_return_annotation(self):
|
||||
func = lambda a, b, c: 1
|
||||
func.__annotations__ = {"return": int}
|
||||
with captured_output('stdout') as help_io:
|
||||
pydoc.help(func)
|
||||
helptext = help_io.getvalue()
|
||||
self.assertIn("lambda (a, b, c) -> int", helptext)
|
||||
|
||||
def test_lambda_without_return_annotation(self):
|
||||
func = lambda a, b, c: 1
|
||||
func.__annotations__ = {"a": int, "b": int, "c": int}
|
||||
with captured_output('stdout') as help_io:
|
||||
pydoc.help(func)
|
||||
helptext = help_io.getvalue()
|
||||
self.assertIn("lambda (a: int, b: int, c: int)", helptext)
|
||||
|
||||
def test_lambda_with_return_and_params_annotation(self):
|
||||
func = lambda a, b, c: 1
|
||||
func.__annotations__ = {"a": int, "b": int, "c": int, "return": int}
|
||||
with captured_output('stdout') as help_io:
|
||||
pydoc.help(func)
|
||||
helptext = help_io.getvalue()
|
||||
self.assertIn("lambda (a: int, b: int, c: int) -> int", helptext)
|
||||
|
||||
def test_namedtuple_fields(self):
|
||||
Person = namedtuple('Person', ['nickname', 'firstname'])
|
||||
with captured_stdout() as help_io:
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Fix incorrect output of ``help(x)`` where ``x`` is a :keyword:`lambda`
|
||||
function, which has an ``__annotations__`` dictionary attribute with a
|
||||
``"return"`` key.
|
Loading…
Add table
Add a link
Reference in a new issue