[flake8]

# Print the total number of errors:
count = true

# Don't even try to analyze these:
extend-exclude =
  # Circle CI configs
  .circleci,
  # No need to traverse egg info dir
  *.egg-info,
  # GitHub configs
  .github,
  # Cache files of MyPy
  .mypy_cache,
  # Cache files of pytest
  .pytest_cache,
  # Temp dir of pytest-testmon
  .tmontmp,
  # Occasional virtualenv dir
  .venv
  # VS Code
  .vscode,
  # Temporary build dir
  build,
  # This contains sdists and wheels of cheroot that we don't want to check
  dist,
  # Metadata of `pip wheel` cmd is autogenerated
  pip-wheel-metadata,

# IMPORTANT: avoid using ignore option, always use extend-ignore instead
# Completely and unconditionally ignore the following errors:
extend-ignore =
  # Legitimate cases, no need to "fix" these violations:
  # E501: "line too long", its function is replaced by `flake8-length`
  E501,
  # W505: "doc line too long", its function is replaced by `flake8-length`
  W505,
  # I: flake8-isort is drunk + we have isort integrated into pre-commit
  I,
  # WPS305: "Found f string" -- nothing bad about this
  WPS305,
  # WPS326: "Found implicit string concatenation" -- nothing bad about this
  WPS326,

  # FIXME: These `flake8-annotations` errors need fixing and removal
  # ANN001: Missing type annotation for function argument 'argv'
  ANN001,
  # ANN002: Missing type annotation for *exceptions
  ANN002,
  # ANN003: Missing type annotation for **kwargs
  ANN003,
  # ANN101: Missing type annotation for self in method
  ANN101,
  # ANN102: Missing type annotation for cls in classmethod
  ANN102,
  # ANN201: Missing return type annotation for public function
  ANN201,
  # ANN202: Missing return type annotation for protected function
  ANN202,
  # ANN204: Missing return type annotation for special method
  ANN204,
  # ANN205: Missing return type annotation for staticmethod
  ANN205,
  # ANN206: Missing return type annotation for classmethod
  ANN206,

  # FIXME: These `flake8-spellcheck` errors need fixing and removal
  # SC100: Possibly misspelt word / comments
  SC100,
  # SC200: Possibly misspelt word / names
  SC200,

# https://wemake-python-stylegui.de/en/latest/pages/usage/formatter.html
#format = wemake

# Let's not overcomplicate the code:
max-complexity = 10

# Accessibility/large fonts and PEP8 friendly:
max-line-length = 79

