summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>2022-04-07 17:57:56 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2022-04-11 12:25:08 +0200
commit9fe6b475dff02f16089ac8c80a1b0ff3e989a41a (patch)
tree3cb24434dc19ff320a7687bd0473656f44fe3ed4
parent22068805fa69efbbad4cd6f7728589ddefba9504 (diff)
downloadpylint-git-9fe6b475dff02f16089ac8c80a1b0ff3e989a41a.tar.gz
Deprecate ``load_command_line_configuration``
-rw-r--r--pylint/config/arguments_manager.py74
-rw-r--r--pylint/config/config_initialization.py4
-rw-r--r--tests/checkers/unittest_format.py8
-rw-r--r--tests/lint/test_pylinter.py4
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()