[flake8]

select =
    # Full lists are given in order to suppress all errors from other plugins
    # Full list of pyflakes error codes:
    # module imported but unused
    F401,
    # import module from line N shadowed by loop variable
    F402,
    # 'from module import *' used; unable to detect undefined names
    F403,
    # future import(s) name after other statements
    F404,
    # name may be undefined, or defined from star imports: module
    F405,
    # 'from module import *' only allowed at module level
    F406,
    # an undefined __future__ feature name was imported
    F407,
    # dictionary key name repeated with different values
    F601,
    # dictionary key variable name repeated with different values
    F602,
    # too many expressions in an assignment with star-unpacking
    F621,
    # two or more starred expressions in an assignment (a, *b, *c = d)
    F622,
    # assertion test is a tuple, which are always True
    F631,
    # a break statement outside of a while or for loop
    F701,
    # a continue statement outside of a while or for loop
    F702,
    # a continue statement in a finally block in a loop
    F703,
    # a yield or yield from statement outside of a function
    F704,
    # a return statement with arguments inside a generator
    F705,
    # a return statement outside of a function/method
    F706,
    # an except: block as not the last exception handler
    F707,
    # doctest syntax error syntax error in forward type annotation
    F721, F722,
    # redefinition of unused name from line N
    F811,
    # list comprehension redefines name from line N
    F812,
    # undefined name name
    F821,
    # undefined name name in __all__
    F822,
    # local variable name referenced before assignment
    F823,
    # duplicate argument name in function definition
    F831,
    # local variable name is assigned to but never used
    F841,
    # raise NotImplemented should be raise NotImplementedError
    F901,

    # Full list of pycodestyle violations:
    # indentation contains mixed spaces and tabs
    E101,
    # indentation is not a multiple of four
    E111,
    # expected an indented block
    E112,
    # unexpected indentation
    E113,
    # indentation is not a multiple of four (comment)
    E114,
    # expected an indented block (comment)
    E115,
    # unexpected indentation (comment)
    E116,
    # continuation line under-indented for hanging indent
    E121,
    # continuation line missing indentation or outdented
    E122,
    # closing bracket does not match indentation of opening bracket's line
    E123,
    # closing bracket does not match visual indentation
    E124,
    # continuation line with same indent as next logical line
    E125,
    # continuation line over-indented for hanging indent
    E126,
    # continuation line over-indented for visual indent
    E127,
    # continuation line under-indented for visual indent
    E128,
    # visually indented line with same indent as next logical line
    E129,
    # continuation line unaligned for hanging indent
    E131,
    # closing bracket is missing indentation
    E133,
    # whitespace after '('
    E201,
    # whitespace before ')'
    E202,
    # whitespace before ':'
    E203,
    # whitespace before '('
    E211,
    # multiple spaces before operator
    E221,
    # multiple spaces after operator
    E222,
    # tab before operator
    E223,
    # tab after operator
    E224,
    # missing whitespace around operator
    E225,
    # missing whitespace around arithmetic operator
    E226,
    # missing whitespace around bitwise or shift operator
    E227,
    # missing whitespace around modulo operator
    E228,
    # missing whitespace after ',', ';', or ':'
    E231,
    # multiple spaces after ','
    E241,
    # tab after ','
    E242,
    # unexpected spaces around keyword / parameter equals
    E251,
    # at least two spaces before inline comment
    E261,
    # inline comment should start with '# '
    E262,
    # block comment should start with '# '
    E265,
    # too many leading '#' for block comment
    E266,
    # multiple spaces after keyword
    E271,
    # multiple spaces before keyword
    E272,
    # tab after keyword
    E273,
    # tab before keyword
    E274,
    # missing whitespace after keyword
    E275,
    # expected 1 blank line, found 0
    E301,
    # expected 2 blank lines, found 0
    E302,
    # too many blank lines
    E303,
    # blank lines found after function decorator
    E304,
    # expected 2 blank lines after end of function or class
    E305,
    # expected 1 blank line before a nested definition
    E306,
    # multiple imports on one line
    E401,
    # module level import not at top of file
    E402,
    # line too long (82 > 79 characters)
    E501,
    # the backslash is redundant between brackets
    E502,
    # multiple statements on one line (colon)
    E701,
    # multiple statements on one line (semicolon)
    E702,
    # statement ends with a semicolon
    E703,
    # multiple statements on one line (def)
    E704,
    # comparison to None should be 'if cond is None:'
    E711,
    # comparison to True should be 'if cond is True:' or 'if cond:'
    E712,
    # test for membership should be 'not in'
    E713,
    # test for object identity should be 'is not'
    E714,
    # do not compare types, use 'isinstance()'
    E721,
    # do not use bare except, specify exception instead
    E722,
    # do not assign a lambda expression, use a def
    E731,
    # do not use variables named 'l', 'O', or 'I'
    E741,
    # do not define classes named 'l', 'O', or 'I'
    E742,
    # do not define functions named 'l', 'O', or 'I'
    E743,
    # SyntaxError or IndentationError
    E901,
    # IOError
    E902,
    # indentation contains tabs
    W191,
    # trailing whitespace
    W291,
    # no newline at end of file
    W292,
    # blank line contains whitespace
    W293,
    # blank line at end of file
    W391,
    # line break before binary operator
    W503,
    # line break after binary operator
    W504,
    # doc line too long (82 > 79 characters)
    W505,
    # .has_key() is deprecated, use 'in'
    W601,
    # deprecated form of raising exception
    W602,
    # '<>' is deprecated, use '!='
    W603,
    # backticks are deprecated, use 'repr()'
    W604,
    # invalid escape sequence 'x'
    W605,
    # 'async' and 'await' are reserved keywords starting with Python 3.7
    W606,

    # Full list of flake8 violations
    # failed to compile a file into an Abstract Syntax Tree for the plugins that require it
    E999,

    # Full list of mccabe violations
    # complexity value provided by the user
    C901

ignore =
    # multiple spaces before operator
    E221,
    # missing whitespace after ',', ';', or ':'
    E231,
    # multiple spaces after ','
    E241,
    # line break before binary operator
    W503,
    # line break after binary operator
    W504

max-line-length = 160

show_source = True

statistics = True

exclude =
    .git,
    __pycache__,
    # submodules
        components/bootloader/subproject/components/micro-ecc/micro-ecc,
        components/bt/host/nimble/nimble,
        components/cmock/CMock,
        components/json/cJSON,
        components/mbedtls/mbedtls,
        components/openthread/openthread,
        components/unity/unity,
        components/spiffs/spiffs,
    # autogenerated scripts
        components/protocomm/python/constants_pb2.py,
        components/protocomm/python/sec0_pb2.py,
        components/protocomm/python/sec1_pb2.py,
        components/protocomm/python/sec2_pb2.py,
        components/protocomm/python/session_pb2.py,
        components/wifi_provisioning/python/wifi_ctrl_pb2.py,
        components/wifi_provisioning/python/wifi_scan_pb2.py,
        components/wifi_provisioning/python/wifi_config_pb2.py,
        components/wifi_provisioning/python/wifi_constants_pb2.py,
        components/esp_local_ctrl/python/esp_local_ctrl_pb2.py,

per-file-ignores =
    # Sphinx conf.py files use star imports to setup config variables
        docs/conf_common.py: F405
