summaryrefslogtreecommitdiff
path: root/pylint/config
diff options
context:
space:
mode:
authorDavid Lawson <dmrlawson@gmail.com>2022-12-14 22:24:55 +0000
committerGitHub <noreply@github.com>2022-12-14 22:24:55 +0000
commit62232b33a525a2b8ef8638a59a03e459ca069c4c (patch)
tree81a032899d4d130228598d2012db4cfd17d421f3 /pylint/config
parent491eef5b97c4cab5c96f54bc1a8c9cfa1e7b0a51 (diff)
downloadpylint-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/config')
-rw-r--r--pylint/config/arguments_manager.py9
-rw-r--r--pylint/config/config_initialization.py5
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