Merge "Fix regexp for detecting long options"

This commit is contained in:
Jenkins 2017-08-23 09:53:16 +00:00 committed by Gerrit Code Review
commit dacbd601d8
2 changed files with 62 additions and 3 deletions

View File

@ -60,13 +60,18 @@ def _format_usage(parser):
# becomes ['--format <FORMAT>'] and not ['--format', '<FORMAT>'].
# Yes, they really do use regexes to break apart and rewrap their help
# string. Don't ask me why.
part_regexp = r'\(.*?\)+|\[.*?\]+|(?:(?:-\w|--[\w-]+)(?:\s+<?\w+>?)?)|\S+'
part_regexp = re.compile(r"""
\(.*?\)+ |
\[.*?\]+ |
(?:(?:-\w|--\w+(?:-\w+)*)(?:\s+<?\w[\w-]*>?)?) |
\S+
""", re.VERBOSE)
opt_usage = fmt._format_actions_usage(optionals, groups)
pos_usage = fmt._format_actions_usage(positionals, groups)
opt_parts = re.findall(part_regexp, opt_usage)
pos_parts = re.findall(part_regexp, pos_usage)
opt_parts = part_regexp.findall(opt_usage)
pos_parts = part_regexp.findall(pos_usage)
parts = opt_parts + pos_parts
if len(' '.join([parser.prog] + parts)) < 72:

View File

@ -206,3 +206,57 @@ class TestSphinxExtension(base.TestBase):
user name
""").lstrip(), output)
def test_various_option_names_with_hyphen(self):
"""Handle options whose name and/or metavar contain hyphen(s)"""
parser = argparse.ArgumentParser(prog='hello-world', add_help=False)
parser.add_argument('--foo-bar', metavar='<foo-bar>',
help='foo bar', required=True)
parser.add_argument('--foo-bar-baz', metavar='<foo-bar-baz>',
help='foo bar baz', required=True)
parser.add_argument('--foo', metavar='<foo>',
help='foo', required=True)
parser.add_argument('--alpha', metavar='<A>',
help='alpha')
parser.add_argument('--alpha-beta', metavar='<A-B>',
help='alpha beta')
parser.add_argument('--alpha-beta-gamma', metavar='<A-B-C>',
help='alpha beta gamma')
output = '\n'.join(sphinxext._format_parser(parser))
self.assertEqual(textwrap.dedent("""
.. program:: hello-world
.. code-block:: shell
hello-world
--foo-bar <foo-bar>
--foo-bar-baz <foo-bar-baz>
--foo <foo>
[--alpha <A>]
[--alpha-beta <A-B>]
[--alpha-beta-gamma <A-B-C>]
.. option:: --foo-bar <foo-bar>
foo bar
.. option:: --foo-bar-baz <foo-bar-baz>
foo bar baz
.. option:: --foo <foo>
foo
.. option:: --alpha <A>
alpha
.. option:: --alpha-beta <A-B>
alpha beta
.. option:: --alpha-beta-gamma <A-B-C>
alpha beta gamma
""").lstrip(), output)