diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..25a70664 --- /dev/null +++ b/.flake8 @@ -0,0 +1,131 @@ +[flake8] + +ignore = + T400,T484,T499 # can't prevent flake8-mypy from running, but we can ignore it + P209, # is about @csrf_protect, we have @performs_writes instead + B001, # Do not use bare except:, IG90 will catch this. + C407, # unnecessary list comprehension; A generator only better than a list + # comprehension if we don't always need to iterate through all items in + # the generator (based on the use case). + + # The following codes belong to pycodestyle, and overlap with black: + E101, # indentation contains mixed spaces and tabs; is subset of TXT2 (Tab + # Literal). + E111, # indentation is not a multiple of four + E112, # expected an indented block + E113, # unexpected indentation + E114, # indentation is not a multiple of four (comment) + E115, # expected an indented block (comment) + E116, # unexpected indentation (comment) + E121, # continuation line under-indented for hanging indent + E122, # continuation line missing indentation or outdented + E123, # closing bracket does not match indentation of opening bracket’s line + E124, # closing bracket does not match visual indentation + E125, # continuation line with same indent as next logical line + E126, # continuation line over-indented for hanging indent + E127, # continuation line over-indented for visual indent; is harmless + # (over-indent is visually unambiguous) and currently generates too + # many warnings for existing code. + E128, # continuation line under-indented for visual indent + E129, # visually indented line with same indent as next logical line + E131, # continuation line unaligned for hanging indent + E133, # closing bracket is missing indentation + E201, # whitespace after ‘(‘ + E202, # whitespace before ‘)’ + E203, # whitespace before ‘:’; this warning is invalid for slices + E211, # whitespace before ‘(‘ + E221, # multiple spaces before operator + E222, # multiple spaces after operator + E223, # tab before operator + E224, # tab after operator + E225, # missing whitespace around operator + E226, # missing whitespace around arithmetic operator + E227, # missing whitespace around bitwise or shift operator + E228, # missing whitespace around modulo operator + E231, # missing whitespace after ‘,’, ‘;’, or ‘:’ + E241, # multiple spaces after ‘,’ + E242, # tab after ‘,’ + E251, # unexpected spaces around keyword / parameter equals + E261, # at least two spaces before inline comment + E262, # inline comment should start with ‘# ‘ + E265, # block comment should start with ‘# ‘ + E266, # too many leading ‘#’ for block comment + E271, # multiple spaces after keyword + E272, # multiple spaces before keyword + E273, # tab after keyword + E274, # tab before keyword + E275, # missing whitespace after keyword + E301, # expected 1 blank line, found 0 + E302, # expected 2 blank lines, found 0 + E303, # too many blank lines (3) + E304, # blank lines found after function decorator + E305, # expected 2 blank lines after end of function or class + E306, # expected 1 blank line before a nested definition + E401, # multiple imports on one line + E402, # module level import not at top of file; warns on imports coming after + # statements. There are important use cases like demandimport + # (https://fburl.com/demandimport) that require statements before + # imports. + E501, # line too long (82 > 79 characters); is same as TXT3 (Line Too Long). + E502, # the backslash is redundant between brackets + E701, # multiple statements on one line (colon) + E702, # multiple statements on one line (semicolon) + E703, # statement ends with a semicolon + E704, # multiple statements on one line (def) + # These are pycodestyle lints that black doesn't catch: + # E711, # comparison to None should be ‘if cond is None:’ + # E712, # comparison to True should be ‘if cond is True:’ or ‘if cond:’ + # E713, # test for membership should be ‘not in’ + # E714, # test for object identity should be ‘is not’ + # E721, # do not compare types, use ‘isinstance()’ + # E722, # do not use bare except, specify exception instead + # E731, # do not assign a lambda expression, use a def + # E741, # do not use variables named ‘l’, ‘O’, or ‘I’ + # E742, # do not define classes named ‘l’, ‘O’, or ‘I’ + # E743, # do not define functions named ‘l’, ‘O’, or ‘I’ + # I think these are internal to pycodestyle? + # E901, # SyntaxError or IndentationError + # E902, # IOError + W191, # indentation contains tabs + W291, # trailing whitespace; is same as TXT6 (Trailing Whitespace). + W292, # no newline at end of file; is same as TXT4 (File Does Not End in + # Newline). + W293, # blank line contains whitespace; is same as TXT6 (Trailing + # Whitespace). + W391, # blank line at end of file; is same as TXT9 (Trailing Whitespace at + # End of File). + W503, # line break before binary operator; binary operator in a new line is + # the standard + W504, # line break after binary operator + W505, # not part of PEP8; doc line too long (82 > 79 characters) + # These are pycodestyle lints that black doesn't catch: + # W601, # .has_key() is deprecated, use ‘in’ + # W602, # deprecated form of raising exception + # W603, # ‘<>’ is deprecated, use ‘!=’ + # W604, # backticks are deprecated, use ‘repr()’ + # W605, # invalid escape sequence ‘x’ + # W606, # ‘async’ and ‘await’ are reserved keywords starting with Python 3.7 + +# We should've silenced all of Flake8's line-length related lints, in favor of +# Black. However, let's just set this to a large value just to be safe, in case +# we accidentally left in a line-length related lint rule. If we don't set +# anything, it defaults to 79, which is also wrong. +max-line-length = 999 + +exclude = + # version control + .svn, + CVS, + .bzr, + .hg, + .git, + # caches and environment + __pycache__, + .tox, + .eggs, + *.egg, + # Thrift-generated files + ttypes.py + +max-complexity = 12 + diff --git a/tox.ini b/tox.ini index e657705e..3a08fd9c 100644 --- a/tox.ini +++ b/tox.ini @@ -2,4 +2,8 @@ envlist = py36, py37 [testenv] -commands = python -m unittest +deps = flake8 +commands = + python -m unittest + flake8 +