summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Cordasco <graffatcolmingov@gmail.com>2015-09-27 09:45:35 -0500
committerIan Cordasco <graffatcolmingov@gmail.com>2015-09-27 10:08:23 -0500
commit96cb23e2e786ca1afa171c3e20692dedefbf2944 (patch)
tree4327302089bdc17494823d8edaabc2da37ed24f4
parent5b7dc3927aa4000091847cf15dc641adc7503d74 (diff)
downloadflake8-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.py31
-rw-r--r--flake8/tests/test_engine.py12
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')