diff options
author | David Lawson <dmrlawson@gmail.com> | 2022-12-14 22:24:55 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-14 22:24:55 +0000 |
commit | 62232b33a525a2b8ef8638a59a03e459ca069c4c (patch) | |
tree | 81a032899d4d130228598d2012db4cfd17d421f3 /pylint | |
parent | 491eef5b97c4cab5c96f54bc1a8c9cfa1e7b0a51 (diff) | |
download | pylint-git-62232b33a525a2b8ef8638a59a03e459ca069c4c.tar.gz |
Fix inconsistent argument exit code when argparse exit with its own error code (#7931)
Returning 2 here is confusing as it doesn't match the documentation: https://pylint.pycqa.org/en/latest/user_guide/usage/run.html#exit-codes
* pylint: use exit code 32 when invalid arguments are passed
* pylint: add failing test when ambiguous abbreviated parameters are set in a config file
This is confusing behaviour. The output is:
```
usage: pylint [options]
pylint: error: ambiguous option: --no could match --notes, --notes-rgx, --no-docstring-rgx
```
The exit code is 2 which doesn't match the documentation: https://pylint.pycqa.org/en/latest/user_guide/usage/run.html#exit-codes
* pylint: use exit code 32 when ambiguous abbreviated parameters are set in a config file
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'pylint')
-rw-r--r-- | pylint/config/arguments_manager.py | 9 | ||||
-rw-r--r-- | pylint/config/config_initialization.py | 5 |
2 files changed, 10 insertions, 4 deletions
diff --git a/pylint/config/arguments_manager.py b/pylint/config/arguments_manager.py index c771ad355..2151aefde 100644 --- a/pylint/config/arguments_manager.py +++ b/pylint/config/arguments_manager.py @@ -256,9 +256,12 @@ class _ArgumentsManager: def _parse_configuration_file(self, arguments: list[str]) -> None: """Parse the arguments found in a configuration file into the namespace.""" - self.config, parsed_args = self._arg_parser.parse_known_args( - arguments, self.config - ) + try: + self.config, parsed_args = self._arg_parser.parse_known_args( + arguments, self.config + ) + except SystemExit: + sys.exit(32) unrecognized_options: list[str] = [] for opt in parsed_args: if opt.startswith("--"): diff --git a/pylint/config/config_initialization.py b/pylint/config/config_initialization.py index b903a5802..d26f0e8c5 100644 --- a/pylint/config/config_initialization.py +++ b/pylint/config/config_initialization.py @@ -87,7 +87,10 @@ def _config_initialization( unrecognized_options.append(opt[1:]) if unrecognized_options: msg = ", ".join(unrecognized_options) - linter._arg_parser.error(f"Unrecognized option found: {msg}") + try: + linter._arg_parser.error(f"Unrecognized option found: {msg}") + except SystemExit: + sys.exit(32) # Now that config file and command line options have been loaded # with all disables, it is safe to emit messages |