[Python-checkins] r77332 - in python/trunk/Lib: cmd.py test/test_cmd.py

georg.brandl python-checkins at python.org
Wed Jan 6 19:02:17 CET 2010


Author: georg.brandl
Date: Wed Jan  6 19:02:16 2010
New Revision: 77332

Log:
#5991: let completion for the "help" command include help topics.

This also simplifies the Cmd.get_names() method implementation; it was written
at a time where dir() didn't consider base class attributes.




Modified:
   python/trunk/Lib/cmd.py
   python/trunk/Lib/test/test_cmd.py

Modified: python/trunk/Lib/cmd.py
==============================================================================
--- python/trunk/Lib/cmd.py	(original)
+++ python/trunk/Lib/cmd.py	Wed Jan  6 19:02:16 2010
@@ -281,19 +281,15 @@
             return None
 
     def get_names(self):
-        # Inheritance says we have to look in class and
-        # base classes; order is not important.
-        names = []
-        classes = [self.__class__]
-        while classes:
-            aclass = classes.pop(0)
-            if aclass.__bases__:
-                classes = classes + list(aclass.__bases__)
-            names = names + dir(aclass)
-        return names
+        # This method used to pull in base class attributes
+        # at a time dir() didn't do it yet.
+        return dir(self.__class__)
 
     def complete_help(self, *args):
-        return self.completenames(*args)
+        commands = set(self.completenames(*args))
+        topics = set(a[5:] for a in self.get_names()
+                     if a.startswith('help_' + args[0]))
+        return list(commands | topics)
 
     def do_help(self, arg):
         if arg:

Modified: python/trunk/Lib/test/test_cmd.py
==============================================================================
--- python/trunk/Lib/test/test_cmd.py	(original)
+++ python/trunk/Lib/test/test_cmd.py	Wed Jan  6 19:02:16 2010
@@ -57,15 +57,17 @@
     >>> mycmd.completenames("12")
     []
     >>> mycmd.completenames("help")
-    ['help', 'help']
+    ['help']
 
     Test for the function complete_help():
     >>> mycmd.complete_help("a")
     ['add']
     >>> mycmd.complete_help("he")
-    ['help', 'help']
+    ['help']
     >>> mycmd.complete_help("12")
     []
+    >>> sorted(mycmd.complete_help(""))
+    ['add', 'exit', 'help', 'shell']
 
     Test for the function do_help():
     >>> mycmd.do_help("testet")


More information about the Python-checkins mailing list