bpo-39314: Closes parenthesis when autocompleting for functions that take no arguments (GH-20562)
This commit is contained in:
parent
0c4f0f3b29
commit
bd4a3f2145
|
@ -31,6 +31,7 @@ Notes:
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
import builtins
|
import builtins
|
||||||
|
import inspect
|
||||||
import __main__
|
import __main__
|
||||||
|
|
||||||
__all__ = ["Completer"]
|
__all__ = ["Completer"]
|
||||||
|
@ -96,7 +97,13 @@ class Completer:
|
||||||
|
|
||||||
def _callable_postfix(self, val, word):
|
def _callable_postfix(self, val, word):
|
||||||
if callable(val):
|
if callable(val):
|
||||||
word = word + "("
|
word += "("
|
||||||
|
try:
|
||||||
|
if not inspect.signature(val).parameters:
|
||||||
|
word += ")"
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
return word
|
return word
|
||||||
|
|
||||||
def global_matches(self, text):
|
def global_matches(self, text):
|
||||||
|
|
|
@ -40,12 +40,12 @@ class TestRlcompleter(unittest.TestCase):
|
||||||
|
|
||||||
# test with a customized namespace
|
# test with a customized namespace
|
||||||
self.assertEqual(self.completer.global_matches('CompleteM'),
|
self.assertEqual(self.completer.global_matches('CompleteM'),
|
||||||
['CompleteMe('])
|
['CompleteMe()'])
|
||||||
self.assertEqual(self.completer.global_matches('eg'),
|
self.assertEqual(self.completer.global_matches('eg'),
|
||||||
['egg('])
|
['egg('])
|
||||||
# XXX: see issue5256
|
# XXX: see issue5256
|
||||||
self.assertEqual(self.completer.global_matches('CompleteM'),
|
self.assertEqual(self.completer.global_matches('CompleteM'),
|
||||||
['CompleteMe('])
|
['CompleteMe()'])
|
||||||
|
|
||||||
def test_attr_matches(self):
|
def test_attr_matches(self):
|
||||||
# test with builtins namespace
|
# test with builtins namespace
|
||||||
|
@ -64,7 +64,7 @@ class TestRlcompleter(unittest.TestCase):
|
||||||
['CompleteMe.spam'])
|
['CompleteMe.spam'])
|
||||||
self.assertEqual(self.completer.attr_matches('Completeme.egg'), [])
|
self.assertEqual(self.completer.attr_matches('Completeme.egg'), [])
|
||||||
self.assertEqual(self.completer.attr_matches('CompleteMe.'),
|
self.assertEqual(self.completer.attr_matches('CompleteMe.'),
|
||||||
['CompleteMe.mro(', 'CompleteMe.spam'])
|
['CompleteMe.mro()', 'CompleteMe.spam'])
|
||||||
self.assertEqual(self.completer.attr_matches('CompleteMe._'),
|
self.assertEqual(self.completer.attr_matches('CompleteMe._'),
|
||||||
['CompleteMe._ham'])
|
['CompleteMe._ham'])
|
||||||
matches = self.completer.attr_matches('CompleteMe.__')
|
matches = self.completer.attr_matches('CompleteMe.__')
|
||||||
|
@ -134,7 +134,7 @@ class TestRlcompleter(unittest.TestCase):
|
||||||
# No opening bracket "(" because we overrode the built-in class
|
# No opening bracket "(" because we overrode the built-in class
|
||||||
self.assertEqual(completer.complete('memoryview', 0), 'memoryview')
|
self.assertEqual(completer.complete('memoryview', 0), 'memoryview')
|
||||||
self.assertIsNone(completer.complete('memoryview', 1))
|
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))
|
self.assertIsNone(completer.complete('Ellipsis', 1))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue