| 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} |
| +) |