diff options
| author | Ian Cordasco <graffatcolmingov@gmail.com> | 2015-09-27 09:45:35 -0500 |
|---|---|---|
| committer | Ian Cordasco <graffatcolmingov@gmail.com> | 2015-09-27 10:08:23 -0500 |
| commit | 96cb23e2e786ca1afa171c3e20692dedefbf2944 (patch) | |
| tree | 4327302089bdc17494823d8edaabc2da37ed24f4 | |
| parent | 5b7dc3927aa4000091847cf15dc641adc7503d74 (diff) | |
| download | flake8-bug/67.tar.gz | |
Add --enable-extensions flag to Flake8bug/67
This new flag is added so that off-by-default extensions can be enabled
without using --select which (currently) causes several problems with
pep8's rule engine. This also adds support to the --enable-extensions
flag to be specified as a multi-line config option in an appropriate
config file.
Closes GitLab #67
| -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') |
