diff --git a/bears/python/PyFlakesBear.py b/bears/python/PyFlakesBear.py new file mode 100644 index 0000000000..17efc977d9 --- /dev/null +++ b/bears/python/PyFlakesBear.py @@ -0,0 +1,30 @@ +from coalib.bearlib.abstractions.Linter import linter +from coalib.bears.requirements.PipRequirement import PipRequirement +from coalib.results.RESULT_SEVERITY import RESULT_SEVERITY + + +@linter(executable='pyflakes', + use_stderr=True, + output_format='regex', + output_regex=r'(?P.*):(?P\d+):' + r'[(?P\d*):|?]*(?P)\s(?P.*)\n', + severity_map={ + '': RESULT_SEVERITY.INFO + }) +class PyFlakesBear: + """ + Checks Python files for errors using ``pyflakes``. + + See https://github.com/PyCQA/pyflakes for more info. + """ + LANGUAGES = {'Python', 'Python 3'} + REQUIREMENTS = {PipRequirement('pyflakes', '1.2.*')} + AUTHORS = {'The coala developers'} + AUTHORS_EMAILS = {'coala-devel@googlegroups.com'} + LICENSE = 'AGPL-3.0' + ASCIINEMA_URL = 'https://asciinema.org/a/92503' + CAN_DETECT = {'Syntax', 'Unused Code', 'Undefined Element'} + + @staticmethod + def create_arguments(filename, file, config_file): + return filename, diff --git a/requirements.txt b/requirements.txt index c240b76648..15c56adf4f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,6 +26,7 @@ pyyaml~=3.12 vulture~=0.10 bandit~=1.2 nbformat>=4.1 +pyflakes~=1.2.0 scspell3k~=2.0 mypy-lang~=0.4 rstcheck~=2.2 diff --git a/tests/python/PyFlakesBearTest.py b/tests/python/PyFlakesBearTest.py new file mode 100644 index 0000000000..0f1220223d --- /dev/null +++ b/tests/python/PyFlakesBearTest.py @@ -0,0 +1,15 @@ +from bears.python.PyFlakesBear import PyFlakesBear +from tests.LocalBearTestHelper import verify_local_bear + +good_file = """ +print("Hi") +""" + +bad_file = """ +import os +print("Hi") +""" + +PyFlakesBear = verify_local_bear(PyFlakesBear, + valid_files=(good_file,), + invalid_files=(bad_file,))