diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index b77a38ccd48..ef2fd42783c 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -182,6 +182,10 @@ ArgumentParser objects .. versionchanged:: 3.5 *allow_abbrev* parameter was added. + .. versionchanged:: 3.8 + In previous versions, *allow_abbrev* also disabled grouping of short + flags such as ``-vv`` to mean ``-v -v``. + The following sections describe how each of these are used. diff --git a/Lib/argparse.py b/Lib/argparse.py index 4f3aea928bf..e45b67b6770 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -2130,7 +2130,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): action = self._option_string_actions[option_string] return action, option_string, explicit_arg - if self.allow_abbrev: + if self.allow_abbrev or not arg_string.startswith('--'): # search through all possible prefixes of the option string # and all actions in the parser for possible interpretations option_tuples = self._get_option_tuples(arg_string) diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 9079d4bc7aa..5128dc5e1be 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -785,6 +785,25 @@ class TestOptionalsDisallowLongAbbreviation(ParserTestCase): ('--foonly 7 --foodle --foo 2', NS(foo='2', foodle=True, foonly='7')), ] + +class TestDisallowLongAbbreviationAllowsShortGrouping(ParserTestCase): + """Do not allow abbreviations of long options at all""" + + parser_signature = Sig(allow_abbrev=False) + argument_signatures = [ + Sig('-r'), + Sig('-c', action='count'), + ] + failures = ['-r', '-c -r'] + successes = [ + ('', NS(r=None, c=None)), + ('-ra', NS(r='a', c=None)), + ('-rcc', NS(r='cc', c=None)), + ('-cc', NS(r=None, c=2)), + ('-cc -ra', NS(r='a', c=2)), + ('-ccrcc', NS(r='cc', c=2)), + ] + # ================ # Positional tests # ================ diff --git a/Misc/ACKS b/Misc/ACKS index b2a6011019c..3e6a0aca357 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -645,6 +645,7 @@ Travis B. Hartwell Shane Harvey Larry Hastings Tim Hatch +Zac Hatfield-Dodds Shane Hathaway Michael Haubenwallner Janko Hauser diff --git a/Misc/NEWS.d/next/Library/2019-06-23-12-46-10.bpo-26967.xEuem1.rst b/Misc/NEWS.d/next/Library/2019-06-23-12-46-10.bpo-26967.xEuem1.rst new file mode 100644 index 00000000000..c5852f61421 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-06-23-12-46-10.bpo-26967.xEuem1.rst @@ -0,0 +1,3 @@ +An :class:`~argparse.ArgumentParser` with ``allow_abbrev=False`` no longer +disables grouping of short flags, such as ``-vv``, but only disables +abbreviation of long flags as documented. Patch by Zac Hatfield-Dodds.