Index: flake8-abp/setup.py |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/flake8-abp/setup.py |
@@ -0,0 +1,127 @@ |
+# This file is part of Adblock Plus <https://adblockplus.org/>, |
+# Copyright (C) 2006-2016 Eyeo GmbH |
+# |
+# Adblock Plus is free software: you can redistribute it and/or modify |
+# it under the terms of the GNU General Public License version 3 as |
+# published by the Free Software Foundation. |
+# |
+# Adblock Plus is distributed in the hope that it will be useful, |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+# GNU General Public License for more details. |
+# |
+# You should have received a copy of the GNU General Public License |
+# along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+from __future__ import print_function |
+ |
+import os |
+import glob |
+import tokenize |
+import sys |
+import re |
+ |
+try: |
+ from StringIO import StringIO |
+except ImportError: |
+ from io import StringIO |
+ |
+from setuptools import setup, Command |
+ |
+ |
+class TestCommand(Command): |
+ user_options = [] |
+ |
+ def _get_expected_errors(self, filename): |
+ errors = set() |
+ |
+ def tokeneater(kind, token, start, end, line): |
+ if kind == tokenize.COMMENT: |
+ match = re.search(r'^#+[*\s]*(A\d+)', token) |
+ if match: |
+ try: |
+ offset = token.index('*') |
+ except ValueError: |
+ offset = 0 |
+ errors.add((start[0] + 1, |
+ start[1] + 1 + offset, |
+ match.group(1))) |
+ |
+ with open(filename, 'rb') as file: |
+ if sys.version_info[0] >= 3: |
+ for token in tokenize.tokenize(file.readline): |
+ tokeneater(*token) |
+ else: |
+ tokenize.tokenize(file.readline, tokeneater) |
+ |
+ return errors |
+ |
+ def _get_reported_errors(self, filename, style_guide): |
+ orig_stdout = sys.stdout |
+ sys.stdout = stdout = StringIO() |
+ |
+ try: |
+ style_guide.check_files([filename]) |
+ finally: |
+ sys.stdout = orig_stdout |
+ |
+ stdout.seek(0) |
+ errors = set() |
+ |
+ for line in stdout: |
+ _, lineno, colno, error = line.split(':', 3) |
+ errors.add((int(lineno), int(colno), error.split()[0])) |
+ |
+ return errors |
+ |
+ def initialize_options(self): |
+ pass |
+ |
+ def finalize_options(self): |
+ pass |
+ |
+ def run(self): |
+ import flake8.engine |
+ |
+ directory = os.path.dirname(__file__) |
+ filenames = glob.glob(os.path.join(directory, 'tests', '*.py')) |
+ style_guide = flake8.engine.get_style_guide() |
+ failed = False |
+ |
+ for filename in sorted(filenames): |
+ expected = self._get_expected_errors(filename) |
+ reported = self._get_reported_errors(filename, style_guide) |
+ failures = expected ^ reported |
+ |
+ if not failures: |
+ print(filename + ': OK') |
+ continue |
+ |
+ for record in sorted(failures): |
+ lineno, colno, error = record |
+ |
+ print('{}:{}:{}: '.format(filename, lineno, colno), end='') |
+ if record in expected: |
+ print(error + ' expected') |
+ else: |
+ print('unexpected ' + error) |
+ |
+ failed = True |
+ |
+ if failed: |
+ sys.exit(1) |
+ |
+ |
+setup( |
+ name='flake8-abp', |
+ version='0.1', |
+ py_modules=['flake8_abp'], |
+ entry_points={ |
+ 'flake8.extension': [ |
+ 'AXXX = flake8_abp:ASTChecker', |
+ 'A109-A110 = flake8_abp:check_quotes', |
+ 'A111 = flake8_abp:check_redundant_parenthesis', |
+ 'A303 = flake8_abp:check_non_default_encoding', |
+ ], |
+ }, |
+ cmdclass={'test': TestCommand} |
+) |