summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <cpopa@cloudbasesolutions.com>2014-11-16 14:40:00 +0200
committerClaudiu Popa <cpopa@cloudbasesolutions.com>2014-11-16 14:40:00 +0200
commit62e61f55d3053fe5d50f8f1029d234bc7046911b (patch)
treea0b0df9c1addd57239f99900de8a4bd8c60111ff
parentedac048269da24c085dbab79c0cebd52d8474298 (diff)
downloadpylint-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--ChangeLog3
-rw-r--r--checkers/__init__.py2
-rw-r--r--checkers/python3.py4
-rw-r--r--lint.py5
-rw-r--r--test/unittest_lint.py8
5 files changed, 21 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e96c652..c07f9c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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',
diff --git a/lint.py b/lint.py
index 193a514..3fb059a 100644
--- a/lint.py
+++ b/lint.py
@@ -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):