forked from gaqzi/flake8
-
Notifications
You must be signed in to change notification settings - Fork 0
A clone of flake8 that incorporates fixes from https://github.com/kevinw/pyflakes
License
brightwill/flake8
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a fork of https://bitbucket.org/tarek/flake8/src and it incorporates a fix that makes unused variables not unused if locals() is used from https://github.com/kevinw/pyflakes ====== Flake8 ====== Flake8 is a wrapper around these tools: - PyFlakes - pep8 - Ned's McCabe script Flake8 runs all tools by launching the single 'flake8' script, but ignores pep8 and PyFlakes extended options and just uses defaults. It displays the warnings in a per-file, merged output. It also adds a few features: - files that contains with this header are skipped:: # flake8: noqa - lines that contains a "# NOQA" comment at the end will not issue a warning. - a Mercurial hook. - a McCabe complexity checker. QuickStart ========== To run flake8 just invoke it against any directory or Python module:: $ flake8 coolproject coolproject/mod.py:1027: local variable 'errors' is assigned to but never used coolproject/mod.py:97: 'shutil' imported but unused coolproject/mod.py:729: redefinition of function 'readlines' from line 723 coolproject/mod.py:1028: local variable 'errors' is assigned to but never used coolproject/mod.py:625:17: E225 missing whitespace around operato The output of PyFlakes *and* pep8 is merged and returned. flake8 offers an extra option: --max-complexity, which will emit a warning if the McCabe complexityu of a function is higher that the value. By default it's deactivated:: $ bin/flake8 --max-complexity 12 flake8 coolproject/mod.py:97: 'shutil' imported but unused coolproject/mod.py:729: redefinition of function 'readlines' from line 723 coolproject/mod.py:1028: local variable 'errors' is assigned to but never used coolproject/mod.py:625:17: E225 missing whitespace around operator coolproject/mod.py:452:1: 'missing_whitespace_around_operator' is too complex (18) coolproject/mod.py:939:1: 'Checker.check_all' is too complex (12) coolproject/mod.py:1204:1: '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. Mercurial hook ============== To use the Mercurial hook on any *commit* or *qrefresh*, change your .hg/rc file like this:: [hooks] commit = python:flake8.run.hg_hook qrefresh = python:flake8.run.hg_hook [flake8] strict = 0 complexity = 12 If *strict* option is set to **1**, any warning will block the commit. When *strict* is set to **0**, warnings are just displayed in the standard output. *complexity* defines the maximum McCabe complexity allowed before a warning is emited. If you don't specify it it's just ignored. If specified, must be a positive value. 12 is usually a good value. Git hook ======== To use the Git hook on any *commit*, add a **pre-commit** file in the *.git/hooks* directory containing:: #!/usr/bin/python import sys from flake8.run import git_hook COMPLEXITY = 10 STRICT = False if __name__ == '__main__': sys.exit(git_hook(complexity=COMPLEXITY, strict=STRICT, ignore='E501')) If *strict* option is set to **True**, any warning will block the commit. When *strict* is set to **False** or omited, warnings are just displayed in the standard output. *complexity* defines the maximum McCabe complexity allowed before a warning is emited. If you don't specify it or set it to **-1**, it's just ignored. If specified, it must be a positive value. 12 is usually a good value. Also, make sure the file is executable and adapt the shebang line so it point to your python interpreter. Buildout integration ===================== In order to use Flake8 inside a buildout, edit your buildout.cfg and add this:: [buildout] parts += ... flake8 [flake8] recipe = zc.recipe.egg eggs = flake8 ${buildout:eggs} entry-points = flake8=flake8.run:main Original projects ================= Flake8 is just a glue project, all the merits go to the creators of the original projects: - pep8: http://github.com/jcrocholl/pep8/ - PyFlakes: http://divmod.org/trac/wiki/DivmodPyflakes - McCabe: http://nedbatchelder.com/blog/200803/python_code_complexity_microtool.html Warning / Error codes ===================== Below are lists of all warning and error codes flake8 will generate, broken out by component. pep8: - E101: indentation contains mixed spaces and tabs - E111: indentation is not a multiple of four - E112: expected an indented block - E113: unexpected indentation - E201: whitespace after char - E202: whitespace before char - E203: whitespace before char - E211: whitespace before text - E223: tab / multiple spaces before operator - E224: tab / multiple spaces after operator - E225: missing whitespace around operator - E225: missing whitespace around operator - E231: missing whitespace after char - E241: multiple spaces after separator - E242: tab after separator - E251: no spaces around keyword / parameter equals - E262: inline comment should start with '# ' - E301: expected 1 blank line, found 0 - E302: expected 2 blank lines, found <n> - E303: too many blank lines (<n>) - E304: blank lines found after function decorator - E401: multiple imports on one line - E501: line too long (<n> characters) - E701: multiple statements on one line (colon) - E702: multiple statements on one line (semicolon) - W191: indentation contains tabs - W291: trailing whitespace - W292: no newline at end of file - W293: blank line contains whitespace - W391: blank line at end of file - W601: .has_key() is deprecated, use 'in' - W602: deprecated form of raising exception - W603: '<>' is deprecated, use '!=' - W604: backticks are deprecated, use 'repr()' pyflakes: - W402: <module> imported but unused - W403: import <module> from line <n> shadowed by loop variable - W404: 'from <module> import ``*``' used; unable to detect undefined names - W405: future import(s) <name> after other statements - W801: redefinition of unused <name> from line <n> - W802: undefined name <name> - W803: undefined name <name> in __all__ - W804: local variable <name> (defined in enclosing scope on line <n>) referenced before assignment - W805: duplicate argument <name> in function definition - W806: redefinition of function <name> from line <n> - W806: local variable <name> is assigned to but never used McCabe: - W901: '<function_name>' is too complex ('<complexity_level>') CHANGES ======= 1.5 --- ??? 1.4 - 2012-07-12 ---------------- - git_hook: Only check staged changes for compliance - use pep8 1.2 1.3.1 - 2012-05-19 ------------------ - fixed support for Python 2.5 1.3 - 2012-03-12 ---------------- - fixed false W402 warning on exception blocks. 1.2 - 2012-02-12 ---------------- - added a git hook - now python 3 compatible - mccabe and pyflakes have warning codes like pep8 now 1.1 - 2012-02-14 ---------------- - fixed the value returned by --version - allow the flake8: header to be more generic - fixed the "hg hook raises 'physical lines'" bug - allow three argument form of raise - now uses setuptools if available, for 'develop' command 1.0 - 2011-11-29 ---------------- - Deactivates by default the complexity checker - Introduces the complexity option in the HG hook and the command line. 0.9 - 2011-11-09 ---------------- - update pep8 version to 0.6.1 - mccabe check: gracefully handle compile failure 0.8 - 2011-02-27 ---------------- - fixed hg hook - discard unexisting files on hook check 0.7 - 2010-02-18 ---------------- - Fix pep8 intialization when run through Hg - Make pep8 short options work when run throug the command line - skip duplicates when controlling files via Hg 0.6 - 2010-02-15 ---------------- - Fix the McCabe metric on some loops
About
A clone of flake8 that incorporates fixes from https://github.com/kevinw/pyflakes
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published