mirror of https://github.com/python/cpython.git
[3.11] gh-107155: Fix help() for lambda function with return annotation (GH-115613)
(cherry picked from commit b9a9e3dd62
)
This commit is contained in:
parent
a23aecc737
commit
ee3d8dcb00
|
@ -1128,7 +1128,8 @@ def docroutine(self, object, name=None, mod=None,
|
|||
# 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] # remove parentheses
|
||||
if not argspec:
|
||||
argspec = '(...)'
|
||||
|
||||
|
@ -1581,7 +1582,8 @@ def docroutine(self, object, name=None, mod=None, cl=None, homecls=None):
|
|||
# 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] # remove parentheses
|
||||
if not argspec:
|
||||
argspec = '(...)'
|
||||
decl = asyncqualifier + title + argspec + note
|
||||
|
|
|
@ -691,6 +691,30 @@ def test_help_output_redirect(self):
|
|||
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…
Reference in New Issue