From 89040530035ee9a8d0b5ae34c6e73b80fafa4307 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 6 Jan 2010 18:02:16 +0000 Subject: [PATCH] #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. --- Lib/cmd.py | 18 +++++++----------- Lib/test/test_cmd.py | 6 ++++-- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Lib/cmd.py b/Lib/cmd.py index 3f82b48710..5847f76360 100644 --- a/Lib/cmd.py +++ b/Lib/cmd.py @@ -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 8898a32cb9..2ee5cef472 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") -- 2.50.1