Skip to content

Commit 50ec742

Browse files
committed
bpo-39990: try resolving type hints in pydoc
Signed-off-by: Filipe Laíns <[email protected]>
1 parent 966d579 commit 50ec742

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

Lib/pydoc.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -907,9 +907,12 @@ def spilldata(msg, attrs, predicate):
907907

908908
decl = ''
909909
try:
910-
signature = inspect.signature(object)
911-
except (ValueError, TypeError):
912-
signature = None
910+
signature = inspect.signature(object, resolve_type_hints=True)
911+
except (NameError, AttributeError, SyntaxError, TypeError, ValueError):
912+
try:
913+
signature = inspect.signature(object, resolve_type_hints=False)
914+
except (ValueError, TypeError):
915+
signature = None
913916
if signature:
914917
argspec = str(signature)
915918
if argspec and argspec != '()':
@@ -967,9 +970,12 @@ def docroutine(self, object, name=None, mod=None,
967970
argspec = None
968971
if inspect.isroutine(object):
969972
try:
970-
signature = inspect.signature(object)
971-
except (ValueError, TypeError):
972-
signature = None
973+
signature = inspect.signature(object, resolve_type_hints=True)
974+
except (NameError, AttributeError, SyntaxError, TypeError, ValueError):
975+
try:
976+
signature = inspect.signature(object, resolve_type_hints=False)
977+
except (ValueError, TypeError):
978+
signature = None
973979
if signature:
974980
argspec = str(signature)
975981
if realname == '<lambda>':
@@ -1226,9 +1232,12 @@ def makename(c, m=object.__module__):
12261232
push = contents.append
12271233

12281234
try:
1229-
signature = inspect.signature(object)
1230-
except (ValueError, TypeError):
1231-
signature = None
1235+
signature = inspect.signature(object, resolve_type_hints=True)
1236+
except (NameError, AttributeError, SyntaxError, TypeError, ValueError):
1237+
try:
1238+
signature = inspect.signature(object, resolve_type_hints=False)
1239+
except (ValueError, TypeError):
1240+
signature = None
12321241
if signature:
12331242
argspec = str(signature)
12341243
if argspec and argspec != '()':
@@ -1397,9 +1406,12 @@ def docroutine(self, object, name=None, mod=None, cl=None):
13971406

13981407
if inspect.isroutine(object):
13991408
try:
1400-
signature = inspect.signature(object)
1401-
except (ValueError, TypeError):
1402-
signature = None
1409+
signature = inspect.signature(object, resolve_type_hints=True)
1410+
except (NameError, AttributeError, SyntaxError, TypeError, ValueError):
1411+
try:
1412+
signature = inspect.signature(object, resolve_type_hints=False)
1413+
except (ValueError, TypeError):
1414+
signature = None
14031415
if signature:
14041416
argspec = str(signature)
14051417
if realname == '<lambda>':

0 commit comments

Comments
 (0)