[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,
  # Countless third-party libs in venvs
  .tox,
  # Occasional virtualenv dir
  .venv,
  # VS Code
  .vscode,
  # Temporary build dir
  build,
  # This contains sdists and wheels 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,
  # I: isort-handled
  I,
  # W505: "doc line too long", its function is replaced by `flake8-length`
  W505,
  # S101: MyPy requires `asserts`, plus they're not bad if cooked well
  S101,
  # WPS300: "Found local folder import" -- nothing bad about this
  WPS300,
  # WPS305: "Found f string" -- nothing bad about this
  WPS305,
  # An opposite consistency expectation is currently enforced
  # by pylint via: useless-object-inheritance (R0205):
  # WPS306: "Found class without a base class: *" -- nothing bad about this
  WPS306,
  # WPS317 enforces weird indents
  WPS317,
  # WPS318 enforces weird indents too
  WPS318,
  # WPS322: "Found incorrect multi-line string" -- false-positives with
  # attribute docstrings. Ref:
  # https://github.com/wemake-services/wemake-python-styleguide/issues/3056
  WPS322,
  # WPS326: "Found implicit string concatenation" -- nothing bad about this
  WPS326,
  # WPS332: "Found walrus operator" -- ain't nothing bad about this
  WPS332,
  # WPS422: "Found future import: *" -- we need these for multipython
  WPS422,
  # WPS428: "Found statement that has no effect" -- false-positives with
  # attribute docstrings. Ref:
  # https://github.com/wemake-services/wemake-python-styleguide/issues/3056
  WPS428,
  # WPS462: "Wrong multiline string usage" -- false-positives with
  # attribute docstrings. Ref:
  # https://github.com/wemake-services/wemake-python-styleguide/issues/3056
  WPS462,

# IMPORTANT: avoid using select option, always use extend-select instead
# Enable the following errors:
extend-select =
  # B950: "line too long", longer than `max-line-length` + 10%
  B950,

# 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.
# This is being flexibly extended through the `flake8-length`:
max-line-length = 79

# Allow certain violations in certain files:
# Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future
per-file-ignores =
  # The following ignores have been researched and should be considered permanent
  # each should be preceded with an explanation of each of the error codes
  # If other ignores are added for a specific file in the section following this,
  # these will need to be added to that line as well.

  # There are multiple `assert`s (S101)
  # and subprocesses (import – S404; call – S603) in tests;
  # there are also password checks (S105);
  # plus, we don't care about the security of temporary directories in tests (S108);
  # also, using fixtures looks like shadowing the outer scope (WPS442);
  # nested functions are often necessary for mocking (WPS430);
  # furthermore, we should be able to import and test private attributes
  # (WPS450) and modules (WPS436), and finally it's impossible to
  # have <= members in tests (WPS202), including many local vars (WPS210),
  # `pytest.raises()` allows inspecting the exception outside the CM (WPS441),
  # additionally test docstrings don't need param lists (DAR, DCO020):
  tests/**.py: DAR, DCO020, S101, S105, S108, S404, S603, WPS202, WPS210, WPS430, WPS436, WPS441, WPS442, WPS450

  tests/_temporary_private_container_api_test.py: DAR, DCO020, S101, S105, S108, S404, S603, WPS202, WPS210, WPS226, WPS430, WPS436, WPS441, WPS442, WPS450
  tests/_temporary_private_inject_api_test.py: DAR, DCO020, S101, S105, S108, S404, S603, WPS202, WPS210, WPS226, WPS430, WPS436, WPS441, WPS442, WPS450, WPS201

  src/awx_plugins/interfaces/_temporary_private_inject_api.py: ANN001,ANN201,B950,C901,CCR001,D103,E800,LN001,LN002,Q003,WPS110,WPS111,WPS118,WPS125,WPS204,WPS210,WPS211,WPS213,WPS221,WPS226,WPS231,WPS232,WPS319,WPS323,WPS336,WPS337,WPS361,WPS421,WPS429,WPS430,WPS431,WPS436,WPS442,WPS503,WPS507,WPS516,WPS226

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

# ## Plugin-provided settings: ##

# flake8-eradicate
# E800:
eradicate-whitelist-extend = isort:\s+\w+|Ref:\s+https?:\/\/

# 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,
  file,
  exc,
  meth,
  mod,
  term,
  py:class,
  py:data,
  py:exc,
  py:meth,
  py:term,
  # Sphinx's internal role:
  event,

# wemake-python-styleguide
i-control-code = false
show-violation-links = true
show-source = true
