diff options
author | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2014-11-16 14:40:00 +0200 |
---|---|---|
committer | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2014-11-16 14:40:00 +0200 |
commit | 62e61f55d3053fe5d50f8f1029d234bc7046911b (patch) | |
tree | a0b0df9c1addd57239f99900de8a4bd8c60111ff | |
parent | edac048269da24c085dbab79c0cebd52d8474298 (diff) | |
download | pylint-62e61f55d3053fe5d50f8f1029d234bc7046911b.tar.gz |
Add support for disabling a checker.
A checker can be disabled (all of its messages will
not be emitted) by specifying an 'enabled'
attribute on the
checker class. Currently, this is used to disable
the Python3 porting checker, which will be enabled by the
'--py3k' flag.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | checkers/__init__.py | 2 | ||||
-rw-r--r-- | checkers/python3.py | 4 | ||||
-rw-r--r-- | lint.py | 5 | ||||
-rw-r--r-- | test/unittest_lint.py | 8 |
5 files changed, 21 insertions, 1 deletions
@@ -172,6 +172,9 @@ ChangeLog for Pylint * Add 'long-suffix' error, emitted when encountering the long suffix on numbers. + * Add support for disabling a checker, by specifying an 'enabled' + attribute on the checker class. + 2014-07-26 -- 1.3.0 diff --git a/checkers/__init__.py b/checkers/__init__.py index 0da4dc4..916f95e 100644 --- a/checkers/__init__.py +++ b/checkers/__init__.py @@ -84,6 +84,8 @@ class BaseChecker(OptionsProviderMixIn): msgs = {} # reports issued by this checker reports = () + # mark this checker as enabled or not. + enabled = True def __init__(self, linter=None): """checker instances should have the linter as argument diff --git a/checkers/python3.py b/checkers/python3.py index d879355..51282de 100644 --- a/checkers/python3.py +++ b/checkers/python3.py @@ -36,7 +36,7 @@ def _check_dict_node(node): class Python3Checker(checkers.BaseChecker): __implements__ = interfaces.IAstroidChecker - + enabled = False name = 'python3' msgs = { @@ -362,6 +362,8 @@ class Python3Checker(checkers.BaseChecker): class Python3TokenChecker(checkers.BaseTokenChecker): __implements__ = interfaces.ITokenChecker name = 'python3' + enabled = False + msgs = { 'E1606': ('Use of long suffix', 'long-suffix', @@ -515,6 +515,11 @@ class PyLinter(OptionsManagerMixIn, MessagesHandlerMixIn, ReportsHandlerMixIn, self.msgs_store.register_messages(checker) checker.load_defaults() + # Register the checker, but disable all of its messages. + # TODO(cpopa): we should have a better API for this. + if not getattr(checker, 'enabled', True): + self.disable(checker.name) + def disable_noerror_messages(self): for msgcat, msgids in six.iteritems(self.msgs_store._msgs_by_category): if msgcat == 'E': diff --git a/test/unittest_lint.py b/test/unittest_lint.py index c96dcf7..e935c1b 100644 --- a/test/unittest_lint.py +++ b/test/unittest_lint.py @@ -478,6 +478,14 @@ class PyLinterTC(unittest.TestCase): self.assertIn('troppoptop.py', value) self.assertIn('fatal', value) + def test_python3_checker_disabled(self): + checker_names = [c.name for c in self.linter.prepare_checkers()] + self.assertNotIn('python3', checker_names) + + self.linter.set_option('enable', 'python3') + checker_names = [c.name for c in self.linter.prepare_checkers()] + self.assertIn('python3', checker_names) + class ConfigTC(unittest.TestCase): |