diff options
| -rw-r--r-- | flake8/engine.py | 31 | ||||
| -rw-r--r-- | flake8/tests/test_engine.py | 12 |
2 files changed, 37 insertions, 6 deletions
diff --git a/flake8/engine.py b/flake8/engine.py index 4763b5a..095f6d2 100644 --- a/flake8/engine.py +++ b/flake8/engine.py @@ -78,6 +78,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 @@ -166,17 +171,31 @@ 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', [])) - select = set(options.select) + enabled = set(_parse_multi_options(options.enabled_extensions)) - enabled_extensions = ignored_extensions.intersection(select) # Remove any of the selected extensions from the extensions ignored by # default. - ignored_extensions -= select - - for extension in enabled_extensions: - options.select.remove(extension) + ignored_extensions -= enabled # Whatever is left afterwards should be unioned with options.ignore and # options.ignore should be updated with that. diff --git a/flake8/tests/test_engine.py b/flake8/tests/test_engine.py index a6faab5..d7a5dc7 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') |
