summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xLib/pydoc.py6
-rw-r--r--Lib/test/test_pydoc/test_pydoc.py24
-rw-r--r--Misc/NEWS.d/next/Library/2023-08-02-01-17-32.gh-issue-107155.Mj1K9L.rst3
3 files changed, 31 insertions, 2 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 6d145ab..9bb64fe 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1144,7 +1144,8 @@ 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.
- argspec = argspec[1:-1] # remove parentheses
+ 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
diff --git a/Lib/test/test_pydoc/test_pydoc.py b/Lib/test/test_pydoc/test_pydoc.py
index 0dd24e6..d7a333a 100644
--- a/Lib/test/test_pydoc/test_pydoc.py
+++ b/Lib/test/test_pydoc/test_pydoc.py
@@ -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:
diff --git a/Misc/NEWS.d/next/Library/2023-08-02-01-17-32.gh-issue-107155.Mj1K9L.rst b/Misc/NEWS.d/next/Library/2023-08-02-01-17-32.gh-issue-107155.Mj1K9L.rst
new file mode 100644
index 0000000..8362dc0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-08-02-01-17-32.gh-issue-107155.Mj1K9L.rst
@@ -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.