diff options
author | Todd Leonhardt <todd.leonhardt@gmail.com> | 2020-11-11 21:17:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-11 21:17:23 -0500 |
commit | aac467e6eb2557b15170919446b2d9cc8fffabdc (patch) | |
tree | 60a304ac442574202ff08406cf0a432afe2e393e | |
parent | 887bda494c53d6f7457bb70fbbd20b5daf09125f (diff) | |
parent | 86d0e9c788ae88738e37242ad8d4c1047b443266 (diff) | |
download | cmd2-git-aac467e6eb2557b15170919446b2d9cc8fffabdc.tar.gz |
Merge pull request #1007 from bambu/docstr_fmt
Format multiline doc strings to match style of other help messages
-rw-r--r-- | cmd2/cmd2.py | 15 | ||||
-rwxr-xr-x | tests/test_cmd2.py | 15 |
2 files changed, 25 insertions, 5 deletions
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py index 8e23eca0..c8f5a9bd 100644 --- a/cmd2/cmd2.py +++ b/cmd2/cmd2.py @@ -34,6 +34,7 @@ import glob import inspect import os import pickle +import pydoc import re import sys import threading @@ -3155,17 +3156,21 @@ class Cmd(cmd.Cmd): # Set end to blank so the help output matches how it looks when "command -h" is used self.poutput(completer.format_help(tokens), end='') + # If there is a help func delegate to do_help + elif help_func is not None: + super().do_help(args.command) + + # If there's no help_func __doc__ then format and output it + elif func is not None and func.__doc__ is not None: + self.poutput(pydoc.getdoc(func)) + # If there is no help information then print an error - elif help_func is None and (func is None or not func.__doc__): + else: err_msg = self.help_error.format(args.command) # Set apply_style to False so help_error's style is not overridden self.perror(err_msg, apply_style=False) - # Otherwise delegate to cmd base class do_help() - else: - super().do_help(args.command) - def _help_menu(self, verbose: bool = False) -> None: """Show a list of commands which help can be displayed for""" cmds_cats, cmds_doc, cmds_undoc, help_topics = self._build_command_info() diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py index 034f7096..554f2ba7 100755 --- a/tests/test_cmd2.py +++ b/tests/test_cmd2.py @@ -981,6 +981,16 @@ class HelpApp(cmd2.Cmd): def do_undoc(self, arg): pass + def do_multiline_docstr(self, arg): + """ + This documentation + is multiple lines + and there are no + tabs + """ + pass + + @pytest.fixture def help_app(): app = HelpApp() @@ -1004,6 +1014,11 @@ def test_help_overridden_method(help_app): expected = normalize('This overrides the edit command and does nothing.') assert out == expected +def test_help_multiline_docstring(help_app): + out, err = run_cmd(help_app, 'help multiline_docstr') + expected = normalize('This documentation\nis multiple lines\nand there are no\ntabs') + assert out == expected + class HelpCategoriesApp(cmd2.Cmd): """Class for testing custom help_* methods which override docstring help.""" |