diff options
author | Daniƫl van Noord <13665637+DanielNoord@users.noreply.github.com> | 2022-04-07 17:57:56 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2022-04-11 12:25:08 +0200 |
commit | 9fe6b475dff02f16089ac8c80a1b0ff3e989a41a (patch) | |
tree | 3cb24434dc19ff320a7687bd0473656f44fe3ed4 | |
parent | 22068805fa69efbbad4cd6f7728589ddefba9504 (diff) | |
download | pylint-git-9fe6b475dff02f16089ac8c80a1b0ff3e989a41a.tar.gz |
Deprecate ``load_command_line_configuration``
-rw-r--r-- | pylint/config/arguments_manager.py | 74 | ||||
-rw-r--r-- | pylint/config/config_initialization.py | 4 | ||||
-rw-r--r-- | tests/checkers/unittest_format.py | 8 | ||||
-rw-r--r-- | tests/lint/test_pylinter.py | 4 |
4 files changed, 33 insertions, 57 deletions
diff --git a/pylint/config/arguments_manager.py b/pylint/config/arguments_manager.py index db7b06a87..5339037e1 100644 --- a/pylint/config/arguments_manager.py +++ b/pylint/config/arguments_manager.py @@ -7,7 +7,6 @@ import argparse import collections import configparser -import contextlib import copy import optparse # pylint: disable=deprecated-module import os @@ -48,40 +47,6 @@ if TYPE_CHECKING: from pylint.config.arguments_provider import _ArgumentsProvider -@contextlib.contextmanager -def _patch_optparse(): - # pylint: disable = redefined-variable-type - orig_default = optparse.HelpFormatter - try: - optparse.HelpFormatter.expand_default = _expand_default - yield - finally: - optparse.HelpFormatter.expand_default = orig_default - - -def _expand_default(self, option): - """Patch OptionParser.expand_default with custom behaviour. - - This will handle defaults to avoid overriding values in the - configuration file. - """ - if self.parser is None or not self.default_tag: - return option.help - optname = option._long_opts[0][2:] - try: - provider = self.parser.options_manager._all_options[optname] - except KeyError: - value = None - else: - optdict = provider.get_option_def(optname) - optname = provider.option_attrname(optname, optdict) - value = getattr(provider.config, optname, optdict) - value = utils._format_option_value(optdict, value) - if value is optparse.NO_DEFAULT or not value: - value = self.NO_DEFAULT_VALUE - return option.help.replace(self.default_tag, str(value)) - - # pylint: disable-next=too-many-instance-attributes class _ArgumentsManager: """Arguments manager class used to handle command-line arguments and options.""" @@ -553,27 +518,27 @@ class _ArgumentsManager: provider = self._all_options[opt] provider.set_option(opt, opt_value) - # pylint: disable-next=fixme - # TODO: Optparse: All methods below this line are copied to keep API-parity with - # OptionsManagerMixIn. They should either be deprecated or moved above this line - # to keep them in _ArgumentsManager - - def load_command_line_configuration(self, args=None) -> List[str]: + def load_command_line_configuration( + self, args: Optional[List[str]] = None + ) -> List[str]: """Override configuration according to command line parameters. return additional arguments """ - with _patch_optparse(): - args = sys.argv[1:] if args is None else list(args) - (options, args) = self.cmdline_parser.parse_args(args=args) - for provider in self._nocallback_options: - config = provider.config - for attr in config.__dict__.keys(): - value = getattr(options, attr, None) - if value is None: - continue - setattr(config, attr, value) - return args + warnings.warn( + "load_command_line_configuration has been deprecated. It will be removed in pylint 3.0.", + DeprecationWarning, + ) + args = sys.argv[1:] if args is None else list(args) + (options, args) = self.cmdline_parser.parse_args(args=args) + for provider in self._nocallback_options: + config = provider.config + for attr in config.__dict__.keys(): + value = getattr(options, attr, None) + if value is None: + continue + setattr(config, attr, value) + return args def help(self, level: Optional[int] = None) -> str: """Return the usage string based on the available options.""" @@ -585,6 +550,11 @@ class _ArgumentsManager: ) return self._arg_parser.format_help() + # pylint: disable-next=fixme + # TODO: Optparse: All methods below this line are copied to keep API-parity with + # OptionsManagerMixIn. They should either be deprecated or moved above this line + # to keep them in _ArgumentsManager + def cb_set_provider_option(self, option, opt, value, parser): """Optik callback for option setting.""" if opt.startswith("--"): diff --git a/pylint/config/config_initialization.py b/pylint/config/config_initialization.py index f255134f1..68522768b 100644 --- a/pylint/config/config_initialization.py +++ b/pylint/config/config_initialization.py @@ -68,7 +68,9 @@ def _config_initialization( linter.load_config_file() try: - linter.load_command_line_configuration(args_list) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=DeprecationWarning) + linter.load_command_line_configuration(args_list) except SystemExit as exc: if exc.code == 2: # bad options exc.code = 32 diff --git a/tests/checkers/unittest_format.py b/tests/checkers/unittest_format.py index fa8b549a5..7a6e851b8 100644 --- a/tests/checkers/unittest_format.py +++ b/tests/checkers/unittest_format.py @@ -9,6 +9,7 @@ import tempfile import tokenize import astroid +import pytest from pylint import lint, reporters from pylint.checkers.format import FormatChecker @@ -170,9 +171,10 @@ mylist = [ linter = lint.PyLinter() checker = FormatChecker(linter) linter.register_checker(checker) - args = linter.load_command_line_configuration( - [file_.name, "-d", "bad-continuation"] - ) + with pytest.warns(DeprecationWarning): + args = linter.load_command_line_configuration( + [file_.name, "-d", "bad-continuation"] + ) myreporter = reporters.CollectingReporter() linter.set_reporter(myreporter) linter.check(args) diff --git a/tests/lint/test_pylinter.py b/tests/lint/test_pylinter.py index 57ad0f7b8..f982787d7 100644 --- a/tests/lint/test_pylinter.py +++ b/tests/lint/test_pylinter.py @@ -5,6 +5,7 @@ from typing import Any, NoReturn from unittest.mock import patch +import pytest from astroid import AstroidBuildingError from py._path.local import LocalPath # type: ignore[import] from pytest import CaptureFixture @@ -21,7 +22,8 @@ def raise_exception(*args: Any, **kwargs: Any) -> NoReturn: def test_crash_in_file( linter: PyLinter, capsys: CaptureFixture, tmpdir: LocalPath ) -> None: - args = linter.load_command_line_configuration([__file__]) + with pytest.warns(DeprecationWarning): + args = linter.load_command_line_configuration([__file__]) linter.crash_file_path = str(tmpdir / "pylint-crash-%Y") linter.check(args) out, err = capsys.readouterr() |