diff --git a/flake8/engine.py b/flake8/engine.py index 6587667..cfdc269 100644 --- a/flake8/engine.py +++ b/flake8/engine.py @@ -98,6 +98,11 @@ def get_parser(): help='Redirect report to a file.', type='string', nargs=1, action='callback', callback=callbacks.redirect_stdout) + parser.add_option('--enable-extensions', default='', + dest='enabled_extensions', + help='Enable plugins and extensions that are disabled ' + 'by default', + type='string') parser.ignored_extensions = ignored return parser, options_hooks @@ -186,11 +191,32 @@ class StyleGuide(object): ) +def _parse_multi_options(options, split_token=','): + r"""Split and strip and discard empties. + + Turns the following: + + A, + B, + + into ["A", "B"]. + + Credit: Kristian Glass as contributed to pep8 + """ + if options: + return [o.strip() for o in options.split(split_token) if o.strip()] + else: + return options + + def _disable_extensions(parser, options): ignored_extensions = set(getattr(parser, 'ignored_extensions', [])) + enabled = set(_parse_multi_options(options.enabled_extensions)) + # Remove any of the selected extensions from the extensions ignored by # default. - ignored_extensions -= set(options.select) + ignored_extensions -= enabled + # Whatever is left afterwards should be unioned with options.ignore and # options.ignore should be updated with that. options.ignore = tuple(ignored_extensions.union(options.ignore)) diff --git a/flake8/tests/test_engine.py b/flake8/tests/test_engine.py index f6c0e5e..2afabbb 100644 --- a/flake8/tests/test_engine.py +++ b/flake8/tests/test_engine.py @@ -56,6 +56,18 @@ class TestEngine(unittest.TestCase): self.assertTrue(isinstance(i, list)) self.assertTrue(register_check.called) + def test_disable_extensions(self): + parser = mock.MagicMock() + options = mock.MagicMock() + + parser.ignored_extensions = ['I123', 'I345', 'I678', 'I910'] + + options.enabled_extensions = 'I345,\nI678,I910' + options.ignore = ('E121', 'E123') + + engine._disable_extensions(parser, options) + self.assertEqual(set(options.ignore), set(['E121', 'E123', 'I123'])) + def test_get_parser(self): # setup re = self.start_patch('flake8.engine._register_extensions')