gh-124345: Support abbreviated single-dash long options with = in argparse (GH-124428)

This commit is contained in:
Serhiy Storchaka 2024-09-29 10:52:07 +03:00 committed by GitHub
parent 9bcadf589a
commit 61180446ee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 3 deletions

View File

@ -2319,7 +2319,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
# but multiple character options always have to have their argument
# separate
elif option_string[0] in chars and option_string[1] not in chars:
option_prefix = option_string
option_prefix, sep, explicit_arg = option_string.partition('=')
if not sep:
sep = explicit_arg = None
short_option_prefix = option_string[:2]
short_explicit_arg = option_string[2:]
@ -2330,7 +2332,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
result.append(tup)
elif self.allow_abbrev and option_string.startswith(option_prefix):
action = self._option_string_actions[option_string]
tup = action, option_string, None, None
tup = action, option_string, sep, explicit_arg
result.append(tup)
# shouldn't ever get here

View File

@ -380,15 +380,22 @@ class TestOptionalsSingleDashAmbiguous(ParserTestCase):
"""Test Optionals that partially match but are not subsets"""
argument_signatures = [Sig('-foobar'), Sig('-foorab')]
failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b']
failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b',
'-f=a', '-foo=b']
successes = [
('', NS(foobar=None, foorab=None)),
('-foob a', NS(foobar='a', foorab=None)),
('-foob=a', NS(foobar='a', foorab=None)),
('-foor a', NS(foobar=None, foorab='a')),
('-foor=a', NS(foobar=None, foorab='a')),
('-fooba a', NS(foobar='a', foorab=None)),
('-fooba=a', NS(foobar='a', foorab=None)),
('-foora a', NS(foobar=None, foorab='a')),
('-foora=a', NS(foobar=None, foorab='a')),
('-foobar a', NS(foobar='a', foorab=None)),
('-foobar=a', NS(foobar='a', foorab=None)),
('-foorab a', NS(foobar=None, foorab='a')),
('-foorab=a', NS(foobar=None, foorab='a')),
]
@ -875,7 +882,9 @@ class TestOptionalsAllowLongAbbreviation(ParserTestCase):
successes = [
('', NS(foo=None, foobaz=None, fooble=False)),
('--foo 7', NS(foo='7', foobaz=None, fooble=False)),
('--foo=7', NS(foo='7', foobaz=None, fooble=False)),
('--fooba a', NS(foo=None, foobaz='a', fooble=False)),
('--fooba=a', NS(foo=None, foobaz='a', fooble=False)),
('--foobl --foo g', NS(foo='g', foobaz=None, fooble=True)),
]

View File

@ -0,0 +1,2 @@
:mod:`argparse` vim supports abbreviated single-dash long options separated
by ``=`` from its value.