From: Rémi Lapeyre Date: Tue, 30 Jun 2020 13:48:15 +0000 (+0200) Subject: bpo-39314: Closes parenthesis when autocompleting for functions that take no argument... X-Git-Tag: v3.10.0a1~469 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd4a3f21454a6012f4353e2255837561fc9f0e6a;p=thirdparty%2FPython%2Fcpython.git bpo-39314: Closes parenthesis when autocompleting for functions that take no arguments (GH-20562) --- diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py index bca4a7bc5218..c06388e8d9c2 100644 --- a/Lib/rlcompleter.py +++ b/Lib/rlcompleter.py @@ -31,6 +31,7 @@ Notes: import atexit import builtins +import inspect import __main__ __all__ = ["Completer"] @@ -96,7 +97,13 @@ class Completer: def _callable_postfix(self, val, word): if callable(val): - word = word + "(" + word += "(" + try: + if not inspect.signature(val).parameters: + word += ")" + except ValueError: + pass + return word def global_matches(self, text): diff --git a/Lib/test/test_rlcompleter.py b/Lib/test/test_rlcompleter.py index 0dc1080ca320..ee3019d8782d 100644 --- a/Lib/test/test_rlcompleter.py +++ b/Lib/test/test_rlcompleter.py @@ -40,12 +40,12 @@ class TestRlcompleter(unittest.TestCase): # test with a customized namespace self.assertEqual(self.completer.global_matches('CompleteM'), - ['CompleteMe(']) + ['CompleteMe()']) self.assertEqual(self.completer.global_matches('eg'), ['egg(']) # XXX: see issue5256 self.assertEqual(self.completer.global_matches('CompleteM'), - ['CompleteMe(']) + ['CompleteMe()']) def test_attr_matches(self): # test with builtins namespace @@ -64,7 +64,7 @@ class TestRlcompleter(unittest.TestCase): ['CompleteMe.spam']) self.assertEqual(self.completer.attr_matches('Completeme.egg'), []) self.assertEqual(self.completer.attr_matches('CompleteMe.'), - ['CompleteMe.mro(', 'CompleteMe.spam']) + ['CompleteMe.mro()', 'CompleteMe.spam']) self.assertEqual(self.completer.attr_matches('CompleteMe._'), ['CompleteMe._ham']) matches = self.completer.attr_matches('CompleteMe.__') @@ -134,7 +134,7 @@ class TestRlcompleter(unittest.TestCase): # No opening bracket "(" because we overrode the built-in class self.assertEqual(completer.complete('memoryview', 0), 'memoryview') self.assertIsNone(completer.complete('memoryview', 1)) - self.assertEqual(completer.complete('Ellipsis', 0), 'Ellipsis(') + self.assertEqual(completer.complete('Ellipsis', 0), 'Ellipsis()') self.assertIsNone(completer.complete('Ellipsis', 1)) if __name__ == '__main__': diff --git a/Misc/NEWS.d/next/Library/2020-06-01-02-16-29.bpo-39314.0T9hlA.rst b/Misc/NEWS.d/next/Library/2020-06-01-02-16-29.bpo-39314.0T9hlA.rst new file mode 100644 index 000000000000..e805332efb62 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-01-02-16-29.bpo-39314.0T9hlA.rst @@ -0,0 +1,3 @@ +:class:`rlcompleter.Completer` and the standard Python shell now close the +parenthesis for functions that take no arguments. Patch contributed by Rémi +Lapeyre.