summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkbeldan <kbeldan@users.noreply.github.com>2022-05-02 22:36:29 (GMT)
committerGitHub <noreply@github.com>2022-05-02 22:36:29 (GMT)
commit4bed9c47bd6c581c4c8ab59ab7acf0e57510d1f7 (patch)
treeecfcace636dd12cebaaf061d733fa8d2d8fb1ae9
parentcc6ae4f4835f9e76a34f24cd1f666c1cc0fecfa3 (diff)
downloadcpython-4bed9c47bd6c581c4c8ab59ab7acf0e57510d1f7.zip
cpython-4bed9c47bd6c581c4c8ab59ab7acf0e57510d1f7.tar.gz
cpython-4bed9c47bd6c581c4c8ab59ab7acf0e57510d1f7.tar.bz2
gh-92032: Add soft keywords to rlcompleter (#92029)
Let the interpreter autocomplete soft-keywords, ATM the PEP-634 'match' / 'case' / '_' (wildcard pattern). Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
-rw-r--r--Lib/rlcompleter.py4
-rw-r--r--Lib/test/test_rlcompleter.py3
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-04-28-20-19-49.gh-issue-92032.ef-UfM.rst2
3 files changed, 7 insertions, 2 deletions
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index 98b7930..4ede6dc 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -117,14 +117,14 @@ class Completer:
matches = []
seen = {"__builtins__"}
n = len(text)
- for word in keyword.kwlist:
+ for word in keyword.kwlist + keyword.softkwlist:
if word[:n] == text:
seen.add(word)
if word in {'finally', 'try'}:
word = word + ':'
elif word not in {'False', 'None', 'True',
'break', 'continue', 'pass',
- 'else'}:
+ 'else', '_'}:
word = word + ' '
matches.append(word)
for nspace in [self.namespace, builtins.__dict__]:
diff --git a/Lib/test/test_rlcompleter.py b/Lib/test/test_rlcompleter.py
index 1f7a6ed..6b5fc9a 100644
--- a/Lib/test/test_rlcompleter.py
+++ b/Lib/test/test_rlcompleter.py
@@ -138,6 +138,9 @@ class TestRlcompleter(unittest.TestCase):
self.assertEqual(completer.complete('el', 0), 'elif ')
self.assertEqual(completer.complete('el', 1), 'else')
self.assertEqual(completer.complete('tr', 0), 'try:')
+ self.assertEqual(completer.complete('_', 0), '_')
+ self.assertEqual(completer.complete('match', 0), 'match ')
+ self.assertEqual(completer.complete('case', 0), 'case ')
def test_duplicate_globals(self):
namespace = {
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-04-28-20-19-49.gh-issue-92032.ef-UfM.rst b/Misc/NEWS.d/next/Core and Builtins/2022-04-28-20-19-49.gh-issue-92032.ef-UfM.rst
new file mode 100644
index 0000000..f6f0db2
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-04-28-20-19-49.gh-issue-92032.ef-UfM.rst
@@ -0,0 +1,2 @@
+The interpreter can now autocomplete soft keywords, as of now
+``match``, ``case``, and ``_`` (wildcard pattern) from :pep:`634`.