summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Cordasco <graffatcolmingov@gmail.com>2016-10-26 11:39:07 +0000
committerIan Cordasco <graffatcolmingov@gmail.com>2016-10-26 11:39:07 +0000
commit185a073c296e2276597b564d31796e9cd38f7b93 (patch)
tree9391551fbafc5169a88cd7bc8dd0f81f11810448
parenta9e15afbf50b3181af45a64f5736d432731eb40d (diff)
parent68a273144e5bd24a8f88cbf61070ab020be00498 (diff)
downloadflake8-185a073c296e2276597b564d31796e9cd38f7b93.tar.gz
Merge branch 'example-project' into 'master'
Add an example plugin project to source tree Necessary to start investigating issue #239 See merge request !128
-rw-r--r--example-plugin/setup.py32
-rw-r--r--example-plugin/src/flake8_example_plugin/__init__.py9
-rw-r--r--example-plugin/src/flake8_example_plugin/off_by_default.py17
-rw-r--r--example-plugin/src/flake8_example_plugin/on_by_default.py15
-rw-r--r--src/flake8/style_guide.py5
-rw-r--r--tests/unit/test_style_guide.py27
6 files changed, 93 insertions, 12 deletions
diff --git a/example-plugin/setup.py b/example-plugin/setup.py
new file mode 100644
index 0000000..2da68f6
--- /dev/null
+++ b/example-plugin/setup.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+import setuptools
+
+setuptools.setup(
+ name='flake8-example-plugin',
+ license='MIT',
+ version='1.0.0',
+ description='Example plugin to Flake8',
+ author='Ian Cordasco',
+ author_email='graffatcolmingov@gmail.com',
+ url='https://gitlab.com/pycqa/flake8',
+ package_dir={'': 'src/'},
+ packages=['flake8_example_plugin'],
+ entry_points={
+ 'flake8.extension': [
+ 'X1 = flake8_example_plugin:ExampleOne',
+ 'X2 = flake8_example_plugin:ExampleTwo',
+ ],
+ },
+ classifiers=[
+ 'Framework :: Flake8',
+ 'License :: OSI Approved :: MIT License',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
+ 'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ 'Topic :: Software Development :: Quality Assurance',
+ ],
+)
diff --git a/example-plugin/src/flake8_example_plugin/__init__.py b/example-plugin/src/flake8_example_plugin/__init__.py
new file mode 100644
index 0000000..33d76f3
--- /dev/null
+++ b/example-plugin/src/flake8_example_plugin/__init__.py
@@ -0,0 +1,9 @@
+"""Module for an example Flake8 plugin."""
+
+from .on_by_default import ExampleOne
+from .off_by_default import ExampleTwo
+
+__all__ = (
+ 'ExampleOne',
+ 'ExampleTwo',
+)
diff --git a/example-plugin/src/flake8_example_plugin/off_by_default.py b/example-plugin/src/flake8_example_plugin/off_by_default.py
new file mode 100644
index 0000000..d768328
--- /dev/null
+++ b/example-plugin/src/flake8_example_plugin/off_by_default.py
@@ -0,0 +1,17 @@
+"""Our first example plugin."""
+
+
+class ExampleTwo(object):
+ """Second Example Plugin."""
+ name = 'off-by-default-example-plugin'
+ version = '1.0.0'
+
+ off_by_default = True
+
+ def __init__(self, tree):
+ self.tree = tree
+
+ def run(self):
+ """Do nothing."""
+ yield (1, 0, 'X200 The off-by-default plugin was enabled',
+ 'OffByDefaultPlugin')
diff --git a/example-plugin/src/flake8_example_plugin/on_by_default.py b/example-plugin/src/flake8_example_plugin/on_by_default.py
new file mode 100644
index 0000000..a324297
--- /dev/null
+++ b/example-plugin/src/flake8_example_plugin/on_by_default.py
@@ -0,0 +1,15 @@
+"""Our first example plugin."""
+
+
+class ExampleOne(object):
+ """First Example Plugin."""
+ name = 'on-by-default-example-plugin'
+ version = '1.0.0'
+
+ def __init__(self, tree):
+ self.tree = tree
+
+ def run(self):
+ """Do nothing."""
+ for message in []:
+ yield message
diff --git a/src/flake8/style_guide.py b/src/flake8/style_guide.py
index 4d8950c..739edd8 100644
--- a/src/flake8/style_guide.py
+++ b/src/flake8/style_guide.py
@@ -65,6 +65,7 @@ class StyleGuide(object):
self._selected = tuple(options.select)
self._extended_selected = tuple(options.extended_default_select)
self._ignored = tuple(options.ignore)
+ self._enabled_extensions = tuple(options.enable_extensions)
self._decision_cache = {}
self._parsed_diff = {}
@@ -81,10 +82,10 @@ class StyleGuide(object):
Ignored.Implicitly if the selected list is not empty but no match
was found.
"""
- if not self._selected:
+ if not (self._selected or self._enabled_extensions):
return Selected.Implicitly
- if code.startswith(self._selected):
+ if code.startswith(self._selected + self._enabled_extensions):
return Selected.Explicitly
# If it was not explicitly selected, it may have been implicitly
diff --git a/tests/unit/test_style_guide.py b/tests/unit/test_style_guide.py
index 8e714b7..f642820 100644
--- a/tests/unit/test_style_guide.py
+++ b/tests/unit/test_style_guide.py
@@ -15,6 +15,7 @@ def create_options(**kwargs):
kwargs.setdefault('extended_default_select', [])
kwargs.setdefault('ignore', [])
kwargs.setdefault('disable_noqa', False)
+ kwargs.setdefault('enable_extensions', [])
return optparse.Values(kwargs)
@@ -50,18 +51,24 @@ def test_is_user_ignored_implicitly_selects_errors(ignore_list, error_code):
assert guide.is_user_ignored(error_code) is style_guide.Selected.Implicitly
-@pytest.mark.parametrize('select_list,error_code', [
- (['E111', 'E121'], 'E111'),
- (['E111', 'E121'], 'E121'),
- (['E11', 'E12'], 'E121'),
- (['E2', 'E12'], 'E121'),
- (['E2', 'E12'], 'E211'),
+@pytest.mark.parametrize('select_list,enable_extensions,error_code', [
+ (['E111', 'E121'], [], 'E111'),
+ (['E111', 'E121'], [], 'E121'),
+ (['E11', 'E12'], [], 'E121'),
+ (['E2', 'E12'], [], 'E121'),
+ (['E2', 'E12'], [], 'E211'),
+ (['E1'], ['E2'], 'E211'),
+ ([], ['E2'], 'E211'),
])
-def test_is_user_selected_selects_errors(select_list, error_code):
+def test_is_user_selected_selects_errors(select_list, enable_extensions,
+ error_code):
"""Verify we detect users explicitly selecting an error."""
- guide = style_guide.StyleGuide(create_options(select=select_list),
- listener_trie=None,
- formatter=None)
+ guide = style_guide.StyleGuide(
+ options=create_options(select=select_list,
+ enable_extensions=enable_extensions),
+ listener_trie=None,
+ formatter=None,
+ )
assert (guide.is_user_selected(error_code) is
style_guide.Selected.Explicitly)