[flake8]

ignore =
  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
  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
  E501,  # line too long (> 79 characters)
  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
  F811,  # isn't aware of type-only imports, results in false-positives
  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
  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 (> 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 =
  .pyre,
  __pycache__,
  .tox,
  native,

max-complexity = 12

