]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42416: Use inspect.getdoc for IDLE calltips (GH-23416)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 20 Nov 2020 07:22:29 +0000 (23:22 -0800)
committerGitHub <noreply@github.com>
Fri, 20 Nov 2020 07:22:29 +0000 (23:22 -0800)
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>
Lib/idlelib/NEWS.txt
Lib/idlelib/calltip.py
Lib/idlelib/idle_test/test_calltip.py
Misc/NEWS.d/next/IDLE/2020-11-20-01-30-27.bpo-42415.CyD-va.rst [new file with mode: 0644]

index 9d28a39a37c5bc699722616445ba2fb7cf516d31..e4d5422072756826544a76aa3d4acb81fe0d17a1 100644 (file)
@@ -3,6 +3,9 @@ Released on 2020-12-??
 ======================================
 
 
+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.
 
index 549e224015cccb9cf51aa4ec875583a773bd368c..40bc5a0ad798fe3eeef6ff38f79f74747b45a21f 100644 (file)
@@ -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()
index 489b6899baf424047a50c9f3bd4c0467422b1257..a76829f3656c80a285d574b83864954107d26064 100644 (file)
@@ -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)
diff --git a/Misc/NEWS.d/next/IDLE/2020-11-20-01-30-27.bpo-42415.CyD-va.rst b/Misc/NEWS.d/next/IDLE/2020-11-20-01-30-27.bpo-42415.CyD-va.rst
new file mode 100644 (file)
index 0000000..b61032c
--- /dev/null
@@ -0,0 +1 @@
+Get docstrings for IDLE calltips more often by using inspect.getdoc.