diff options
author | Georg Brandl <georg@python.org> | 2010-01-06 18:02:16 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2010-01-06 18:02:16 (GMT) |
commit | 89040530035ee9a8d0b5ae34c6e73b80fafa4307 (patch) | |
tree | 1fe0036448828f6d1f2a2f92323828eaa2fb136f | |
parent | 5089a38af2b90dfe51bbf157ff38227c85eff687 (diff) | |
download | cpython-89040530035ee9a8d0b5ae34c6e73b80fafa4307.zip cpython-89040530035ee9a8d0b5ae34c6e73b80fafa4307.tar.gz cpython-89040530035ee9a8d0b5ae34c6e73b80fafa4307.tar.bz2 |
#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.
-rw-r--r-- | Lib/cmd.py | 18 | ||||
-rw-r--r-- | Lib/test/test_cmd.py | 6 |
2 files changed, 11 insertions, 13 deletions
@@ -281,19 +281,15 @@ class Cmd: 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: diff --git a/Lib/test/test_cmd.py b/Lib/test/test_cmd.py index 8898a32..2ee5cef 100644 --- a/Lib/test/test_cmd.py +++ b/Lib/test/test_cmd.py @@ -57,15 +57,17 @@ class samplecmdclass(cmd.Cmd): >>> 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") |