diff --git a/.gitignore b/.gitignore index a652d9145d..58003275c8 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ debian/pylint .eggs/ .pytest_cache/ .mypy_cache/ +.vscode +venv/ diff --git a/doc/faq.rst b/doc/faq.rst index 5d797839b9..0a52e8590d 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -182,9 +182,12 @@ tricks like: :: pylint does have some messages disabled by default, either because they are prone to false positives or that they are opinionated enough -for not being included as default messages. But most of the disabled -messages are from the Python 3 porting checker, which is disabled by -default. It needs special activation with the ``--py3k`` flag. +for not being included as default messages. The disabled messages are +from the Python 3 porting checker and design checker, which are disabled +by default. The Python 3 porting checker needs special activation with +the ``--py3k`` flag. The design checker can be enabled with +``--enabled=design``. + 4.8 I am using another popular linter alongside pylint. Which messages should I disable to avoid duplicates? ------------------------------------------------------------------------------------------------------------ diff --git a/doc/whatsnew/2.7.rst b/doc/whatsnew/2.7.rst index 902b4cccb1..b133e2f1b1 100644 --- a/doc/whatsnew/2.7.rst +++ b/doc/whatsnew/2.7.rst @@ -20,3 +20,5 @@ Other Changes * Fix bug that lead to duplicate messages when using ``--jobs 2`` or more. Close #3584 + +* The `design` checker has been disabled by default, users can still explicitly enable the checker by specifying ``--enabled=design`` at the command line or including ``enable=design`` under the "MESSAGES CONTROL" section in their config files. diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py index 62905bc4aa..9b53e5a2fa 100644 --- a/pylint/checkers/design_analysis.py +++ b/pylint/checkers/design_analysis.py @@ -160,6 +160,7 @@ class MisdesignChecker(BaseChecker): """ __implements__ = (IAstroidChecker,) + enabled = False # configuration section name name = "design" diff --git a/pylint/testutils.py b/pylint/testutils.py index 70cc1f15ce..07ca9b3f3d 100644 --- a/pylint/testutils.py +++ b/pylint/testutils.py @@ -504,6 +504,7 @@ def __init__(self, test_file): self._linter.set_reporter(_test_reporter) self._linter.config.persistent = 0 checkers.initialize(self._linter) + self._linter.enable("design") self._linter.disable("I") try: self._linter.read_config_file(test_file.option_file) diff --git a/tests/lint/unittest_lint.py b/tests/lint/unittest_lint.py index d60ea957af..9e42829feb 100644 --- a/tests/lint/unittest_lint.py +++ b/tests/lint/unittest_lint.py @@ -584,6 +584,15 @@ def test_python3_checker_disabled(linter): assert "python3" in checker_names +def test_design_checker_disabled(linter): + checker_names = [c.name for c in linter.prepare_checkers()] + assert "design" not in checker_names + + linter.set_option("enable", "design") + checker_names = [c.name for c in linter.prepare_checkers()] + assert "design" in checker_names + + def test_full_documentation(linter): out = StringIO() linter.print_full_documentation(out) diff --git a/tests/test_func.py b/tests/test_func.py index dd3a1bc63b..36df357aeb 100644 --- a/tests/test_func.py +++ b/tests/test_func.py @@ -71,6 +71,7 @@ def _check_result(self, got): assert self._get_expected().strip() + "\n" == got.strip() + "\n" def _test(self, tocheck): + self.linter.enable("design") if INFO_TEST_RGX.match(self.module): self.linter.enable("I") else: