flake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code. https://flake8.pycqa.org
Find a file
Ian Cordasco 6536f2285d Merge branch 'tox_remove_py25' into 'master'
Tox remove py25

Now maybe py25 is important to support and maybe you have a CI process that installs some older version of tox so that you can test Python 2.5, in which case you can close this, though if that's the case then maybe we should make a note of that fact and what version of tox to use, etc.

See merge request !22
2015-03-08 02:24:17 +00:00
bin Update this to deal with Marc and Bruno's names 2013-05-21 23:37:35 -04:00
docs Use the default ReadTheDocs theme 2015-02-22 22:37:13 -06:00
flake8 Merge branch 'christianmlong/issue/8' 2015-03-07 20:22:11 -06:00
.gitignore Add a .gitignore file 2014-10-14 13:15:33 -07:00
.hgignore Ignore ./.tox directory 2014-03-30 23:54:36 +02:00
.hgtags Release v2.2.3 2014-08-25 19:03:13 -05:00
.travis.yml Add configuration so Travis will run on our mirror 2014-12-17 18:55:24 -06:00
CHANGES.rst Add notes for updates to git hook 2015-03-06 20:55:25 -06:00
CONTRIBUTORS.txt Add option parsing to setuptools integration 2013-04-17 10:33:08 -04:00
dev-requirements.txt Re-add mock since I forgot it was actively being used 2013-10-12 21:29:19 -05:00
LICENSE Remove broken and useless tests. Update LICENSE 2013-07-04 13:46:28 -04:00
MANIFEST.in Fix recursive-include pattern in MANIFEST.in 2013-03-29 19:19:21 -04:00
README.rst we want those links in the doc 2013-06-19 11:48:22 +02:00
run_tests.py Start new tests 2013-07-04 13:47:01 -04:00
setup.cfg Add setup.cfg to support the wheel format 2014-04-27 00:27:56 +02:00
setup.py Update release notes, dependencies, and version 2015-02-22 12:13:30 -06:00
tox.ini Merge branch 'tox_remove_py25' into 'master' 2015-03-08 02:24:17 +00:00

======
Flake8
======

Flake8 is a wrapper around these tools:

- PyFlakes
- pep8
- Ned Batchelder's McCabe script

Flake8 runs all the tools by launching the single ``flake8`` script.
It displays the warnings in a per-file, merged output.

It also adds a few features:

- files that contain this line are skipped::

    # flake8: noqa

- lines that contain a ``# noqa`` comment at the end will not issue warnings.
- a Git and a Mercurial hook.
- a McCabe complexity checker.
- extendable through ``flake8.extension`` entry points.


QuickStart
==========

::

    pip install flake8

To run flake8 just invoke it against any directory or Python module::

    $ flake8 coolproject
    coolproject/mod.py:97:1: F401 'shutil' imported but unused
    coolproject/mod.py:625:17: E225 missing whitespace around operato
    coolproject/mod.py:729:1: F811 redefinition of function 'readlines' from line 723
    coolproject/mod.py:1028:1: F841 local variable 'errors' is assigned to but never used

The outputs of PyFlakes *and* pep8 (and the optional plugins) are merged
and returned.

flake8 offers an extra option: --max-complexity, which will emit a warning if
the McCabe complexity of a function is higher than the value.  By default it's
deactivated::

    $ flake8 --max-complexity 12 coolproject
    coolproject/mod.py:97:1: F401 'shutil' imported but unused
    coolproject/mod.py:625:17: E225 missing whitespace around operator
    coolproject/mod.py:729:1: F811 redefinition of unused 'readlines' from line 723
    coolproject/mod.py:939:1: C901 'Checker.check_all' is too complex (12)
    coolproject/mod.py:1028:1: F841 local variable 'errors' is assigned to but never used
    coolproject/mod.py:1204:1: C901 'selftest' is too complex (14)

This feature is quite useful to detect over-complex code.  According to McCabe,
anything that goes beyond 10 is too complex.
See https://en.wikipedia.org/wiki/Cyclomatic_complexity.

Questions or Feedback
=====================

If you have questions you'd like to ask the developers, or feedback you'd like
to provide, feel free to use the mailing list: code-quality@python.org We
would love to hear from you. Additionally, if you have a feature you'd like to
suggest, the mailing list would be the best place for it.

.. _links:

Links
=====

* `flake8 documentation <http://flake8.readthedocs.org/en/latest/>`_

* `pep8 documentation <http://pep8.readthedocs.org/en/latest/>`_