]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-67248: cmd: Sort miscellaneous help topics (#92254)
authorSam Denton <samwyse@gmail.com>
Wed, 4 May 2022 03:36:52 +0000 (22:36 -0500)
committerGitHub <noreply@github.com>
Wed, 4 May 2022 03:36:52 +0000 (21:36 -0600)
Closes #67248

Lib/cmd.py
Lib/test/test_cmd.py
Misc/NEWS.d/next/Library/2022-05-03-19-06-38.gh-issue-67248.DK61Go.rst [new file with mode: 0644]

index 859e91096d8f57d906c00023ef1a1c0e663178d6..88ee7d3ddc46944a7232128cfa8b4fa6223769db 100644 (file)
@@ -310,10 +310,10 @@ class Cmd:
             names = self.get_names()
             cmds_doc = []
             cmds_undoc = []
-            help = {}
+            topics = set()
             for name in names:
                 if name[:5] == 'help_':
-                    help[name[5:]]=1
+                    topics.add(name[5:])
             names.sort()
             # There can be duplicates if routines overridden
             prevname = ''
@@ -323,16 +323,16 @@ class Cmd:
                         continue
                     prevname = name
                     cmd=name[3:]
-                    if cmd in help:
+                    if cmd in topics:
                         cmds_doc.append(cmd)
-                        del help[cmd]
+                        topics.remove(cmd)
                     elif getattr(self, name).__doc__:
                         cmds_doc.append(cmd)
                     else:
                         cmds_undoc.append(cmd)
             self.stdout.write("%s\n"%str(self.doc_leader))
             self.print_topics(self.doc_header,   cmds_doc,   15,80)
-            self.print_topics(self.misc_header,  list(help.keys()),15,80)
+            self.print_topics(self.misc_header,  sorted(topics),15,80)
             self.print_topics(self.undoc_header, cmds_undoc, 15,80)
 
     def print_topics(self, header, cmds, cmdlen, maxcol):
index 5e8b17c6e871a1765f679dc9066f47ce6e8b1386..319801c71f776bbede8410e48926df74feb43bad 100644 (file)
@@ -70,7 +70,7 @@ class samplecmdclass(cmd.Cmd):
     >>> mycmd.complete_help("12")
     []
     >>> sorted(mycmd.complete_help(""))
-    ['add', 'exit', 'help', 'shell']
+    ['add', 'exit', 'help', 'life', 'meaning', 'shell']
 
     Test for the function do_help():
     >>> mycmd.do_help("testet")
@@ -79,12 +79,20 @@ class samplecmdclass(cmd.Cmd):
     help text for add
     >>> mycmd.onecmd("help add")
     help text for add
+    >>> mycmd.onecmd("help meaning")  # doctest: +NORMALIZE_WHITESPACE
+    Try and be nice to people, avoid eating fat, read a good book every
+    now and then, get some walking in, and try to live together in peace
+    and harmony with people of all creeds and nations.
     >>> mycmd.do_help("")
     <BLANKLINE>
     Documented commands (type help <topic>):
     ========================================
     add  help
     <BLANKLINE>
+    Miscellaneous help topics:
+    ==========================
+    life  meaning
+    <BLANKLINE>
     Undocumented commands:
     ======================
     exit  shell
@@ -115,17 +123,22 @@ class samplecmdclass(cmd.Cmd):
     This test includes the preloop(), postloop(), default(), emptyline(),
     parseline(), do_help() functions
     >>> mycmd.use_rawinput=0
-    >>> mycmd.cmdqueue=["", "add", "add 4 5", "help", "help add","exit"]
-    >>> mycmd.cmdloop()
+
+    >>> mycmd.cmdqueue=["add", "add 4 5", "", "help", "help add", "exit"]
+    >>> mycmd.cmdloop()  # doctest: +REPORT_NDIFF
     Hello from preloop
-    help text for add
     *** invalid number of arguments
     9
+    9
     <BLANKLINE>
     Documented commands (type help <topic>):
     ========================================
     add  help
     <BLANKLINE>
+    Miscellaneous help topics:
+    ==========================
+    life  meaning
+    <BLANKLINE>
     Undocumented commands:
     ======================
     exit  shell
@@ -165,6 +178,17 @@ class samplecmdclass(cmd.Cmd):
         print("help text for add")
         return
 
+    def help_meaning(self):
+        print("Try and be nice to people, avoid eating fat, read a "
+              "good book every now and then, get some walking in, "
+              "and try to live together in peace and harmony with "
+              "people of all creeds and nations.")
+        return
+
+    def help_life(self):
+        print("Always look on the bright side of life")
+        return
+
     def do_exit(self, arg):
         return True
 
diff --git a/Misc/NEWS.d/next/Library/2022-05-03-19-06-38.gh-issue-67248.DK61Go.rst b/Misc/NEWS.d/next/Library/2022-05-03-19-06-38.gh-issue-67248.DK61Go.rst
new file mode 100644 (file)
index 0000000..8237934
--- /dev/null
@@ -0,0 +1 @@
+Sort the miscellaneous topics in Cmd.do_help()