summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2020-11-20 07:28:21 (GMT)
committerGitHub <noreply@github.com>2020-11-20 07:28:21 (GMT)
commit4dd2112a1d26e03b605bed0f89e3678041ad1490 (patch)
tree7f599ae0ef174764be2dc3ce122be77c1e22afd8 /Lib/idlelib
parent1051ca4d974ebb6448f58b661aa28f8aff325ed3 (diff)
downloadcpython-4dd2112a1d26e03b605bed0f89e3678041ad1490.zip
cpython-4dd2112a1d26e03b605bed0f89e3678041ad1490.tar.gz
cpython-4dd2112a1d26e03b605bed0f89e3678041ad1490.tar.bz2
bpo-42416: Use inspect.getdoc for IDLE calltips (GH-23416)
Inspect.getdoc(ob) sometimes gets docstrings when ob.__doc__ is None. (cherry picked from commit 7ddbaa7a1b3e61847ee99658be6a7268a049e302) Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/NEWS.txt3
-rw-r--r--Lib/idlelib/calltip.py6
-rw-r--r--Lib/idlelib/idle_test/test_calltip.py9
3 files changed, 12 insertions, 6 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index a7f7481..6eacde9 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2020-12-07?
======================================
+bpo-42416: Get docstrings for IDLE calltips more often
+by using inspect.getdoc.
+
bpo-33987: Mostly finish using ttk widgets, mainly for editor,
settings, and searches. Some patches by Mark Roseman.
diff --git a/Lib/idlelib/calltip.py b/Lib/idlelib/calltip.py
index 549e224..40bc5a0 100644
--- a/Lib/idlelib/calltip.py
+++ b/Lib/idlelib/calltip.py
@@ -165,6 +165,7 @@ def get_argspec(ob):
ob_call = ob.__call__
except BaseException: # Buggy user object could raise anything.
return '' # No popup for non-callables.
+ # For Get_argspecTest.test_buggy_getattr_class, CallA() & CallB().
fob = ob_call if isinstance(ob_call, types.MethodType) else ob
# Initialize argspec and wrap it to get lines.
@@ -185,10 +186,7 @@ def get_argspec(ob):
if len(argspec) > _MAX_COLS else [argspec] if argspec else [])
# Augment lines from docstring, if any, and join to get argspec.
- if isinstance(ob_call, types.MethodType):
- doc = ob_call.__doc__
- else:
- doc = getattr(ob, "__doc__", "")
+ doc = inspect.getdoc(ob)
if doc:
for line in doc.split('\n', _MAX_LINES)[:_MAX_LINES]:
line = line.strip()
diff --git a/Lib/idlelib/idle_test/test_calltip.py b/Lib/idlelib/idle_test/test_calltip.py
index 489b689..a76829f 100644
--- a/Lib/idlelib/idle_test/test_calltip.py
+++ b/Lib/idlelib/idle_test/test_calltip.py
@@ -99,7 +99,12 @@ non-overlapping occurrences o...''')
(width=70, initial_indent='', subsequent_indent='', expand_tabs=True,
replace_whitespace=True, fix_sentence_endings=False, break_long_words=True,
drop_whitespace=True, break_on_hyphens=True, tabsize=8, *, max_lines=None,
- placeholder=' [...]')''')
+ placeholder=' [...]')
+Object for wrapping/filling text. The public interface consists of
+the wrap() and fill() methods; the other methods are just there for
+subclasses to override in order to tweak the default behaviour.
+If you want to completely replace the main wrapping algorithm,
+you\'ll probably have to override _wrap_chunks().''')
def test_properly_formated(self):
@@ -241,7 +246,7 @@ bytes() -> empty bytes object''')
__class__ = property({}.__getitem__, {}.__setitem__)
class Object(metaclass=Type):
__slots__ = '__class__'
- for meth, mtip in ((Type, default_tip), (Object, default_tip),
+ for meth, mtip in ((Type, get_spec(type)), (Object, default_tip),
(Object(), '')):
with self.subTest(meth=meth, mtip=mtip):
self.assertEqual(get_spec(meth), mtip)