# Allow certain violations in certain files:
per-file-ignores =
  # There are multiple `assert`s (S101)
  # and subprocesses (import – S404; call – S603) in tests:
  cheroot/test/test_*.py: S101, S404, S603

  # WPS102 Found incorrect module name pattern
  # This is not a regular module but a standalone script:
  bin/pip-wrapper: WPS102

  # FIXME:
  cheroot/__init__.py: I003, WPS100, WPS412, WPS420, WPS422, WPS433
  cheroot/__main__.py: WPS130, WPS300
  cheroot/_compat.py: DAR101, DAR201, DAR301, DAR401, I003, RST304, WPS100, WPS111, WPS123, WPS125, WPS226, WPS229, WPS322, WPS323, WPS420, WPS422, WPS428, WPS432, WPS433, WPS434, WPS440, WPS462, WPS504, WPS505
  cheroot/cli.py: DAR101, DAR201, DAR401, I001, I004, I005, WPS100, WPS110, WPS120, WPS130, WPS202, WPS226, WPS229, WPS300, WPS306, WPS326, WPS338, WPS420, WPS421, WPS428, WPS436, WPS437
  cheroot/connections.py: DAR101, DAR201, DAR301, DAR401, I001, I003, I004, I005, RST304, S104, WPS100, WPS110, WPS111, WPS121, WPS122, WPS130, WPS201, WPS210, WPS212, WPS214, WPS220, WPS229, WPS231, WPS300, WPS301, WPS306, WPS317, WPS318, WPS323, WPS324, WPS326, WPS337, WPS338, WPS420, WPS421, WPS422, WPS432, WPS433, WPS436, WPS437, WPS440, WPS501, WPS504, WPS505, WPS526
  cheroot/errors.py: DAR101, DAR201, I003, RST304, WPS111, WPS121, WPS317, WPS422, WPS428, WPS462
  cheroot/makefile.py: DAR101, DAR201, DAR401, E800, I003, I004, N801, N802, S101, WPS100, WPS110, WPS111, WPS117, WPS120, WPS121, WPS122, WPS123, WPS130, WPS204, WPS210, WPS212, WPS213, WPS220, WPS229, WPS231, WPS232, WPS300, WPS306, WPS323, WPS338, WPS420, WPS422, WPS429, WPS431, WPS433, WPS436, WPS437, WPS440, WPS503, WPS504, WPS604, WPS606, WPS609
  cheroot/server.py: DAR003, DAR101, DAR201, DAR202, DAR301, DAR401, E800, I001, I003, I004, I005, N806, RST201, RST301, RST303, RST304, WPS100, WPS110, WPS111, WPS115, WPS120, WPS121, WPS122, WPS125, WPS130, WPS132, WPS201, WPS202, WPS204, WPS210, WPS211, WPS212, WPS213, WPS214, WPS220, WPS221, WPS225, WPS226, WPS229, WPS230, WPS231, WPS236, WPS238, WPS300, WPS301, WPS302, WPS306, WPS317, WPS318, WPS322, WPS323, WPS326, WPS329, WPS331, WPS337, WPS338, WPS342, WPS352, WPS410, WPS420, WPS421, WPS422, WPS428, WPS429, WPS432, WPS433, WPS436, WPS437, WPS440, WPS462, WPS503, WPS504, WPS505, WPS510, WPS601, WPS602, WPS608
  cheroot/ssl/builtin.py: DAR101, DAR201, DAR401, I001, I003, N806, RST304, WPS110, WPS111, WPS115, WPS117, WPS120, WPS121, WPS122, WPS130, WPS201, WPS210, WPS214, WPS229, WPS231, WPS300, WPS317, WPS318, WPS322, WPS323, WPS326, WPS338, WPS422, WPS428, WPS433, WPS436, WPS437, WPS440, WPS462, WPS501, WPS505, WPS507, WPS529, WPS608, WPS612
  cheroot/ssl/pyopenssl.py: C815, DAR101, DAR201, DAR401, I001, I003, I005, N801, N804, RST304, WPS100, WPS110, WPS111, WPS117, WPS120, WPS121, WPS130, WPS210, WPS220, WPS221, WPS225, WPS229, WPS231, WPS238, WPS300, WPS301, WPS304, WPS306, WPS317, WPS318, WPS322, WPS323, WPS335, WPS338, WPS352, WPS420, WPS422, WPS425, WPS428, WPS430, WPS432, WPS433, WPS440, WPS462, WPS501, WPS503, WPS505, WPS601, WPS608, WPS615
  cheroot/test/conftest.py: DAR101, DAR201, DAR301, I001, I003, I005, WPS100, WPS130, WPS300, WPS325, WPS354, WPS420, WPS422, WPS430, WPS442, WPS457
  cheroot/test/helper.py: DAR101, DAR201, DAR401, I001, I003, I004, N802, WPS110, WPS111, WPS121, WPS201, WPS220, WPS231, WPS301, WPS306, WPS323, WPS337, WPS414, WPS421, WPS422, WPS503, WPS505, WPS508
  cheroot/test/test_cli.py: DAR101, DAR201, I001, I005, N802, S101, S108, WPS110, WPS306, WPS317, WPS421, WPS431, WPS442
  cheroot/test/test_makefile.py: DAR101, DAR201, I004, RST304, S101, WPS110, WPS122, WPS306
  cheroot/test/test_wsgi.py: DAR101, DAR301, I001, I004, S101, WPS110, WPS111, WPS117, WPS118, WPS121, WPS210, WPS421, WPS430, WPS432, WPS436, WPS437, WPS441, WPS442, WPS509
  cheroot/test/test_core.py: C815, DAR101, DAR201, DAR401, I003, I004, N805, N806, S101, WPS110, WPS111, WPS114, WPS121, WPS202, WPS204, WPS226, WPS229, WPS302, WPS306, WPS317, WPS323, WPS324, WPS326, WPS421, WPS422, WPS432, WPS437, WPS442
  cheroot/test/test_dispatch.py: DAR101, DAR201, S101, WPS111, WPS121, WPS302, WPS422, WPS430
  cheroot/test/test_ssl.py: C818, DAR101, DAR201, DAR301, DAR401, E800, I001, I003, I004, I005, S101, S309, S404, S603, WPS100, WPS110, WPS111, WPS114, WPS121, WPS130, WPS201, WPS202, WPS204, WPS210, WPS211, WPS218, WPS219, WPS222, WPS226, WPS231, WPS300, WPS301, WPS317, WPS318, WPS324, WPS326, WPS335, WPS336, WPS337, WPS352, WPS408, WPS420, WPS421, WPS422, WPS432, WPS436, WPS440, WPS441, WPS442, WPS450, WPS509, WPS510, WPS608
  cheroot/test/test_server.py: DAR101, DAR201, DAR301, I001, I003, I004, I005, S101, WPS110, WPS111, WPS118, WPS121, WPS122, WPS130, WPS201, WPS202, WPS210, WPS218, WPS226, WPS229, WPS300, WPS317, WPS318, WPS324, WPS326, WPS421, WPS422, WPS430, WPS432, WPS433, WPS436, WPS437, WPS442, WPS507, WPS509, WPS608
  cheroot/test/test_conn.py: B007, DAR101, DAR201, DAR301, DAR401, E800, I001, I003, I004, I005, N802, N805, RST304, S101, S310, WPS100, WPS110, WPS111, WPS114, WPS115, WPS120, WPS121, WPS122, WPS201, WPS202, WPS204, WPS210, WPS211, WPS213, WPS214, WPS218, WPS219, WPS226, WPS231, WPS301, WPS306, WPS317, WPS318, WPS323, WPS326, WPS361, WPS402, WPS420, WPS421, WPS422, WPS425, WPS429, WPS430, WPS432, WPS435, WPS436, WPS437, WPS440, WPS442, WPS447, WPS462, WPS508, WPS509, WPS510, WPS526
  cheroot/test/webtest.py: B007, DAR101, DAR201, DAR401, I001, I003, I004, N802, RST303, RST304, S101, S104, WPS100, WPS110, WPS111, WPS115, WPS120, WPS121, WPS122, WPS201, WPS202, WPS204, WPS210, WPS211, WPS213, WPS214, WPS220, WPS221, WPS223, WPS229, WPS230, WPS231, WPS236, WPS301, WPS306, WPS317, WPS323, WPS326, WPS338, WPS361, WPS414, WPS420, WPS421, WPS422, WPS430, WPS432, WPS433, WPS437, WPS440, WPS501, WPS503, WPS505, WPS601
  cheroot/testing.py: B014, C815, DAR101, DAR201, DAR301, I001, I003, S104, WPS100, WPS202, WPS211, WPS229, WPS301, WPS306, WPS317, WPS414, WPS420, WPS422, WPS430, WPS503, WPS526
  cheroot/workers/threadpool.py: B007, DAR101, DAR201, E800, I001, I003, I004, RST201, RST203, RST301, WPS100, WPS110, WPS111, WPS121, WPS125, WPS211, WPS214, WPS220, WPS229, WPS230, WPS231, WPS304, WPS306, WPS317, WPS318, WPS322, WPS326, WPS335, WPS338, WPS362, WPS410, WPS414, WPS420, WPS422, WPS428, WPS432, WPS440, WPS462, WPS501, WPS505, WPS601, WPS602, WPS609
  cheroot/wsgi.py: DAR101, DAR201, DAR401, I001, I003, I005, N801, RST201, RST301, WPS100, WPS110, WPS111, WPS114, WPS121, WPS122, WPS125, WPS130, WPS210, WPS211, WPS226, WPS229, WPS231, WPS300, WPS306, WPS317, WPS322, WPS323, WPS326, WPS338, WPS420, WPS421, WPS422, WPS428, WPS430, WPS436, WPS462, WPS501, WPS504, WPS602, WPS608
  cheroot/ssl/__init__.py: DAR101, DAR201, I003, WPS306, WPS317, WPS318, WPS412, WPS422
  cheroot/test/_pytest_plugin.py: DAR101, I003, I004, WPS326, WPS422, WPS437
  cheroot/test/test__compat.py: DAR101, I001, I003, I005, WPS116, WPS226, WPS302, WPS317, WPS318, WPS326, WPS422, WPS436, S101
  cheroot/test/test_errors.py: DAR101, WPS300, WPS317, WPS436, WPS509, S101
  docs/conf.py: E800, I001, I004, WPS226, WPS301, WPS323, WPS326, WPS420, WPS433, WPS453
  docs/scm_tag_titles_ext.py: DAR101, DAR201, DAR401, E800, I001, I004, N801, S404, S603, WPS210, WPS226, WPS301, WPS317, WPS323, WPS407, WPS453
  docs/spelling_stub_ext.py: DAR101, DAR201
  setup.py: WPS453

# Count the number of occurrences of each error/warning code and print a report:
statistics = true

# flake8-eradicate
# E800:
eradicate-whitelist-extend = isort:\s+\w+

# flake8-pytest-style
# PT001:
pytest-fixture-no-parentheses = true
# PT006:
pytest-parametrize-names-type = tuple
# PT007:
pytest-parametrize-values-type = tuple
pytest-parametrize-values-row-type = tuple
# PT023:
pytest-mark-no-parentheses = true

# flake8-rst-docstrings
rst-directives =
  spelling
rst-roles =
  # Built-in Sphinx roles:
  class,
  data,
  exc,
  meth,
  term,
  py:class,
  py:data,
  py:exc,
  py:meth,
  py:term,
  # Sphinx's internal role:
  event,

# wemake-python-styleguide
show-source = true
