Skip to content

Commit

Permalink
Improve output of ini options in --help
Browse files Browse the repository at this point in the history
Do not cut long help texts, but wrap them the same way as argparse wraps
the other help items.
  • Loading branch information
blueyed committed Apr 11, 2019
1 parent b375937 commit 679f99d
Showing 1 changed file with 28 additions and 4 deletions.
32 changes: 28 additions & 4 deletions src/_pytest/helpconfig.py
Expand Up @@ -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 - 4):
# 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:")
Expand Down

0 comments on commit 679f99d

Please sign in to comment.