]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45495: Add 'case' and 'match' to IDLE completions list. (GH-29000)
authorTerry Jan Reedy <tjreedy@udel.edu>
Sat, 16 Oct 2021 22:44:00 +0000 (18:44 -0400)
committerGitHub <noreply@github.com>
Sat, 16 Oct 2021 22:44:00 +0000 (18:44 -0400)
Since the keyword list is frozen, only compute it once per
session.  The colorizer already handles context keywords.

Lib/idlelib/autocomplete.py
Lib/idlelib/idle_test/test_autocomplete.py
Misc/NEWS.d/next/IDLE/2021-10-16-17-20-32.bpo-45495.ST8RFt.rst [new file with mode: 0644]

index bb7ee035c4fefb786f199bcc9e1227818d8e63ce..032d31225315fb71a8efcbbc11b344f83ba1ea7c 100644 (file)
@@ -9,6 +9,12 @@ import os
 import string
 import sys
 
+# Modified keyword list is used in fetch_completions.
+completion_kwds = [s for s in keyword.kwlist
+                     if s not in {'True', 'False', 'None'}]  # In builtins.
+completion_kwds.extend(('match', 'case'))  # Context keywords.
+completion_kwds.sort()
+
 # Two types of completions; defined here for autocomplete_w import below.
 ATTRS, FILES = 0, 1
 from idlelib import autocomplete_w
@@ -177,9 +183,7 @@ class AutoComplete:
                     namespace = {**__main__.__builtins__.__dict__,
                                  **__main__.__dict__}
                     bigl = eval("dir()", namespace)
-                    kwds = (s for s in keyword.kwlist
-                            if s not in {'True', 'False', 'None'})
-                    bigl.extend(kwds)
+                    bigl.extend(completion_kwds)
                     bigl.sort()
                     if "__all__" in bigl:
                         smalll = sorted(eval("__all__", namespace))
index 642bb5db64dc341d238dd5f097c3985c782ea235..a811363c18d04e5770ec7071e08f0273dd04f0bf 100644 (file)
@@ -218,6 +218,11 @@ class AutoCompleteTest(unittest.TestCase):
         self.assertTrue(acp.open_completions(ac.TAB))
         self.text.delete('1.0', 'end')
 
+    def test_completion_kwds(self):
+        self.assertIn('and', ac.completion_kwds)
+        self.assertIn('case', ac.completion_kwds)
+        self.assertNotIn('None', ac.completion_kwds)
+
     def test_fetch_completions(self):
         # Test that fetch_completions returns 2 lists:
         # For attribute completion, a large list containing all variables, and
diff --git a/Misc/NEWS.d/next/IDLE/2021-10-16-17-20-32.bpo-45495.ST8RFt.rst b/Misc/NEWS.d/next/IDLE/2021-10-16-17-20-32.bpo-45495.ST8RFt.rst
new file mode 100644 (file)
index 0000000..3868f8d
--- /dev/null
@@ -0,0 +1 @@
+Add context keywords 'case' and 'match' to completions list.