From b2ce6f32003a1483ae62a03557baac7478d38726 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Thu, 11 Apr 2019 09:29:17 +0200 Subject: [PATCH] Improve output of ini options in --help Do not cut long help texts, but wrap them the same way as argparse wraps the other help items. --- changelog/5091.feature.rst | 1 + src/_pytest/helpconfig.py | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 changelog/5091.feature.rst diff --git a/changelog/5091.feature.rst b/changelog/5091.feature.rst new file mode 100644 index 00000000000..122c91f533a --- /dev/null +++ b/changelog/5091.feature.rst @@ -0,0 +1 @@ +The output for ini options in ``--help`` has been improved. diff --git a/src/_pytest/helpconfig.py b/src/_pytest/helpconfig.py index 2b383d264bc..756ad49cb87 100644 --- a/src/_pytest/helpconfig.py +++ b/src/_pytest/helpconfig.py @@ -141,24 +141,48 @@ def pytest_cmdline_main(config): def showhelp(config): + import textwrap + reporter = config.pluginmanager.get_plugin("terminalreporter") tw = reporter._tw tw.write(config._parser.optparser.format_help()) tw.line() - tw.line() tw.line( "[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:" ) tw.line() columns = tw.fullwidth # costly call + indent_len = 24 # based on argparse's max_help_position=24 + indent = " " * indent_len for name in config._parser._ininames: help, type, default = config._parser._inidict[name] if type is None: type = "string" - spec = "%s (%s)" % (name, type) - line = " %-24s %s" % (spec, help) - tw.line(line[:columns]) + spec = "%s (%s):" % (name, type) + tw.write(" %s" % spec) + spec_len = len(spec) + if spec_len > (indent_len - 3): + # Display help starting at a new line. + tw.line() + helplines = textwrap.wrap( + help, + columns, + initial_indent=indent, + subsequent_indent=indent, + break_on_hyphens=False, + ) + + for line in helplines: + tw.line(line) + else: + # Display help starting after the spec, following lines indented. + tw.write(" " * (indent_len - spec_len - 2)) + wrapped = textwrap.wrap(help, columns - indent_len, break_on_hyphens=False) + + tw.line(wrapped[0]) + for line in wrapped[1:]: + tw.line(indent + line) tw.line() tw.line("environment variables:")